// 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  S499C6_nt  {
  int s499c6f0[2];
  void  mf499c6(); // _ZN9S499C6_nt7mf499c6Ev
};
//SIG(-1 S499C6_nt) C1{ m Fi[2]}


void  S499C6_nt ::mf499c6(){}

//skip512 S499C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C5_nt  {
  int s499c5f0;
  __tsi64 s499c5f1;
  void *s499c5f2[4];
  int s499c5f3[2];
  void *s499c5f4;
  ::S499C6_nt s499c5f5;
  void *s499c5f6[2];
  virtual  ~S499C5_nt(); // _ZN9S499C5_ntD1Ev
  virtual void  v19(); // _ZN9S499C5_nt3v19Ev
  virtual void  v20(); // _ZN9S499C5_nt3v20Ev
  virtual void  v21(); // _ZN9S499C5_nt3v21Ev
  virtual void  v22(); // _ZN9S499C5_nt3v22Ev
  virtual void  v23(); // _ZN9S499C5_nt3v23Ev
  virtual void  v24(); // _ZN9S499C5_nt3v24Ev
  virtual void  v25(); // _ZN9S499C5_nt3v25Ev
  virtual void  v26(); // _ZN9S499C5_nt3v26Ev
  virtual void  v27(); // _ZN9S499C5_nt3v27Ev
  virtual void  v28(); // _ZN9S499C5_nt3v28Ev
  virtual void  v29(); // _ZN9S499C5_nt3v29Ev
  virtual void  v30(); // _ZN9S499C5_nt3v30Ev
  virtual void  v31(); // _ZN9S499C5_nt3v31Ev
  virtual void  v32(); // _ZN9S499C5_nt3v32Ev
  virtual void  v33(); // _ZN9S499C5_nt3v33Ev
  virtual void  v34(); // _ZN9S499C5_nt3v34Ev
  virtual void  v35(); // _ZN9S499C5_nt3v35Ev
  virtual void  v36(); // _ZN9S499C5_nt3v36Ev
  virtual void  v37(); // _ZN9S499C5_nt3v37Ev
  virtual void  v38(); // _ZN9S499C5_nt3v38Ev
  virtual void  v39(); // _ZN9S499C5_nt3v39Ev
  virtual void  v40(); // _ZN9S499C5_nt3v40Ev
  virtual void  v41(); // _ZN9S499C5_nt3v41Ev
  virtual void  v42(); // _ZN9S499C5_nt3v42Ev
  virtual void  v43(); // _ZN9S499C5_nt3v43Ev
  virtual void  v44(); // _ZN9S499C5_nt3v44Ev
  virtual void  v45(); // _ZN9S499C5_nt3v45Ev
  virtual void  v46(); // _ZN9S499C5_nt3v46Ev
  virtual void  v47(); // _ZN9S499C5_nt3v47Ev
  virtual void  v48(); // _ZN9S499C5_nt3v48Ev
  virtual void  v49(); // _ZN9S499C5_nt3v49Ev
  virtual void  v50(); // _ZN9S499C5_nt3v50Ev
  virtual void  v51(); // _ZN9S499C5_nt3v51Ev
  virtual void  v52(); // _ZN9S499C5_nt3v52Ev
  virtual void  v53(); // _ZN9S499C5_nt3v53Ev
  virtual void  v54(); // _ZN9S499C5_nt3v54Ev
  virtual void  v55(); // _ZN9S499C5_nt3v55Ev
  virtual void  v56(); // _ZN9S499C5_nt3v56Ev
  virtual void  v57(); // _ZN9S499C5_nt3v57Ev
  virtual void  v58(); // _ZN9S499C5_nt3v58Ev
  virtual void  v59(); // _ZN9S499C5_nt3v59Ev
  virtual void  v60(); // _ZN9S499C5_nt3v60Ev
  virtual void  v61(); // _ZN9S499C5_nt3v61Ev
  virtual void  v62(); // _ZN9S499C5_nt3v62Ev
  virtual void  v63(); // _ZN9S499C5_nt3v63Ev
  virtual void  v64(); // _ZN9S499C5_nt3v64Ev
  virtual void  v65(); // _ZN9S499C5_nt3v65Ev
  virtual void  v66(); // _ZN9S499C5_nt3v66Ev
  virtual void  v67(); // _ZN9S499C5_nt3v67Ev
  virtual void  v68(); // _ZN9S499C5_nt3v68Ev
  virtual void  v69(); // _ZN9S499C5_nt3v69Ev
  virtual void  v70(); // _ZN9S499C5_nt3v70Ev
  virtual void  v71(); // _ZN9S499C5_nt3v71Ev
  virtual void  v72(); // _ZN9S499C5_nt3v72Ev
  virtual void  v73(); // _ZN9S499C5_nt3v73Ev
  virtual void  v74(); // _ZN9S499C5_nt3v74Ev
  virtual void  v75(); // _ZN9S499C5_nt3v75Ev
  virtual void  v76(); // _ZN9S499C5_nt3v76Ev
  virtual void  v77(); // _ZN9S499C5_nt3v77Ev
  virtual void  v78(); // _ZN9S499C5_nt3v78Ev
  virtual void  v79(); // _ZN9S499C5_nt3v79Ev
  virtual void  v80(); // _ZN9S499C5_nt3v80Ev
  virtual void  v81(); // _ZN9S499C5_nt3v81Ev
  virtual void  v82(); // _ZN9S499C5_nt3v82Ev
  S499C5_nt(); // tgen
};
//SIG(-1 S499C5_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]}


 S499C5_nt ::~S499C5_nt(){ note_dtor("S499C5_nt", this);}
void  S499C5_nt ::v19(){vfunc_called(this, "_ZN9S499C5_nt3v19Ev");}
void  S499C5_nt ::v20(){vfunc_called(this, "_ZN9S499C5_nt3v20Ev");}
void  S499C5_nt ::v21(){vfunc_called(this, "_ZN9S499C5_nt3v21Ev");}
void  S499C5_nt ::v22(){vfunc_called(this, "_ZN9S499C5_nt3v22Ev");}
void  S499C5_nt ::v23(){vfunc_called(this, "_ZN9S499C5_nt3v23Ev");}
void  S499C5_nt ::v24(){vfunc_called(this, "_ZN9S499C5_nt3v24Ev");}
void  S499C5_nt ::v25(){vfunc_called(this, "_ZN9S499C5_nt3v25Ev");}
void  S499C5_nt ::v26(){vfunc_called(this, "_ZN9S499C5_nt3v26Ev");}
void  S499C5_nt ::v27(){vfunc_called(this, "_ZN9S499C5_nt3v27Ev");}
void  S499C5_nt ::v28(){vfunc_called(this, "_ZN9S499C5_nt3v28Ev");}
void  S499C5_nt ::v29(){vfunc_called(this, "_ZN9S499C5_nt3v29Ev");}
void  S499C5_nt ::v30(){vfunc_called(this, "_ZN9S499C5_nt3v30Ev");}
void  S499C5_nt ::v31(){vfunc_called(this, "_ZN9S499C5_nt3v31Ev");}
void  S499C5_nt ::v32(){vfunc_called(this, "_ZN9S499C5_nt3v32Ev");}
void  S499C5_nt ::v33(){vfunc_called(this, "_ZN9S499C5_nt3v33Ev");}
void  S499C5_nt ::v34(){vfunc_called(this, "_ZN9S499C5_nt3v34Ev");}
void  S499C5_nt ::v35(){vfunc_called(this, "_ZN9S499C5_nt3v35Ev");}
void  S499C5_nt ::v36(){vfunc_called(this, "_ZN9S499C5_nt3v36Ev");}
void  S499C5_nt ::v37(){vfunc_called(this, "_ZN9S499C5_nt3v37Ev");}
void  S499C5_nt ::v38(){vfunc_called(this, "_ZN9S499C5_nt3v38Ev");}
void  S499C5_nt ::v39(){vfunc_called(this, "_ZN9S499C5_nt3v39Ev");}
void  S499C5_nt ::v40(){vfunc_called(this, "_ZN9S499C5_nt3v40Ev");}
void  S499C5_nt ::v41(){vfunc_called(this, "_ZN9S499C5_nt3v41Ev");}
void  S499C5_nt ::v42(){vfunc_called(this, "_ZN9S499C5_nt3v42Ev");}
void  S499C5_nt ::v43(){vfunc_called(this, "_ZN9S499C5_nt3v43Ev");}
void  S499C5_nt ::v44(){vfunc_called(this, "_ZN9S499C5_nt3v44Ev");}
void  S499C5_nt ::v45(){vfunc_called(this, "_ZN9S499C5_nt3v45Ev");}
void  S499C5_nt ::v46(){vfunc_called(this, "_ZN9S499C5_nt3v46Ev");}
void  S499C5_nt ::v47(){vfunc_called(this, "_ZN9S499C5_nt3v47Ev");}
void  S499C5_nt ::v48(){vfunc_called(this, "_ZN9S499C5_nt3v48Ev");}
void  S499C5_nt ::v49(){vfunc_called(this, "_ZN9S499C5_nt3v49Ev");}
void  S499C5_nt ::v50(){vfunc_called(this, "_ZN9S499C5_nt3v50Ev");}
void  S499C5_nt ::v51(){vfunc_called(this, "_ZN9S499C5_nt3v51Ev");}
void  S499C5_nt ::v52(){vfunc_called(this, "_ZN9S499C5_nt3v52Ev");}
void  S499C5_nt ::v53(){vfunc_called(this, "_ZN9S499C5_nt3v53Ev");}
void  S499C5_nt ::v54(){vfunc_called(this, "_ZN9S499C5_nt3v54Ev");}
void  S499C5_nt ::v55(){vfunc_called(this, "_ZN9S499C5_nt3v55Ev");}
void  S499C5_nt ::v56(){vfunc_called(this, "_ZN9S499C5_nt3v56Ev");}
void  S499C5_nt ::v57(){vfunc_called(this, "_ZN9S499C5_nt3v57Ev");}
void  S499C5_nt ::v58(){vfunc_called(this, "_ZN9S499C5_nt3v58Ev");}
void  S499C5_nt ::v59(){vfunc_called(this, "_ZN9S499C5_nt3v59Ev");}
void  S499C5_nt ::v60(){vfunc_called(this, "_ZN9S499C5_nt3v60Ev");}
void  S499C5_nt ::v61(){vfunc_called(this, "_ZN9S499C5_nt3v61Ev");}
void  S499C5_nt ::v62(){vfunc_called(this, "_ZN9S499C5_nt3v62Ev");}
void  S499C5_nt ::v63(){vfunc_called(this, "_ZN9S499C5_nt3v63Ev");}
void  S499C5_nt ::v64(){vfunc_called(this, "_ZN9S499C5_nt3v64Ev");}
void  S499C5_nt ::v65(){vfunc_called(this, "_ZN9S499C5_nt3v65Ev");}
void  S499C5_nt ::v66(){vfunc_called(this, "_ZN9S499C5_nt3v66Ev");}
void  S499C5_nt ::v67(){vfunc_called(this, "_ZN9S499C5_nt3v67Ev");}
void  S499C5_nt ::v68(){vfunc_called(this, "_ZN9S499C5_nt3v68Ev");}
void  S499C5_nt ::v69(){vfunc_called(this, "_ZN9S499C5_nt3v69Ev");}
void  S499C5_nt ::v70(){vfunc_called(this, "_ZN9S499C5_nt3v70Ev");}
void  S499C5_nt ::v71(){vfunc_called(this, "_ZN9S499C5_nt3v71Ev");}
void  S499C5_nt ::v72(){vfunc_called(this, "_ZN9S499C5_nt3v72Ev");}
void  S499C5_nt ::v73(){vfunc_called(this, "_ZN9S499C5_nt3v73Ev");}
void  S499C5_nt ::v74(){vfunc_called(this, "_ZN9S499C5_nt3v74Ev");}
void  S499C5_nt ::v75(){vfunc_called(this, "_ZN9S499C5_nt3v75Ev");}
void  S499C5_nt ::v76(){vfunc_called(this, "_ZN9S499C5_nt3v76Ev");}
void  S499C5_nt ::v77(){vfunc_called(this, "_ZN9S499C5_nt3v77Ev");}
void  S499C5_nt ::v78(){vfunc_called(this, "_ZN9S499C5_nt3v78Ev");}
void  S499C5_nt ::v79(){vfunc_called(this, "_ZN9S499C5_nt3v79Ev");}
void  S499C5_nt ::v80(){vfunc_called(this, "_ZN9S499C5_nt3v80Ev");}
void  S499C5_nt ::v81(){vfunc_called(this, "_ZN9S499C5_nt3v81Ev");}
void  S499C5_nt ::v82(){vfunc_called(this, "_ZN9S499C5_nt3v82Ev");}
S499C5_nt ::S499C5_nt(){ note_ctor("S499C5_nt", this);} // tgen

//skip512 S499C5_nt

#else // __cplusplus

extern void _ZN9S499C5_ntC1Ev();
extern void _ZN9S499C5_ntD1Ev();
Name_Map name_map_S499C5_nt[] = {
  NSPAIR(_ZN9S499C5_ntC1Ev),
  NSPAIR(_ZN9S499C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S499C5_nt[];
extern void _ZN9S499C5_ntD1Ev();
extern void _ZN9S499C5_ntD0Ev();
extern void _ZN9S499C5_nt3v19Ev();
extern void _ZN9S499C5_nt3v20Ev();
extern void _ZN9S499C5_nt3v21Ev();
extern void _ZN9S499C5_nt3v22Ev();
extern void _ZN9S499C5_nt3v23Ev();
extern void _ZN9S499C5_nt3v24Ev();
extern void _ZN9S499C5_nt3v25Ev();
extern void _ZN9S499C5_nt3v26Ev();
extern void _ZN9S499C5_nt3v27Ev();
extern void _ZN9S499C5_nt3v28Ev();
extern void _ZN9S499C5_nt3v29Ev();
extern void _ZN9S499C5_nt3v30Ev();
extern void _ZN9S499C5_nt3v31Ev();
extern void _ZN9S499C5_nt3v32Ev();
extern void _ZN9S499C5_nt3v33Ev();
extern void _ZN9S499C5_nt3v34Ev();
extern void _ZN9S499C5_nt3v35Ev();
extern void _ZN9S499C5_nt3v36Ev();
extern void _ZN9S499C5_nt3v37Ev();
extern void _ZN9S499C5_nt3v38Ev();
extern void _ZN9S499C5_nt3v39Ev();
extern void _ZN9S499C5_nt3v40Ev();
extern void _ZN9S499C5_nt3v41Ev();
extern void _ZN9S499C5_nt3v42Ev();
extern void _ZN9S499C5_nt3v43Ev();
extern void _ZN9S499C5_nt3v44Ev();
extern void _ZN9S499C5_nt3v45Ev();
extern void _ZN9S499C5_nt3v46Ev();
extern void _ZN9S499C5_nt3v47Ev();
extern void _ZN9S499C5_nt3v48Ev();
extern void _ZN9S499C5_nt3v49Ev();
extern void _ZN9S499C5_nt3v50Ev();
extern void _ZN9S499C5_nt3v51Ev();
extern void _ZN9S499C5_nt3v52Ev();
extern void _ZN9S499C5_nt3v53Ev();
extern void _ZN9S499C5_nt3v54Ev();
extern void _ZN9S499C5_nt3v55Ev();
extern void _ZN9S499C5_nt3v56Ev();
extern void _ZN9S499C5_nt3v57Ev();
extern void _ZN9S499C5_nt3v58Ev();
extern void _ZN9S499C5_nt3v59Ev();
extern void _ZN9S499C5_nt3v60Ev();
extern void _ZN9S499C5_nt3v61Ev();
extern void _ZN9S499C5_nt3v62Ev();
extern void _ZN9S499C5_nt3v63Ev();
extern void _ZN9S499C5_nt3v64Ev();
extern void _ZN9S499C5_nt3v65Ev();
extern void _ZN9S499C5_nt3v66Ev();
extern void _ZN9S499C5_nt3v67Ev();
extern void _ZN9S499C5_nt3v68Ev();
extern void _ZN9S499C5_nt3v69Ev();
extern void _ZN9S499C5_nt3v70Ev();
extern void _ZN9S499C5_nt3v71Ev();
extern void _ZN9S499C5_nt3v72Ev();
extern void _ZN9S499C5_nt3v73Ev();
extern void _ZN9S499C5_nt3v74Ev();
extern void _ZN9S499C5_nt3v75Ev();
extern void _ZN9S499C5_nt3v76Ev();
extern void _ZN9S499C5_nt3v77Ev();
extern void _ZN9S499C5_nt3v78Ev();
extern void _ZN9S499C5_nt3v79Ev();
extern void _ZN9S499C5_nt3v80Ev();
extern void _ZN9S499C5_nt3v81Ev();
extern void _ZN9S499C5_nt3v82Ev();
static  VTBL_ENTRY vtc_S499C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S499C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S499C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S499C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v82Ev,
};
extern VTBL_ENTRY _ZTI9S499C5_nt[];
VTBL_ENTRY *P__ZTI9S499C5_nt = _ZTI9S499C5_nt; 
extern  VTBL_ENTRY _ZTV9S499C5_nt[];
Class_Descriptor cd_S499C5_nt = {  "S499C5_nt", // class name
  0,0,//no base classes
  &(vtc_S499C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S499C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S499C5_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  S499C4_nt  : S499C5_nt {
  virtual  ~S499C4_nt(); // _ZN9S499C4_ntD1Ev
  virtual void  v83(); // _ZN9S499C4_nt3v83Ev
  virtual void  v84(); // _ZN9S499C4_nt3v84Ev
  S499C4_nt(); // tgen
};
//SIG(-1 S499C4_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}


 S499C4_nt ::~S499C4_nt(){ note_dtor("S499C4_nt", this);}
void  S499C4_nt ::v83(){vfunc_called(this, "_ZN9S499C4_nt3v83Ev");}
void  S499C4_nt ::v84(){vfunc_called(this, "_ZN9S499C4_nt3v84Ev");}
S499C4_nt ::S499C4_nt(){ note_ctor("S499C4_nt", this);} // tgen

//skip512 S499C4_nt

#else // __cplusplus

extern void _ZN9S499C4_ntC1Ev();
extern void _ZN9S499C4_ntD1Ev();
Name_Map name_map_S499C4_nt[] = {
  NSPAIR(_ZN9S499C4_ntC1Ev),
  NSPAIR(_ZN9S499C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S499C5_nt;
extern VTBL_ENTRY _ZTI9S499C5_nt[];
extern  VTBL_ENTRY _ZTV9S499C5_nt[];
static Base_Class bases_S499C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S499C4_nt[];
extern void _ZN9S499C4_ntD1Ev();
extern void _ZN9S499C4_ntD0Ev();
extern void _ZN9S499C5_nt3v19Ev();
extern void _ZN9S499C5_nt3v20Ev();
extern void _ZN9S499C5_nt3v21Ev();
extern void _ZN9S499C5_nt3v22Ev();
extern void _ZN9S499C5_nt3v23Ev();
extern void _ZN9S499C5_nt3v24Ev();
extern void _ZN9S499C5_nt3v25Ev();
extern void _ZN9S499C5_nt3v26Ev();
extern void _ZN9S499C5_nt3v27Ev();
extern void _ZN9S499C5_nt3v28Ev();
extern void _ZN9S499C5_nt3v29Ev();
extern void _ZN9S499C5_nt3v30Ev();
extern void _ZN9S499C5_nt3v31Ev();
extern void _ZN9S499C5_nt3v32Ev();
extern void _ZN9S499C5_nt3v33Ev();
extern void _ZN9S499C5_nt3v34Ev();
extern void _ZN9S499C5_nt3v35Ev();
extern void _ZN9S499C5_nt3v36Ev();
extern void _ZN9S499C5_nt3v37Ev();
extern void _ZN9S499C5_nt3v38Ev();
extern void _ZN9S499C5_nt3v39Ev();
extern void _ZN9S499C5_nt3v40Ev();
extern void _ZN9S499C5_nt3v41Ev();
extern void _ZN9S499C5_nt3v42Ev();
extern void _ZN9S499C5_nt3v43Ev();
extern void _ZN9S499C5_nt3v44Ev();
extern void _ZN9S499C5_nt3v45Ev();
extern void _ZN9S499C5_nt3v46Ev();
extern void _ZN9S499C5_nt3v47Ev();
extern void _ZN9S499C5_nt3v48Ev();
extern void _ZN9S499C5_nt3v49Ev();
extern void _ZN9S499C5_nt3v50Ev();
extern void _ZN9S499C5_nt3v51Ev();
extern void _ZN9S499C5_nt3v52Ev();
extern void _ZN9S499C5_nt3v53Ev();
extern void _ZN9S499C5_nt3v54Ev();
extern void _ZN9S499C5_nt3v55Ev();
extern void _ZN9S499C5_nt3v56Ev();
extern void _ZN9S499C5_nt3v57Ev();
extern void _ZN9S499C5_nt3v58Ev();
extern void _ZN9S499C5_nt3v59Ev();
extern void _ZN9S499C5_nt3v60Ev();
extern void _ZN9S499C5_nt3v61Ev();
extern void _ZN9S499C5_nt3v62Ev();
extern void _ZN9S499C5_nt3v63Ev();
extern void _ZN9S499C5_nt3v64Ev();
extern void _ZN9S499C5_nt3v65Ev();
extern void _ZN9S499C5_nt3v66Ev();
extern void _ZN9S499C5_nt3v67Ev();
extern void _ZN9S499C5_nt3v68Ev();
extern void _ZN9S499C5_nt3v69Ev();
extern void _ZN9S499C5_nt3v70Ev();
extern void _ZN9S499C5_nt3v71Ev();
extern void _ZN9S499C5_nt3v72Ev();
extern void _ZN9S499C5_nt3v73Ev();
extern void _ZN9S499C5_nt3v74Ev();
extern void _ZN9S499C5_nt3v75Ev();
extern void _ZN9S499C5_nt3v76Ev();
extern void _ZN9S499C5_nt3v77Ev();
extern void _ZN9S499C5_nt3v78Ev();
extern void _ZN9S499C5_nt3v79Ev();
extern void _ZN9S499C5_nt3v80Ev();
extern void _ZN9S499C5_nt3v81Ev();
extern void _ZN9S499C5_nt3v82Ev();
extern void _ZN9S499C4_nt3v83Ev();
extern void _ZN9S499C4_nt3v84Ev();
static  VTBL_ENTRY vtc_S499C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S499C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S499C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S499C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v84Ev,
};
extern VTBL_ENTRY _ZTI9S499C4_nt[];
VTBL_ENTRY *P__ZTI9S499C4_nt = _ZTI9S499C4_nt; 
extern  VTBL_ENTRY _ZTV9S499C4_nt[];
Class_Descriptor cd_S499C4_nt = {  "S499C4_nt", // class name
  bases_S499C4_nt, 1,
  &(vtc_S499C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S499C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S499C4_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  S499C7_nt  {
  int s499c7f0[4];
  char s499c7f1[9];
  void  mf499c7(); // _ZN9S499C7_nt7mf499c7Ev
};
//SIG(-1 S499C7_nt) C1{ m Fi[4] Fc[9]}


void  S499C7_nt ::mf499c7(){}

//skip512 S499C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C10_nt  {
  void *s499c10f0;
  int s499c10f1[2];
  void  mf499c10(); // _ZN10S499C10_nt8mf499c10Ev
};
//SIG(-1 S499C10_nt) C1{ m Fp Fi[2]}


void  S499C10_nt ::mf499c10(){}

//skip512 S499C10_nt

#else // __cplusplus

Class_Descriptor cd_S499C10_nt = {  "S499C10_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  S499C9_nt  : S499C10_nt {
};
//SIG(-1 S499C9_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S499C9_nt

#else // __cplusplus

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



//skip512 S499C8_nt

#else // __cplusplus

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



static void Test_S499C14()
{
  extern Class_Descriptor cd_S499C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C14, buf);
    S499C14 &lv = *(new (buf) S499C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C14)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S499C14");
    test_class_info(&lv, &cd_S499C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C14(Test_S499C14, "S499C14", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S499C13()
{
  extern Class_Descriptor cd_S499C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C13, buf);
    S499C13 &lv = *(new (buf) S499C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C13)");
    check_base_class_offset(lv, (S499C10_nt*)(S499C14*), 0, "S499C13");
    check_base_class_offset(lv, (S499C14*), 0, "S499C13");
    test_class_info(&lv, &cd_S499C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C13(Test_S499C13, "S499C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
extern Class_Descriptor cd_S499C14;
static Base_Class bases_S499C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S499C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S499C13 = {  "S499C13", // class name
  bases_S499C13, 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  S499C18  : S499C10_nt {
};
//SIG(-1 S499C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S499C18()
{
  extern Class_Descriptor cd_S499C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C18, buf);
    S499C18 &lv = *(new (buf) S499C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C18)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S499C18");
    test_class_info(&lv, &cd_S499C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C18(Test_S499C18, "S499C18", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S499C17()
{
  extern Class_Descriptor cd_S499C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C17, buf);
    S499C17 &lv = *(new (buf) S499C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C17)");
    check_base_class_offset(lv, (S499C10_nt*)(S499C18*), 0, "S499C17");
    check_base_class_offset(lv, (S499C18*), 0, "S499C17");
    test_class_info(&lv, &cd_S499C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C17(Test_S499C17, "S499C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
extern Class_Descriptor cd_S499C18;
static Base_Class bases_S499C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S499C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S499C17 = {  "S499C17", // class name
  bases_S499C17, 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  S499C19_nt  {
  void *s499c19f0;
  ::S499C6_nt s499c19f1;
  void  mf499c19(); // _ZN10S499C19_nt8mf499c19Ev
};
//SIG(-1 S499C19_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S499C19_nt ::mf499c19(){}

//skip512 S499C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C3_nt  : S499C4_nt {
  ::S499C7_nt s499c3f0;
  int s499c3f1;
  unsigned int s499c3f2:1;
  unsigned int s499c3f3:1;
  unsigned int s499c3f4:1;
  unsigned int s499c3f5:1;
  ::S499C8_nt s499c3f6;
  ::S499C8_nt s499c3f7;
  void *s499c3f8;
  ::S499C13 s499c3f9;
  ::S499C13 s499c3f10;
  ::S499C13 s499c3f11;
  ::S499C17 s499c3f12;
  char s499c3f13;
  int s499c3f14;
  void *s499c3f15;
  ::S499C6_nt s499c3f16;
  ::S499C6_nt s499c3f17;
  ::S499C6_nt s499c3f18;
  ::S499C6_nt s499c3f19;
  ::S499C6_nt s499c3f20;
  ::S499C6_nt s499c3f21;
  ::S499C19_nt s499c3f22;
  ::S499C19_nt s499c3f23;
  ::S499C19_nt s499c3f24;
  ::S499C19_nt s499c3f25;
  ::S499C19_nt s499c3f26;
  ::S499C19_nt s499c3f27;
  ::S499C19_nt s499c3f28;
  ::S499C19_nt s499c3f29;
  ::S499C19_nt s499c3f30;
  ::S499C19_nt s499c3f31;
  virtual  ~S499C3_nt(); // _ZN9S499C3_ntD1Ev
  virtual void  v85(); // _ZN9S499C3_nt3v85Ev
  virtual void  v86(); // _ZN9S499C3_nt3v86Ev
  virtual void  v87(); // _ZN9S499C3_nt3v87Ev
  virtual void  v88(); // _ZN9S499C3_nt3v88Ev
  virtual void  v89(); // _ZN9S499C3_nt3v89Ev
  virtual void  v90(); // _ZN9S499C3_nt3v90Ev
  virtual void  v91(); // _ZN9S499C3_nt3v91Ev
  virtual void  v92(); // _ZN9S499C3_nt3v92Ev
  virtual void  v93(); // _ZN9S499C3_nt3v93Ev
  virtual void  v94(); // _ZN9S499C3_nt3v94Ev
  virtual void  v95(); // _ZN9S499C3_nt3v95Ev
  virtual void  v96(); // _ZN9S499C3_nt3v96Ev
  virtual void  v97(); // _ZN9S499C3_nt3v97Ev
  virtual void  v98(); // _ZN9S499C3_nt3v98Ev
  virtual void  v99(); // _ZN9S499C3_nt3v99Ev
  virtual void  v100(); // _ZN9S499C3_nt4v100Ev
  virtual void  v101(); // _ZN9S499C3_nt4v101Ev
  virtual void  v102(); // _ZN9S499C3_nt4v102Ev
  virtual void  v103(); // _ZN9S499C3_nt4v103Ev
  virtual void  v104(); // _ZN9S499C3_nt4v104Ev
  virtual void  v105(); // _ZN9S499C3_nt4v105Ev
  virtual void  v106(); // _ZN9S499C3_nt4v106Ev
  virtual void  v107(); // _ZN9S499C3_nt4v107Ev
  virtual void  v108(); // _ZN9S499C3_nt4v108Ev
  virtual void  v109(); // _ZN9S499C3_nt4v109Ev
  virtual void  v110(); // _ZN9S499C3_nt4v110Ev
  virtual void  v111(); // _ZN9S499C3_nt4v111Ev
  virtual void  v112(); // _ZN9S499C3_nt4v112Ev
  virtual void  v113(); // _ZN9S499C3_nt4v113Ev
  virtual void  v114(); // _ZN9S499C3_nt4v114Ev
  virtual void  v115(); // _ZN9S499C3_nt4v115Ev
  virtual void  v116(); // _ZN9S499C3_nt4v116Ev
  virtual void  v117(); // _ZN9S499C3_nt4v117Ev
  virtual void  v118(); // _ZN9S499C3_nt4v118Ev
  virtual void  v119(); // _ZN9S499C3_nt4v119Ev
  virtual void  v120(); // _ZN9S499C3_nt4v120Ev
  virtual void  v121(); // _ZN9S499C3_nt4v121Ev
  virtual void  v122(); // _ZN9S499C3_nt4v122Ev
  virtual void  v123(); // _ZN9S499C3_nt4v123Ev
  virtual void  v124(); // _ZN9S499C3_nt4v124Ev
  virtual void  v125(); // _ZN9S499C3_nt4v125Ev
  virtual void  v126(); // _ZN9S499C3_nt4v126Ev
  virtual void  v127(); // _ZN9S499C3_nt4v127Ev
  virtual void  v128(); // _ZN9S499C3_nt4v128Ev
  virtual void  v129(); // _ZN9S499C3_nt4v129Ev
  virtual void  v130(); // _ZN9S499C3_nt4v130Ev
  virtual void  v131(); // _ZN9S499C3_nt4v131Ev
  virtual void  v132(); // _ZN9S499C3_nt4v132Ev
  virtual void  v133(); // _ZN9S499C3_nt4v133Ev
  virtual void  v134(); // _ZN9S499C3_nt4v134Ev
  virtual void  v135(); // _ZN9S499C3_nt4v135Ev
  virtual void  v136(); // _ZN9S499C3_nt4v136Ev
  virtual void  v137(); // _ZN9S499C3_nt4v137Ev
  virtual void  v138(); // _ZN9S499C3_nt4v138Ev
  virtual void  v139(); // _ZN9S499C3_nt4v139Ev
  virtual void  v140(); // _ZN9S499C3_nt4v140Ev
  virtual void  v141(); // _ZN9S499C3_nt4v141Ev
  virtual void  v142(); // _ZN9S499C3_nt4v142Ev
  virtual void  v143(); // _ZN9S499C3_nt4v143Ev
  virtual void  v144(); // _ZN9S499C3_nt4v144Ev
  virtual void  v145(); // _ZN9S499C3_nt4v145Ev
  virtual void  v146(); // _ZN9S499C3_nt4v146Ev
  virtual void  v147(); // _ZN9S499C3_nt4v147Ev
  virtual void  v148(); // _ZN9S499C3_nt4v148Ev
  virtual void  v149(); // _ZN9S499C3_nt4v149Ev
  virtual void  v150(); // _ZN9S499C3_nt4v150Ev
  virtual void  v151(); // _ZN9S499C3_nt4v151Ev
  virtual void  v152(); // _ZN9S499C3_nt4v152Ev
  virtual void  v153(); // _ZN9S499C3_nt4v153Ev
  virtual void  v154(); // _ZN9S499C3_nt4v154Ev
  virtual void  v155(); // _ZN9S499C3_nt4v155Ev
  virtual void  v156(); // _ZN9S499C3_nt4v156Ev
  virtual void  v157(); // _ZN9S499C3_nt4v157Ev
  virtual void  v158(); // _ZN9S499C3_nt4v158Ev
  virtual void  v159(); // _ZN9S499C3_nt4v159Ev
  virtual void  v160(); // _ZN9S499C3_nt4v160Ev
  S499C3_nt(); // tgen
};
//SIG(-1 S499C3_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}


 S499C3_nt ::~S499C3_nt(){ note_dtor("S499C3_nt", this);}
void  S499C3_nt ::v85(){vfunc_called(this, "_ZN9S499C3_nt3v85Ev");}
void  S499C3_nt ::v86(){vfunc_called(this, "_ZN9S499C3_nt3v86Ev");}
void  S499C3_nt ::v87(){vfunc_called(this, "_ZN9S499C3_nt3v87Ev");}
void  S499C3_nt ::v88(){vfunc_called(this, "_ZN9S499C3_nt3v88Ev");}
void  S499C3_nt ::v89(){vfunc_called(this, "_ZN9S499C3_nt3v89Ev");}
void  S499C3_nt ::v90(){vfunc_called(this, "_ZN9S499C3_nt3v90Ev");}
void  S499C3_nt ::v91(){vfunc_called(this, "_ZN9S499C3_nt3v91Ev");}
void  S499C3_nt ::v92(){vfunc_called(this, "_ZN9S499C3_nt3v92Ev");}
void  S499C3_nt ::v93(){vfunc_called(this, "_ZN9S499C3_nt3v93Ev");}
void  S499C3_nt ::v94(){vfunc_called(this, "_ZN9S499C3_nt3v94Ev");}
void  S499C3_nt ::v95(){vfunc_called(this, "_ZN9S499C3_nt3v95Ev");}
void  S499C3_nt ::v96(){vfunc_called(this, "_ZN9S499C3_nt3v96Ev");}
void  S499C3_nt ::v97(){vfunc_called(this, "_ZN9S499C3_nt3v97Ev");}
void  S499C3_nt ::v98(){vfunc_called(this, "_ZN9S499C3_nt3v98Ev");}
void  S499C3_nt ::v99(){vfunc_called(this, "_ZN9S499C3_nt3v99Ev");}
void  S499C3_nt ::v100(){vfunc_called(this, "_ZN9S499C3_nt4v100Ev");}
void  S499C3_nt ::v101(){vfunc_called(this, "_ZN9S499C3_nt4v101Ev");}
void  S499C3_nt ::v102(){vfunc_called(this, "_ZN9S499C3_nt4v102Ev");}
void  S499C3_nt ::v103(){vfunc_called(this, "_ZN9S499C3_nt4v103Ev");}
void  S499C3_nt ::v104(){vfunc_called(this, "_ZN9S499C3_nt4v104Ev");}
void  S499C3_nt ::v105(){vfunc_called(this, "_ZN9S499C3_nt4v105Ev");}
void  S499C3_nt ::v106(){vfunc_called(this, "_ZN9S499C3_nt4v106Ev");}
void  S499C3_nt ::v107(){vfunc_called(this, "_ZN9S499C3_nt4v107Ev");}
void  S499C3_nt ::v108(){vfunc_called(this, "_ZN9S499C3_nt4v108Ev");}
void  S499C3_nt ::v109(){vfunc_called(this, "_ZN9S499C3_nt4v109Ev");}
void  S499C3_nt ::v110(){vfunc_called(this, "_ZN9S499C3_nt4v110Ev");}
void  S499C3_nt ::v111(){vfunc_called(this, "_ZN9S499C3_nt4v111Ev");}
void  S499C3_nt ::v112(){vfunc_called(this, "_ZN9S499C3_nt4v112Ev");}
void  S499C3_nt ::v113(){vfunc_called(this, "_ZN9S499C3_nt4v113Ev");}
void  S499C3_nt ::v114(){vfunc_called(this, "_ZN9S499C3_nt4v114Ev");}
void  S499C3_nt ::v115(){vfunc_called(this, "_ZN9S499C3_nt4v115Ev");}
void  S499C3_nt ::v116(){vfunc_called(this, "_ZN9S499C3_nt4v116Ev");}
void  S499C3_nt ::v117(){vfunc_called(this, "_ZN9S499C3_nt4v117Ev");}
void  S499C3_nt ::v118(){vfunc_called(this, "_ZN9S499C3_nt4v118Ev");}
void  S499C3_nt ::v119(){vfunc_called(this, "_ZN9S499C3_nt4v119Ev");}
void  S499C3_nt ::v120(){vfunc_called(this, "_ZN9S499C3_nt4v120Ev");}
void  S499C3_nt ::v121(){vfunc_called(this, "_ZN9S499C3_nt4v121Ev");}
void  S499C3_nt ::v122(){vfunc_called(this, "_ZN9S499C3_nt4v122Ev");}
void  S499C3_nt ::v123(){vfunc_called(this, "_ZN9S499C3_nt4v123Ev");}
void  S499C3_nt ::v124(){vfunc_called(this, "_ZN9S499C3_nt4v124Ev");}
void  S499C3_nt ::v125(){vfunc_called(this, "_ZN9S499C3_nt4v125Ev");}
void  S499C3_nt ::v126(){vfunc_called(this, "_ZN9S499C3_nt4v126Ev");}
void  S499C3_nt ::v127(){vfunc_called(this, "_ZN9S499C3_nt4v127Ev");}
void  S499C3_nt ::v128(){vfunc_called(this, "_ZN9S499C3_nt4v128Ev");}
void  S499C3_nt ::v129(){vfunc_called(this, "_ZN9S499C3_nt4v129Ev");}
void  S499C3_nt ::v130(){vfunc_called(this, "_ZN9S499C3_nt4v130Ev");}
void  S499C3_nt ::v131(){vfunc_called(this, "_ZN9S499C3_nt4v131Ev");}
void  S499C3_nt ::v132(){vfunc_called(this, "_ZN9S499C3_nt4v132Ev");}
void  S499C3_nt ::v133(){vfunc_called(this, "_ZN9S499C3_nt4v133Ev");}
void  S499C3_nt ::v134(){vfunc_called(this, "_ZN9S499C3_nt4v134Ev");}
void  S499C3_nt ::v135(){vfunc_called(this, "_ZN9S499C3_nt4v135Ev");}
void  S499C3_nt ::v136(){vfunc_called(this, "_ZN9S499C3_nt4v136Ev");}
void  S499C3_nt ::v137(){vfunc_called(this, "_ZN9S499C3_nt4v137Ev");}
void  S499C3_nt ::v138(){vfunc_called(this, "_ZN9S499C3_nt4v138Ev");}
void  S499C3_nt ::v139(){vfunc_called(this, "_ZN9S499C3_nt4v139Ev");}
void  S499C3_nt ::v140(){vfunc_called(this, "_ZN9S499C3_nt4v140Ev");}
void  S499C3_nt ::v141(){vfunc_called(this, "_ZN9S499C3_nt4v141Ev");}
void  S499C3_nt ::v142(){vfunc_called(this, "_ZN9S499C3_nt4v142Ev");}
void  S499C3_nt ::v143(){vfunc_called(this, "_ZN9S499C3_nt4v143Ev");}
void  S499C3_nt ::v144(){vfunc_called(this, "_ZN9S499C3_nt4v144Ev");}
void  S499C3_nt ::v145(){vfunc_called(this, "_ZN9S499C3_nt4v145Ev");}
void  S499C3_nt ::v146(){vfunc_called(this, "_ZN9S499C3_nt4v146Ev");}
void  S499C3_nt ::v147(){vfunc_called(this, "_ZN9S499C3_nt4v147Ev");}
void  S499C3_nt ::v148(){vfunc_called(this, "_ZN9S499C3_nt4v148Ev");}
void  S499C3_nt ::v149(){vfunc_called(this, "_ZN9S499C3_nt4v149Ev");}
void  S499C3_nt ::v150(){vfunc_called(this, "_ZN9S499C3_nt4v150Ev");}
void  S499C3_nt ::v151(){vfunc_called(this, "_ZN9S499C3_nt4v151Ev");}
void  S499C3_nt ::v152(){vfunc_called(this, "_ZN9S499C3_nt4v152Ev");}
void  S499C3_nt ::v153(){vfunc_called(this, "_ZN9S499C3_nt4v153Ev");}
void  S499C3_nt ::v154(){vfunc_called(this, "_ZN9S499C3_nt4v154Ev");}
void  S499C3_nt ::v155(){vfunc_called(this, "_ZN9S499C3_nt4v155Ev");}
void  S499C3_nt ::v156(){vfunc_called(this, "_ZN9S499C3_nt4v156Ev");}
void  S499C3_nt ::v157(){vfunc_called(this, "_ZN9S499C3_nt4v157Ev");}
void  S499C3_nt ::v158(){vfunc_called(this, "_ZN9S499C3_nt4v158Ev");}
void  S499C3_nt ::v159(){vfunc_called(this, "_ZN9S499C3_nt4v159Ev");}
void  S499C3_nt ::v160(){vfunc_called(this, "_ZN9S499C3_nt4v160Ev");}
S499C3_nt ::S499C3_nt(){ note_ctor("S499C3_nt", this);} // tgen

//skip512 S499C3_nt

#else // __cplusplus

extern void _ZN9S499C3_ntC1Ev();
extern void _ZN9S499C3_ntD1Ev();
Name_Map name_map_S499C3_nt[] = {
  NSPAIR(_ZN9S499C3_ntC1Ev),
  NSPAIR(_ZN9S499C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S499C5_nt;
extern VTBL_ENTRY _ZTI9S499C5_nt[];
extern  VTBL_ENTRY _ZTV9S499C5_nt[];
extern Class_Descriptor cd_S499C4_nt;
extern VTBL_ENTRY _ZTI9S499C4_nt[];
extern  VTBL_ENTRY _ZTV9S499C4_nt[];
static Base_Class bases_S499C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S499C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S499C3_nt[];
extern void _ZN9S499C3_ntD1Ev();
extern void _ZN9S499C3_ntD0Ev();
extern void _ZN9S499C5_nt3v19Ev();
extern void _ZN9S499C5_nt3v20Ev();
extern void _ZN9S499C5_nt3v21Ev();
extern void _ZN9S499C5_nt3v22Ev();
extern void _ZN9S499C5_nt3v23Ev();
extern void _ZN9S499C5_nt3v24Ev();
extern void _ZN9S499C5_nt3v25Ev();
extern void _ZN9S499C5_nt3v26Ev();
extern void _ZN9S499C5_nt3v27Ev();
extern void _ZN9S499C5_nt3v28Ev();
extern void _ZN9S499C5_nt3v29Ev();
extern void _ZN9S499C5_nt3v30Ev();
extern void _ZN9S499C5_nt3v31Ev();
extern void _ZN9S499C5_nt3v32Ev();
extern void _ZN9S499C5_nt3v33Ev();
extern void _ZN9S499C5_nt3v34Ev();
extern void _ZN9S499C5_nt3v35Ev();
extern void _ZN9S499C5_nt3v36Ev();
extern void _ZN9S499C5_nt3v37Ev();
extern void _ZN9S499C5_nt3v38Ev();
extern void _ZN9S499C5_nt3v39Ev();
extern void _ZN9S499C5_nt3v40Ev();
extern void _ZN9S499C5_nt3v41Ev();
extern void _ZN9S499C5_nt3v42Ev();
extern void _ZN9S499C5_nt3v43Ev();
extern void _ZN9S499C5_nt3v44Ev();
extern void _ZN9S499C5_nt3v45Ev();
extern void _ZN9S499C5_nt3v46Ev();
extern void _ZN9S499C5_nt3v47Ev();
extern void _ZN9S499C5_nt3v48Ev();
extern void _ZN9S499C5_nt3v49Ev();
extern void _ZN9S499C5_nt3v50Ev();
extern void _ZN9S499C5_nt3v51Ev();
extern void _ZN9S499C5_nt3v52Ev();
extern void _ZN9S499C5_nt3v53Ev();
extern void _ZN9S499C5_nt3v54Ev();
extern void _ZN9S499C5_nt3v55Ev();
extern void _ZN9S499C5_nt3v56Ev();
extern void _ZN9S499C5_nt3v57Ev();
extern void _ZN9S499C5_nt3v58Ev();
extern void _ZN9S499C5_nt3v59Ev();
extern void _ZN9S499C5_nt3v60Ev();
extern void _ZN9S499C5_nt3v61Ev();
extern void _ZN9S499C5_nt3v62Ev();
extern void _ZN9S499C5_nt3v63Ev();
extern void _ZN9S499C5_nt3v64Ev();
extern void _ZN9S499C5_nt3v65Ev();
extern void _ZN9S499C5_nt3v66Ev();
extern void _ZN9S499C5_nt3v67Ev();
extern void _ZN9S499C5_nt3v68Ev();
extern void _ZN9S499C5_nt3v69Ev();
extern void _ZN9S499C5_nt3v70Ev();
extern void _ZN9S499C5_nt3v71Ev();
extern void _ZN9S499C5_nt3v72Ev();
extern void _ZN9S499C5_nt3v73Ev();
extern void _ZN9S499C5_nt3v74Ev();
extern void _ZN9S499C5_nt3v75Ev();
extern void _ZN9S499C5_nt3v76Ev();
extern void _ZN9S499C5_nt3v77Ev();
extern void _ZN9S499C5_nt3v78Ev();
extern void _ZN9S499C5_nt3v79Ev();
extern void _ZN9S499C5_nt3v80Ev();
extern void _ZN9S499C5_nt3v81Ev();
extern void _ZN9S499C5_nt3v82Ev();
extern void _ZN9S499C4_nt3v83Ev();
extern void _ZN9S499C4_nt3v84Ev();
extern void _ZN9S499C3_nt3v85Ev();
extern void _ZN9S499C3_nt3v86Ev();
extern void _ZN9S499C3_nt3v87Ev();
extern void _ZN9S499C3_nt3v88Ev();
extern void _ZN9S499C3_nt3v89Ev();
extern void _ZN9S499C3_nt3v90Ev();
extern void _ZN9S499C3_nt3v91Ev();
extern void _ZN9S499C3_nt3v92Ev();
extern void _ZN9S499C3_nt3v93Ev();
extern void _ZN9S499C3_nt3v94Ev();
extern void _ZN9S499C3_nt3v95Ev();
extern void _ZN9S499C3_nt3v96Ev();
extern void _ZN9S499C3_nt3v97Ev();
extern void _ZN9S499C3_nt3v98Ev();
extern void _ZN9S499C3_nt3v99Ev();
extern void _ZN9S499C3_nt4v100Ev();
extern void _ZN9S499C3_nt4v101Ev();
extern void _ZN9S499C3_nt4v102Ev();
extern void _ZN9S499C3_nt4v103Ev();
extern void _ZN9S499C3_nt4v104Ev();
extern void _ZN9S499C3_nt4v105Ev();
extern void _ZN9S499C3_nt4v106Ev();
extern void _ZN9S499C3_nt4v107Ev();
extern void _ZN9S499C3_nt4v108Ev();
extern void _ZN9S499C3_nt4v109Ev();
extern void _ZN9S499C3_nt4v110Ev();
extern void _ZN9S499C3_nt4v111Ev();
extern void _ZN9S499C3_nt4v112Ev();
extern void _ZN9S499C3_nt4v113Ev();
extern void _ZN9S499C3_nt4v114Ev();
extern void _ZN9S499C3_nt4v115Ev();
extern void _ZN9S499C3_nt4v116Ev();
extern void _ZN9S499C3_nt4v117Ev();
extern void _ZN9S499C3_nt4v118Ev();
extern void _ZN9S499C3_nt4v119Ev();
extern void _ZN9S499C3_nt4v120Ev();
extern void _ZN9S499C3_nt4v121Ev();
extern void _ZN9S499C3_nt4v122Ev();
extern void _ZN9S499C3_nt4v123Ev();
extern void _ZN9S499C3_nt4v124Ev();
extern void _ZN9S499C3_nt4v125Ev();
extern void _ZN9S499C3_nt4v126Ev();
extern void _ZN9S499C3_nt4v127Ev();
extern void _ZN9S499C3_nt4v128Ev();
extern void _ZN9S499C3_nt4v129Ev();
extern void _ZN9S499C3_nt4v130Ev();
extern void _ZN9S499C3_nt4v131Ev();
extern void _ZN9S499C3_nt4v132Ev();
extern void _ZN9S499C3_nt4v133Ev();
extern void _ZN9S499C3_nt4v134Ev();
extern void _ZN9S499C3_nt4v135Ev();
extern void _ZN9S499C3_nt4v136Ev();
extern void _ZN9S499C3_nt4v137Ev();
extern void _ZN9S499C3_nt4v138Ev();
extern void _ZN9S499C3_nt4v139Ev();
extern void _ZN9S499C3_nt4v140Ev();
extern void _ZN9S499C3_nt4v141Ev();
extern void _ZN9S499C3_nt4v142Ev();
extern void _ZN9S499C3_nt4v143Ev();
extern void _ZN9S499C3_nt4v144Ev();
extern void _ZN9S499C3_nt4v145Ev();
extern void _ZN9S499C3_nt4v146Ev();
extern void _ZN9S499C3_nt4v147Ev();
extern void _ZN9S499C3_nt4v148Ev();
extern void _ZN9S499C3_nt4v149Ev();
extern void _ZN9S499C3_nt4v150Ev();
extern void _ZN9S499C3_nt4v151Ev();
extern void _ZN9S499C3_nt4v152Ev();
extern void _ZN9S499C3_nt4v153Ev();
extern void _ZN9S499C3_nt4v154Ev();
extern void _ZN9S499C3_nt4v155Ev();
extern void _ZN9S499C3_nt4v156Ev();
extern void _ZN9S499C3_nt4v157Ev();
extern void _ZN9S499C3_nt4v158Ev();
extern void _ZN9S499C3_nt4v159Ev();
extern void _ZN9S499C3_nt4v160Ev();
static  VTBL_ENTRY vtc_S499C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S499C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S499C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S499C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v160Ev,
};
extern VTBL_ENTRY _ZTI9S499C3_nt[];
VTBL_ENTRY *P__ZTI9S499C3_nt = _ZTI9S499C3_nt; 
extern  VTBL_ENTRY _ZTV9S499C3_nt[];
Class_Descriptor cd_S499C3_nt = {  "S499C3_nt", // class name
  bases_S499C3_nt, 2,
  &(vtc_S499C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,352), // object size
  NSPAIRA(_ZTI9S499C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S499C3_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  S499C21_nt  {
  int s499c21f0[4];
  void  mf499c21(); // _ZN10S499C21_nt8mf499c21Ev
};
//SIG(-1 S499C21_nt) C1{ m Fi[4]}


void  S499C21_nt ::mf499c21(){}

//skip512 S499C21_nt

#else // __cplusplus

Class_Descriptor cd_S499C21_nt = {  "S499C21_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  S499C20_nt  : S499C21_nt {
};
//SIG(-1 S499C20_nt) C1{ BC2{ m Fi[4]}}



//skip512 S499C20_nt

#else // __cplusplus

extern Class_Descriptor cd_S499C21_nt;
static Base_Class bases_S499C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S499C22_nt  {
  ::S499C6_nt s499c22f0;
  void *s499c22f1;
  ::S499C20_nt s499c22f2;
  void *s499c22f3;
  void  mf499c22(); // _ZN10S499C22_nt8mf499c22Ev
};
//SIG(-1 S499C22_nt) C1{ m FC2{ m Fi[2]} Fp FC3{ BC4{ m Fi[4]}} Fp}


void  S499C22_nt ::mf499c22(){}

//skip512 S499C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C24_nt  {
  void *s499c24f0[8];
  char s499c24f1[4];
  void  mf499c24(); // _ZN10S499C24_nt8mf499c24Ev
};
//SIG(-1 S499C24_nt) C1{ m Fp[8] Fc[4]}


void  S499C24_nt ::mf499c24(){}

//skip512 S499C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C26_nt  {
  int s499c26f0[4];
  char s499c26f1[4];
  void  mf499c26(); // _ZN10S499C26_nt8mf499c26Ev
};
//SIG(-1 S499C26_nt) C1{ m Fi[4] Fc[4]}


void  S499C26_nt ::mf499c26(){}

//skip512 S499C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C25_nt  {
  void *s499c25f0[5];
  ::S499C26_nt s499c25f1;
  unsigned int s499c25f2:1;
  unsigned int s499c25f3:1;
  int s499c25f4;
  char s499c25f5[8];
  void  mf499c25(); // _ZN10S499C25_nt8mf499c25Ev
};
//SIG(-1 S499C25_nt) C1{ m Fp[5] FC2{ m Fi[4] Fc[4]} Fi:1 Fi:1 Fi Fc[8]}


void  S499C25_nt ::mf499c25(){}

//skip512 S499C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C29_nt  {
  int s499c29f0[3];
  void  mf499c29(); // _ZN10S499C29_nt8mf499c29Ev
};
//SIG(-1 S499C29_nt) C1{ m Fi[3]}


void  S499C29_nt ::mf499c29(){}

//skip512 S499C29_nt

#else // __cplusplus

Class_Descriptor cd_S499C29_nt = {  "S499C29_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  S499C30_nt  {
  void  mf499c30(); // _ZN10S499C30_nt8mf499c30Ev
};
//SIG(-1 S499C30_nt) C1{ m}


void  S499C30_nt ::mf499c30(){}

//skip512 S499C30_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C32_nt  {
  int s499c32f0[2];
  char s499c32f1[2];
  void  mf499c32(); // _ZN10S499C32_nt8mf499c32Ev
};
//SIG(-1 S499C32_nt) C1{ m Fi[2] Fc[2]}


void  S499C32_nt ::mf499c32(){}

//skip512 S499C32_nt

#else // __cplusplus

Class_Descriptor cd_S499C32_nt = {  "S499C32_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  S499C31_nt  : S499C32_nt {
  int s499c31f0;
};
//SIG(-1 S499C31_nt) C1{ BC2{ m Fi[2] Fc[2]} Fi}



//skip512 S499C31_nt

#else // __cplusplus

extern Class_Descriptor cd_S499C32_nt;
static Base_Class bases_S499C31_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C32_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S499C28_nt  {
  ::S499C29_nt s499c28f0;
  ::S499C30_nt s499c28f1;
  ::S499C31_nt s499c28f2;
  char s499c28f3;
  void  mf499c28(); // _ZN10S499C28_nt8mf499c28Ev
};
//SIG(-1 S499C28_nt) C1{ m FC2{ m Fi[3]} FC3{ m} FC4{ BC5{ m Fi[2] Fc[2]} Fi} Fc}


void  S499C28_nt ::mf499c28(){}

//skip512 S499C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C36_nt  {
  void *s499c36f0[2];
  void  mf499c36(); // _ZN10S499C36_nt8mf499c36Ev
};
//SIG(-1 S499C36_nt) C1{ m Fp[2]}


void  S499C36_nt ::mf499c36(){}

//skip512 S499C36_nt

#else // __cplusplus

Class_Descriptor cd_S499C36_nt = {  "S499C36_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  S499C35_nt  : S499C36_nt {
};
//SIG(-1 S499C35_nt) C1{ BC2{ m Fp[2]}}



//skip512 S499C35_nt

#else // __cplusplus

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



static void Test_S499C39()
{
  extern Class_Descriptor cd_S499C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C39, buf);
    S499C39 &lv = *(new (buf) S499C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C39)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S499C39");
    test_class_info(&lv, &cd_S499C39);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C39(Test_S499C39, "S499C39", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S499C38()
{
  extern Class_Descriptor cd_S499C38;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C38, buf);
    S499C38 &lv = *(new (buf) S499C38());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C38)");
    check_base_class_offset(lv, (S499C10_nt*)(S499C39*), 0, "S499C38");
    check_base_class_offset(lv, (S499C39*), 0, "S499C38");
    test_class_info(&lv, &cd_S499C38);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C38(Test_S499C38, "S499C38", ABISELECT(16,12));

#else // __cplusplus

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



//skip512 S499C37_nt

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
extern Class_Descriptor cd_S499C39;
extern Class_Descriptor cd_S499C38;
static Base_Class bases_S499C37_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S499C39,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S499C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S499C34_nt  {
  ::S499C35_nt s499c34f0;
  char s499c34f1;
  ::S499C37_nt s499c34f2;
  int s499c34f3;
  ::S499C6_nt s499c34f4;
  ::S499C6_nt s499c34f5;
  void *s499c34f6;
  void  mf499c34(); // _ZN10S499C34_nt8mf499c34Ev
};
//SIG(-1 S499C34_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  S499C34_nt ::mf499c34(){}

//skip512 S499C34_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S499C43()
{
  extern Class_Descriptor cd_S499C43;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C43, buf);
    S499C43 &lv = *(new (buf) S499C43());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C43)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S499C43");
    test_class_info(&lv, &cd_S499C43);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C43(Test_S499C43, "S499C43", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S499C42()
{
  extern Class_Descriptor cd_S499C42;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S499C42, buf);
    S499C42 &lv = *(new (buf) S499C42());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S499C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C42)");
    check_base_class_offset(lv, (S499C10_nt*)(S499C43*), 0, "S499C42");
    check_base_class_offset(lv, (S499C43*), 0, "S499C42");
    test_class_info(&lv, &cd_S499C42);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C42(Test_S499C42, "S499C42", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
extern Class_Descriptor cd_S499C43;
static Base_Class bases_S499C42[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S499C43,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S499C42 = {  "S499C42", // class name
  bases_S499C42, 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  S499C2_nt  : S499C3_nt {
  ::S499C20_nt s499c2f0;
  ::S499C6_nt s499c2f1;
  void *s499c2f2[2];
  ::S499C22_nt s499c2f3;
  ::S499C24_nt s499c2f4;
  int s499c2f5;
  ::S499C25_nt s499c2f6;
  int s499c2f7[4];
  ::S499C6_nt s499c2f8[4];
  ::S499C28_nt s499c2f9;
  ::S499C29_nt s499c2f10;
  int s499c2f11;
  ::S499C34_nt s499c2f12;
  ::S499C34_nt s499c2f13;
  void *s499c2f14;
  ::S499C29_nt s499c2f15;
  ::S499C17 s499c2f16;
  ::S499C42 s499c2f17;
  unsigned int s499c2f18:1;
  unsigned int s499c2f19:1;
  unsigned int s499c2f20:1;
  ::S499C30_nt s499c2f21;
  ::S499C19_nt s499c2f22;
  ::S499C19_nt s499c2f23;
  ::S499C19_nt s499c2f24;
  ::S499C19_nt s499c2f25;
  ::S499C19_nt s499c2f26;
  ::S499C19_nt s499c2f27;
  ::S499C19_nt s499c2f28;
  ::S499C19_nt s499c2f29;
  ::S499C19_nt s499c2f30;
  ::S499C19_nt s499c2f31;
  ::S499C19_nt s499c2f32;
  ::S499C19_nt s499c2f33;
  ::S499C19_nt s499c2f34;
  virtual  ~S499C2_nt(); // _ZN9S499C2_ntD1Ev
  virtual void  v161(); // _ZN9S499C2_nt4v161Ev
  virtual void  v162(); // _ZN9S499C2_nt4v162Ev
  virtual void  v163(); // _ZN9S499C2_nt4v163Ev
  virtual void  v164(); // _ZN9S499C2_nt4v164Ev
  virtual void  v165(); // _ZN9S499C2_nt4v165Ev
  virtual void  v166(); // _ZN9S499C2_nt4v166Ev
  virtual void  v167(); // _ZN9S499C2_nt4v167Ev
  virtual void  v168(); // _ZN9S499C2_nt4v168Ev
  virtual void  v169(); // _ZN9S499C2_nt4v169Ev
  virtual void  v170(); // _ZN9S499C2_nt4v170Ev
  virtual void  v171(); // _ZN9S499C2_nt4v171Ev
  virtual void  v172(); // _ZN9S499C2_nt4v172Ev
  virtual void  v173(); // _ZN9S499C2_nt4v173Ev
  virtual void  v174(); // _ZN9S499C2_nt4v174Ev
  virtual void  v175(); // _ZN9S499C2_nt4v175Ev
  virtual void  v176(); // _ZN9S499C2_nt4v176Ev
  virtual void  v177(); // _ZN9S499C2_nt4v177Ev
  virtual void  v178(); // _ZN9S499C2_nt4v178Ev
  virtual void  v179(); // _ZN9S499C2_nt4v179Ev
  virtual void  v180(); // _ZN9S499C2_nt4v180Ev
  virtual void  v181(); // _ZN9S499C2_nt4v181Ev
  virtual void  v182(); // _ZN9S499C2_nt4v182Ev
  virtual void  v183(); // _ZN9S499C2_nt4v183Ev
  virtual void  v184(); // _ZN9S499C2_nt4v184Ev
  virtual void  v185(); // _ZN9S499C2_nt4v185Ev
  virtual void  v186(); // _ZN9S499C2_nt4v186Ev
  virtual void  v187(); // _ZN9S499C2_nt4v187Ev
  virtual void  v188(); // _ZN9S499C2_nt4v188Ev
  virtual void  v189(); // _ZN9S499C2_nt4v189Ev
  virtual void  v190(); // _ZN9S499C2_nt4v190Ev
  virtual void  v191(); // _ZN9S499C2_nt4v191Ev
  virtual void  v192(); // _ZN9S499C2_nt4v192Ev
  virtual void  v193(); // _ZN9S499C2_nt4v193Ev
  virtual void  v194(); // _ZN9S499C2_nt4v194Ev
  virtual void  v195(); // _ZN9S499C2_nt4v195Ev
  virtual void  v196(); // _ZN9S499C2_nt4v196Ev
  virtual void  v197(); // _ZN9S499C2_nt4v197Ev
  virtual void  v198(); // _ZN9S499C2_nt4v198Ev
  virtual void  v199(); // _ZN9S499C2_nt4v199Ev
  virtual void  v200(); // _ZN9S499C2_nt4v200Ev
  virtual void  v201(); // _ZN9S499C2_nt4v201Ev
  virtual void  v202(); // _ZN9S499C2_nt4v202Ev
  virtual void  v203(); // _ZN9S499C2_nt4v203Ev
  virtual void  v204(); // _ZN9S499C2_nt4v204Ev
  virtual void  v205(); // _ZN9S499C2_nt4v205Ev
  virtual void  v206(); // _ZN9S499C2_nt4v206Ev
  virtual void  v207(); // _ZN9S499C2_nt4v207Ev
  virtual void  v208(); // _ZN9S499C2_nt4v208Ev
  virtual void  v209(); // _ZN9S499C2_nt4v209Ev
  virtual void  v210(); // _ZN9S499C2_nt4v210Ev
  virtual void  v211(); // _ZN9S499C2_nt4v211Ev
  virtual void  v212(); // _ZN9S499C2_nt4v212Ev
  virtual void  v213(); // _ZN9S499C2_nt4v213Ev
  virtual void  v214(); // _ZN9S499C2_nt4v214Ev
  virtual void  v215(); // _ZN9S499C2_nt4v215Ev
  virtual void  v216(); // _ZN9S499C2_nt4v216Ev
  virtual void  v217(); // _ZN9S499C2_nt4v217Ev
  virtual void  v218(); // _ZN9S499C2_nt4v218Ev
  virtual void  v219(); // _ZN9S499C2_nt4v219Ev
  virtual void  v220(); // _ZN9S499C2_nt4v220Ev
  virtual void  v221(); // _ZN9S499C2_nt4v221Ev
  virtual void  v222(); // _ZN9S499C2_nt4v222Ev
  virtual void  v223(); // _ZN9S499C2_nt4v223Ev
  virtual void  v224(); // _ZN9S499C2_nt4v224Ev
  virtual void  v225(); // _ZN9S499C2_nt4v225Ev
  virtual void  v226(); // _ZN9S499C2_nt4v226Ev
  virtual void  v227(); // _ZN9S499C2_nt4v227Ev
  virtual void  v228(); // _ZN9S499C2_nt4v228Ev
  virtual void  v229(); // _ZN9S499C2_nt4v229Ev
  S499C2_nt(); // tgen
};
//SIG(-1 S499C2_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}


 S499C2_nt ::~S499C2_nt(){ note_dtor("S499C2_nt", this);}
void  S499C2_nt ::v161(){vfunc_called(this, "_ZN9S499C2_nt4v161Ev");}
void  S499C2_nt ::v162(){vfunc_called(this, "_ZN9S499C2_nt4v162Ev");}
void  S499C2_nt ::v163(){vfunc_called(this, "_ZN9S499C2_nt4v163Ev");}
void  S499C2_nt ::v164(){vfunc_called(this, "_ZN9S499C2_nt4v164Ev");}
void  S499C2_nt ::v165(){vfunc_called(this, "_ZN9S499C2_nt4v165Ev");}
void  S499C2_nt ::v166(){vfunc_called(this, "_ZN9S499C2_nt4v166Ev");}
void  S499C2_nt ::v167(){vfunc_called(this, "_ZN9S499C2_nt4v167Ev");}
void  S499C2_nt ::v168(){vfunc_called(this, "_ZN9S499C2_nt4v168Ev");}
void  S499C2_nt ::v169(){vfunc_called(this, "_ZN9S499C2_nt4v169Ev");}
void  S499C2_nt ::v170(){vfunc_called(this, "_ZN9S499C2_nt4v170Ev");}
void  S499C2_nt ::v171(){vfunc_called(this, "_ZN9S499C2_nt4v171Ev");}
void  S499C2_nt ::v172(){vfunc_called(this, "_ZN9S499C2_nt4v172Ev");}
void  S499C2_nt ::v173(){vfunc_called(this, "_ZN9S499C2_nt4v173Ev");}
void  S499C2_nt ::v174(){vfunc_called(this, "_ZN9S499C2_nt4v174Ev");}
void  S499C2_nt ::v175(){vfunc_called(this, "_ZN9S499C2_nt4v175Ev");}
void  S499C2_nt ::v176(){vfunc_called(this, "_ZN9S499C2_nt4v176Ev");}
void  S499C2_nt ::v177(){vfunc_called(this, "_ZN9S499C2_nt4v177Ev");}
void  S499C2_nt ::v178(){vfunc_called(this, "_ZN9S499C2_nt4v178Ev");}
void  S499C2_nt ::v179(){vfunc_called(this, "_ZN9S499C2_nt4v179Ev");}
void  S499C2_nt ::v180(){vfunc_called(this, "_ZN9S499C2_nt4v180Ev");}
void  S499C2_nt ::v181(){vfunc_called(this, "_ZN9S499C2_nt4v181Ev");}
void  S499C2_nt ::v182(){vfunc_called(this, "_ZN9S499C2_nt4v182Ev");}
void  S499C2_nt ::v183(){vfunc_called(this, "_ZN9S499C2_nt4v183Ev");}
void  S499C2_nt ::v184(){vfunc_called(this, "_ZN9S499C2_nt4v184Ev");}
void  S499C2_nt ::v185(){vfunc_called(this, "_ZN9S499C2_nt4v185Ev");}
void  S499C2_nt ::v186(){vfunc_called(this, "_ZN9S499C2_nt4v186Ev");}
void  S499C2_nt ::v187(){vfunc_called(this, "_ZN9S499C2_nt4v187Ev");}
void  S499C2_nt ::v188(){vfunc_called(this, "_ZN9S499C2_nt4v188Ev");}
void  S499C2_nt ::v189(){vfunc_called(this, "_ZN9S499C2_nt4v189Ev");}
void  S499C2_nt ::v190(){vfunc_called(this, "_ZN9S499C2_nt4v190Ev");}
void  S499C2_nt ::v191(){vfunc_called(this, "_ZN9S499C2_nt4v191Ev");}
void  S499C2_nt ::v192(){vfunc_called(this, "_ZN9S499C2_nt4v192Ev");}
void  S499C2_nt ::v193(){vfunc_called(this, "_ZN9S499C2_nt4v193Ev");}
void  S499C2_nt ::v194(){vfunc_called(this, "_ZN9S499C2_nt4v194Ev");}
void  S499C2_nt ::v195(){vfunc_called(this, "_ZN9S499C2_nt4v195Ev");}
void  S499C2_nt ::v196(){vfunc_called(this, "_ZN9S499C2_nt4v196Ev");}
void  S499C2_nt ::v197(){vfunc_called(this, "_ZN9S499C2_nt4v197Ev");}
void  S499C2_nt ::v198(){vfunc_called(this, "_ZN9S499C2_nt4v198Ev");}
void  S499C2_nt ::v199(){vfunc_called(this, "_ZN9S499C2_nt4v199Ev");}
void  S499C2_nt ::v200(){vfunc_called(this, "_ZN9S499C2_nt4v200Ev");}
void  S499C2_nt ::v201(){vfunc_called(this, "_ZN9S499C2_nt4v201Ev");}
void  S499C2_nt ::v202(){vfunc_called(this, "_ZN9S499C2_nt4v202Ev");}
void  S499C2_nt ::v203(){vfunc_called(this, "_ZN9S499C2_nt4v203Ev");}
void  S499C2_nt ::v204(){vfunc_called(this, "_ZN9S499C2_nt4v204Ev");}
void  S499C2_nt ::v205(){vfunc_called(this, "_ZN9S499C2_nt4v205Ev");}
void  S499C2_nt ::v206(){vfunc_called(this, "_ZN9S499C2_nt4v206Ev");}
void  S499C2_nt ::v207(){vfunc_called(this, "_ZN9S499C2_nt4v207Ev");}
void  S499C2_nt ::v208(){vfunc_called(this, "_ZN9S499C2_nt4v208Ev");}
void  S499C2_nt ::v209(){vfunc_called(this, "_ZN9S499C2_nt4v209Ev");}
void  S499C2_nt ::v210(){vfunc_called(this, "_ZN9S499C2_nt4v210Ev");}
void  S499C2_nt ::v211(){vfunc_called(this, "_ZN9S499C2_nt4v211Ev");}
void  S499C2_nt ::v212(){vfunc_called(this, "_ZN9S499C2_nt4v212Ev");}
void  S499C2_nt ::v213(){vfunc_called(this, "_ZN9S499C2_nt4v213Ev");}
void  S499C2_nt ::v214(){vfunc_called(this, "_ZN9S499C2_nt4v214Ev");}
void  S499C2_nt ::v215(){vfunc_called(this, "_ZN9S499C2_nt4v215Ev");}
void  S499C2_nt ::v216(){vfunc_called(this, "_ZN9S499C2_nt4v216Ev");}
void  S499C2_nt ::v217(){vfunc_called(this, "_ZN9S499C2_nt4v217Ev");}
void  S499C2_nt ::v218(){vfunc_called(this, "_ZN9S499C2_nt4v218Ev");}
void  S499C2_nt ::v219(){vfunc_called(this, "_ZN9S499C2_nt4v219Ev");}
void  S499C2_nt ::v220(){vfunc_called(this, "_ZN9S499C2_nt4v220Ev");}
void  S499C2_nt ::v221(){vfunc_called(this, "_ZN9S499C2_nt4v221Ev");}
void  S499C2_nt ::v222(){vfunc_called(this, "_ZN9S499C2_nt4v222Ev");}
void  S499C2_nt ::v223(){vfunc_called(this, "_ZN9S499C2_nt4v223Ev");}
void  S499C2_nt ::v224(){vfunc_called(this, "_ZN9S499C2_nt4v224Ev");}
void  S499C2_nt ::v225(){vfunc_called(this, "_ZN9S499C2_nt4v225Ev");}
void  S499C2_nt ::v226(){vfunc_called(this, "_ZN9S499C2_nt4v226Ev");}
void  S499C2_nt ::v227(){vfunc_called(this, "_ZN9S499C2_nt4v227Ev");}
void  S499C2_nt ::v228(){vfunc_called(this, "_ZN9S499C2_nt4v228Ev");}
void  S499C2_nt ::v229(){vfunc_called(this, "_ZN9S499C2_nt4v229Ev");}
S499C2_nt ::S499C2_nt(){ note_ctor("S499C2_nt", this);} // tgen

//skip512 S499C2_nt

#else // __cplusplus

extern void _ZN9S499C2_ntC1Ev();
extern void _ZN9S499C2_ntD1Ev();
Name_Map name_map_S499C2_nt[] = {
  NSPAIR(_ZN9S499C2_ntC1Ev),
  NSPAIR(_ZN9S499C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S499C5_nt;
extern VTBL_ENTRY _ZTI9S499C5_nt[];
extern  VTBL_ENTRY _ZTV9S499C5_nt[];
extern Class_Descriptor cd_S499C4_nt;
extern VTBL_ENTRY _ZTI9S499C4_nt[];
extern  VTBL_ENTRY _ZTV9S499C4_nt[];
extern Class_Descriptor cd_S499C3_nt;
extern VTBL_ENTRY _ZTI9S499C3_nt[];
extern  VTBL_ENTRY _ZTV9S499C3_nt[];
static Base_Class bases_S499C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S499C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S499C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S499C2_nt[];
extern void _ZN9S499C2_ntD1Ev();
extern void _ZN9S499C2_ntD0Ev();
extern void _ZN9S499C5_nt3v19Ev();
extern void _ZN9S499C5_nt3v20Ev();
extern void _ZN9S499C5_nt3v21Ev();
extern void _ZN9S499C5_nt3v22Ev();
extern void _ZN9S499C5_nt3v23Ev();
extern void _ZN9S499C5_nt3v24Ev();
extern void _ZN9S499C5_nt3v25Ev();
extern void _ZN9S499C5_nt3v26Ev();
extern void _ZN9S499C5_nt3v27Ev();
extern void _ZN9S499C5_nt3v28Ev();
extern void _ZN9S499C5_nt3v29Ev();
extern void _ZN9S499C5_nt3v30Ev();
extern void _ZN9S499C5_nt3v31Ev();
extern void _ZN9S499C5_nt3v32Ev();
extern void _ZN9S499C5_nt3v33Ev();
extern void _ZN9S499C5_nt3v34Ev();
extern void _ZN9S499C5_nt3v35Ev();
extern void _ZN9S499C5_nt3v36Ev();
extern void _ZN9S499C5_nt3v37Ev();
extern void _ZN9S499C5_nt3v38Ev();
extern void _ZN9S499C5_nt3v39Ev();
extern void _ZN9S499C5_nt3v40Ev();
extern void _ZN9S499C5_nt3v41Ev();
extern void _ZN9S499C5_nt3v42Ev();
extern void _ZN9S499C5_nt3v43Ev();
extern void _ZN9S499C5_nt3v44Ev();
extern void _ZN9S499C5_nt3v45Ev();
extern void _ZN9S499C5_nt3v46Ev();
extern void _ZN9S499C5_nt3v47Ev();
extern void _ZN9S499C5_nt3v48Ev();
extern void _ZN9S499C5_nt3v49Ev();
extern void _ZN9S499C5_nt3v50Ev();
extern void _ZN9S499C5_nt3v51Ev();
extern void _ZN9S499C5_nt3v52Ev();
extern void _ZN9S499C5_nt3v53Ev();
extern void _ZN9S499C5_nt3v54Ev();
extern void _ZN9S499C5_nt3v55Ev();
extern void _ZN9S499C5_nt3v56Ev();
extern void _ZN9S499C5_nt3v57Ev();
extern void _ZN9S499C5_nt3v58Ev();
extern void _ZN9S499C5_nt3v59Ev();
extern void _ZN9S499C5_nt3v60Ev();
extern void _ZN9S499C5_nt3v61Ev();
extern void _ZN9S499C5_nt3v62Ev();
extern void _ZN9S499C5_nt3v63Ev();
extern void _ZN9S499C5_nt3v64Ev();
extern void _ZN9S499C5_nt3v65Ev();
extern void _ZN9S499C5_nt3v66Ev();
extern void _ZN9S499C5_nt3v67Ev();
extern void _ZN9S499C5_nt3v68Ev();
extern void _ZN9S499C5_nt3v69Ev();
extern void _ZN9S499C5_nt3v70Ev();
extern void _ZN9S499C5_nt3v71Ev();
extern void _ZN9S499C5_nt3v72Ev();
extern void _ZN9S499C5_nt3v73Ev();
extern void _ZN9S499C5_nt3v74Ev();
extern void _ZN9S499C5_nt3v75Ev();
extern void _ZN9S499C5_nt3v76Ev();
extern void _ZN9S499C5_nt3v77Ev();
extern void _ZN9S499C5_nt3v78Ev();
extern void _ZN9S499C5_nt3v79Ev();
extern void _ZN9S499C5_nt3v80Ev();
extern void _ZN9S499C5_nt3v81Ev();
extern void _ZN9S499C5_nt3v82Ev();
extern void _ZN9S499C4_nt3v83Ev();
extern void _ZN9S499C4_nt3v84Ev();
extern void _ZN9S499C3_nt3v85Ev();
extern void _ZN9S499C3_nt3v86Ev();
extern void _ZN9S499C3_nt3v87Ev();
extern void _ZN9S499C3_nt3v88Ev();
extern void _ZN9S499C3_nt3v89Ev();
extern void _ZN9S499C3_nt3v90Ev();
extern void _ZN9S499C3_nt3v91Ev();
extern void _ZN9S499C3_nt3v92Ev();
extern void _ZN9S499C3_nt3v93Ev();
extern void _ZN9S499C3_nt3v94Ev();
extern void _ZN9S499C3_nt3v95Ev();
extern void _ZN9S499C3_nt3v96Ev();
extern void _ZN9S499C3_nt3v97Ev();
extern void _ZN9S499C3_nt3v98Ev();
extern void _ZN9S499C3_nt3v99Ev();
extern void _ZN9S499C3_nt4v100Ev();
extern void _ZN9S499C3_nt4v101Ev();
extern void _ZN9S499C3_nt4v102Ev();
extern void _ZN9S499C3_nt4v103Ev();
extern void _ZN9S499C3_nt4v104Ev();
extern void _ZN9S499C3_nt4v105Ev();
extern void _ZN9S499C3_nt4v106Ev();
extern void _ZN9S499C3_nt4v107Ev();
extern void _ZN9S499C3_nt4v108Ev();
extern void _ZN9S499C3_nt4v109Ev();
extern void _ZN9S499C3_nt4v110Ev();
extern void _ZN9S499C3_nt4v111Ev();
extern void _ZN9S499C3_nt4v112Ev();
extern void _ZN9S499C3_nt4v113Ev();
extern void _ZN9S499C3_nt4v114Ev();
extern void _ZN9S499C3_nt4v115Ev();
extern void _ZN9S499C3_nt4v116Ev();
extern void _ZN9S499C3_nt4v117Ev();
extern void _ZN9S499C3_nt4v118Ev();
extern void _ZN9S499C3_nt4v119Ev();
extern void _ZN9S499C3_nt4v120Ev();
extern void _ZN9S499C3_nt4v121Ev();
extern void _ZN9S499C3_nt4v122Ev();
extern void _ZN9S499C3_nt4v123Ev();
extern void _ZN9S499C3_nt4v124Ev();
extern void _ZN9S499C3_nt4v125Ev();
extern void _ZN9S499C3_nt4v126Ev();
extern void _ZN9S499C3_nt4v127Ev();
extern void _ZN9S499C3_nt4v128Ev();
extern void _ZN9S499C3_nt4v129Ev();
extern void _ZN9S499C3_nt4v130Ev();
extern void _ZN9S499C3_nt4v131Ev();
extern void _ZN9S499C3_nt4v132Ev();
extern void _ZN9S499C3_nt4v133Ev();
extern void _ZN9S499C3_nt4v134Ev();
extern void _ZN9S499C3_nt4v135Ev();
extern void _ZN9S499C3_nt4v136Ev();
extern void _ZN9S499C3_nt4v137Ev();
extern void _ZN9S499C3_nt4v138Ev();
extern void _ZN9S499C3_nt4v139Ev();
extern void _ZN9S499C3_nt4v140Ev();
extern void _ZN9S499C3_nt4v141Ev();
extern void _ZN9S499C3_nt4v142Ev();
extern void _ZN9S499C3_nt4v143Ev();
extern void _ZN9S499C3_nt4v144Ev();
extern void _ZN9S499C3_nt4v145Ev();
extern void _ZN9S499C3_nt4v146Ev();
extern void _ZN9S499C3_nt4v147Ev();
extern void _ZN9S499C3_nt4v148Ev();
extern void _ZN9S499C3_nt4v149Ev();
extern void _ZN9S499C3_nt4v150Ev();
extern void _ZN9S499C3_nt4v151Ev();
extern void _ZN9S499C3_nt4v152Ev();
extern void _ZN9S499C3_nt4v153Ev();
extern void _ZN9S499C3_nt4v154Ev();
extern void _ZN9S499C3_nt4v155Ev();
extern void _ZN9S499C3_nt4v156Ev();
extern void _ZN9S499C3_nt4v157Ev();
extern void _ZN9S499C3_nt4v158Ev();
extern void _ZN9S499C3_nt4v159Ev();
extern void _ZN9S499C3_nt4v160Ev();
extern void _ZN9S499C2_nt4v161Ev();
extern void _ZN9S499C2_nt4v162Ev();
extern void _ZN9S499C2_nt4v163Ev();
extern void _ZN9S499C2_nt4v164Ev();
extern void _ZN9S499C2_nt4v165Ev();
extern void _ZN9S499C2_nt4v166Ev();
extern void _ZN9S499C2_nt4v167Ev();
extern void _ZN9S499C2_nt4v168Ev();
extern void _ZN9S499C2_nt4v169Ev();
extern void _ZN9S499C2_nt4v170Ev();
extern void _ZN9S499C2_nt4v171Ev();
extern void _ZN9S499C2_nt4v172Ev();
extern void _ZN9S499C2_nt4v173Ev();
extern void _ZN9S499C2_nt4v174Ev();
extern void _ZN9S499C2_nt4v175Ev();
extern void _ZN9S499C2_nt4v176Ev();
extern void _ZN9S499C2_nt4v177Ev();
extern void _ZN9S499C2_nt4v178Ev();
extern void _ZN9S499C2_nt4v179Ev();
extern void _ZN9S499C2_nt4v180Ev();
extern void _ZN9S499C2_nt4v181Ev();
extern void _ZN9S499C2_nt4v182Ev();
extern void _ZN9S499C2_nt4v183Ev();
extern void _ZN9S499C2_nt4v184Ev();
extern void _ZN9S499C2_nt4v185Ev();
extern void _ZN9S499C2_nt4v186Ev();
extern void _ZN9S499C2_nt4v187Ev();
extern void _ZN9S499C2_nt4v188Ev();
extern void _ZN9S499C2_nt4v189Ev();
extern void _ZN9S499C2_nt4v190Ev();
extern void _ZN9S499C2_nt4v191Ev();
extern void _ZN9S499C2_nt4v192Ev();
extern void _ZN9S499C2_nt4v193Ev();
extern void _ZN9S499C2_nt4v194Ev();
extern void _ZN9S499C2_nt4v195Ev();
extern void _ZN9S499C2_nt4v196Ev();
extern void _ZN9S499C2_nt4v197Ev();
extern void _ZN9S499C2_nt4v198Ev();
extern void _ZN9S499C2_nt4v199Ev();
extern void _ZN9S499C2_nt4v200Ev();
extern void _ZN9S499C2_nt4v201Ev();
extern void _ZN9S499C2_nt4v202Ev();
extern void _ZN9S499C2_nt4v203Ev();
extern void _ZN9S499C2_nt4v204Ev();
extern void _ZN9S499C2_nt4v205Ev();
extern void _ZN9S499C2_nt4v206Ev();
extern void _ZN9S499C2_nt4v207Ev();
extern void _ZN9S499C2_nt4v208Ev();
extern void _ZN9S499C2_nt4v209Ev();
extern void _ZN9S499C2_nt4v210Ev();
extern void _ZN9S499C2_nt4v211Ev();
extern void _ZN9S499C2_nt4v212Ev();
extern void _ZN9S499C2_nt4v213Ev();
extern void _ZN9S499C2_nt4v214Ev();
extern void _ZN9S499C2_nt4v215Ev();
extern void _ZN9S499C2_nt4v216Ev();
extern void _ZN9S499C2_nt4v217Ev();
extern void _ZN9S499C2_nt4v218Ev();
extern void _ZN9S499C2_nt4v219Ev();
extern void _ZN9S499C2_nt4v220Ev();
extern void _ZN9S499C2_nt4v221Ev();
extern void _ZN9S499C2_nt4v222Ev();
extern void _ZN9S499C2_nt4v223Ev();
extern void _ZN9S499C2_nt4v224Ev();
extern void _ZN9S499C2_nt4v225Ev();
extern void _ZN9S499C2_nt4v226Ev();
extern void _ZN9S499C2_nt4v227Ev();
extern void _ZN9S499C2_nt4v228Ev();
extern void _ZN9S499C2_nt4v229Ev();
static  VTBL_ENTRY vtc_S499C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S499C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S499C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S499C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v225Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v226Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v227Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v228Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v229Ev,
};
extern VTBL_ENTRY _ZTI9S499C2_nt[];
VTBL_ENTRY *P__ZTI9S499C2_nt = _ZTI9S499C2_nt; 
extern  VTBL_ENTRY _ZTV9S499C2_nt[];
Class_Descriptor cd_S499C2_nt = {  "S499C2_nt", // class name
  bases_S499C2_nt, 3,
  &(vtc_S499C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1224,908), // object size
  NSPAIRA(_ZTI9S499C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S499C2_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  S499C46_nt  {
  virtual  ~S499C46_nt(); // _ZN10S499C46_ntD1Ev
  virtual void  v230(); // _ZN10S499C46_nt4v230Ev
  virtual void  v231(); // _ZN10S499C46_nt4v231Ev
  virtual void  v232(); // _ZN10S499C46_nt4v232Ev
  virtual void  v233(); // _ZN10S499C46_nt4v233Ev
  virtual void  v234(); // _ZN10S499C46_nt4v234Ev
  virtual void  v235(); // _ZN10S499C46_nt4v235Ev
  virtual void  v236(); // _ZN10S499C46_nt4v236Ev
  S499C46_nt(); // tgen
};
//SIG(-1 S499C46_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S499C46_nt ::~S499C46_nt(){ note_dtor("S499C46_nt", this);}
void  S499C46_nt ::v230(){vfunc_called(this, "_ZN10S499C46_nt4v230Ev");}
void  S499C46_nt ::v231(){vfunc_called(this, "_ZN10S499C46_nt4v231Ev");}
void  S499C46_nt ::v232(){vfunc_called(this, "_ZN10S499C46_nt4v232Ev");}
void  S499C46_nt ::v233(){vfunc_called(this, "_ZN10S499C46_nt4v233Ev");}
void  S499C46_nt ::v234(){vfunc_called(this, "_ZN10S499C46_nt4v234Ev");}
void  S499C46_nt ::v235(){vfunc_called(this, "_ZN10S499C46_nt4v235Ev");}
void  S499C46_nt ::v236(){vfunc_called(this, "_ZN10S499C46_nt4v236Ev");}
S499C46_nt ::S499C46_nt(){ note_ctor("S499C46_nt", this);} // tgen

//skip512 S499C46_nt

#else // __cplusplus

extern void _ZN10S499C46_ntC1Ev();
extern void _ZN10S499C46_ntD1Ev();
Name_Map name_map_S499C46_nt[] = {
  NSPAIR(_ZN10S499C46_ntC1Ev),
  NSPAIR(_ZN10S499C46_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S499C46_nt[];
extern void _ZN10S499C46_ntD1Ev();
extern void _ZN10S499C46_ntD0Ev();
extern void _ZN10S499C46_nt4v230Ev();
extern void _ZN10S499C46_nt4v231Ev();
extern void _ZN10S499C46_nt4v232Ev();
extern void _ZN10S499C46_nt4v233Ev();
extern void _ZN10S499C46_nt4v234Ev();
extern void _ZN10S499C46_nt4v235Ev();
extern void _ZN10S499C46_nt4v236Ev();
static  VTBL_ENTRY vtc_S499C46_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S499C46_nt[0]),
  (VTBL_ENTRY)&_ZN10S499C46_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S499C46_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v230Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v231Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v232Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v233Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v234Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v235Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v236Ev,
};
extern VTBL_ENTRY _ZTI10S499C46_nt[];
VTBL_ENTRY *P__ZTI10S499C46_nt = _ZTI10S499C46_nt; 
extern  VTBL_ENTRY _ZTV10S499C46_nt[];
Class_Descriptor cd_S499C46_nt = {  "S499C46_nt", // class name
  0,0,//no base classes
  &(vtc_S499C46_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S499C46_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S499C46_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  S499C45_nt  : S499C46_nt {
  virtual  ~S499C45_nt(); // _ZN10S499C45_ntD1Ev
  virtual void  v237(); // _ZN10S499C45_nt4v237Ev
  S499C45_nt(); // tgen
};
//SIG(-1 S499C45_nt) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 v8} vd v1}


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

//skip512 S499C45_nt

#else // __cplusplus

extern void _ZN10S499C45_ntC1Ev();
extern void _ZN10S499C45_ntD1Ev();
Name_Map name_map_S499C45_nt[] = {
  NSPAIR(_ZN10S499C45_ntC1Ev),
  NSPAIR(_ZN10S499C45_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S499C46_nt;
extern VTBL_ENTRY _ZTI10S499C46_nt[];
extern  VTBL_ENTRY _ZTV10S499C46_nt[];
static Base_Class bases_S499C45_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C46_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S499C45_nt[];
extern void _ZN10S499C45_ntD1Ev();
extern void _ZN10S499C45_ntD0Ev();
extern void _ZN10S499C46_nt4v230Ev();
extern void _ZN10S499C46_nt4v231Ev();
extern void _ZN10S499C46_nt4v232Ev();
extern void _ZN10S499C46_nt4v233Ev();
extern void _ZN10S499C46_nt4v234Ev();
extern void _ZN10S499C46_nt4v235Ev();
extern void _ZN10S499C46_nt4v236Ev();
extern void _ZN10S499C45_nt4v237Ev();
static  VTBL_ENTRY vtc_S499C45_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S499C45_nt[0]),
  (VTBL_ENTRY)&_ZN10S499C45_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S499C45_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v230Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v231Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v232Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v233Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v234Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v235Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v236Ev,
  (VTBL_ENTRY)&_ZN10S499C45_nt4v237Ev,
};
extern VTBL_ENTRY _ZTI10S499C45_nt[];
VTBL_ENTRY *P__ZTI10S499C45_nt = _ZTI10S499C45_nt; 
extern  VTBL_ENTRY _ZTV10S499C45_nt[];
Class_Descriptor cd_S499C45_nt = {  "S499C45_nt", // class name
  bases_S499C45_nt, 1,
  &(vtc_S499C45_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S499C45_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S499C45_nt),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C47_nt  {
  int s499c47f0[4];
  unsigned int s499c47f1:1;
  void  mf499c47(); // _ZN10S499C47_nt8mf499c47Ev
};
//SIG(-1 S499C47_nt) C1{ m Fi[4] Fi:1}


void  S499C47_nt ::mf499c47(){}

//skip512 S499C47_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S499C1  : S499C2_nt , S499C45_nt {
  void *s499c1f0[3];
  unsigned int s499c1f1:1;
  ::S499C34_nt s499c1f2;
  ::S499C47_nt s499c1f3;
  char s499c1f4;
  virtual  ~S499C1(); // _ZN6S499C1D1Ev
  virtual void  v1(); // _ZN6S499C12v1Ev
  virtual void  v2(); // _ZN6S499C12v2Ev
  virtual void  v3(); // _ZN6S499C12v3Ev
  virtual void  v4(); // _ZN6S499C12v4Ev
  virtual void  v5(); // _ZN6S499C12v5Ev
  virtual void  v6(); // _ZN6S499C12v6Ev
  virtual void  v7(); // _ZN6S499C12v7Ev
  virtual void  v8(); // _ZN6S499C12v8Ev
  virtual void  v9(); // _ZN6S499C12v9Ev
  virtual void  v10(); // _ZN6S499C13v10Ev
  virtual void  v11(); // _ZN6S499C13v11Ev
  virtual void  v12(); // _ZN6S499C13v12Ev
  virtual void  v13(); // _ZN6S499C13v13Ev
  virtual void  v14(); // _ZN6S499C13v14Ev
  virtual void  v15(); // _ZN6S499C13v15Ev
  virtual void  v16(); // _ZN6S499C13v16Ev
  virtual void  v17(); // _ZN6S499C13v17Ev
  virtual void  v18(); // _ZN6S499C13v18Ev
  S499C1(); // tgen
};
//SIG(1 S499C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v83 v84} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 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 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 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} BC35{ BC36{ vd v230 v231 v232 v233 v234 v235 v236} vd v237} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[3] Fi:1 FC27 FC37{ m Fi[4] Fi:1} Fc}


 S499C1 ::~S499C1(){ note_dtor("S499C1", this);}
void  S499C1 ::v1(){vfunc_called(this, "_ZN6S499C12v1Ev");}
void  S499C1 ::v2(){vfunc_called(this, "_ZN6S499C12v2Ev");}
void  S499C1 ::v3(){vfunc_called(this, "_ZN6S499C12v3Ev");}
void  S499C1 ::v4(){vfunc_called(this, "_ZN6S499C12v4Ev");}
void  S499C1 ::v5(){vfunc_called(this, "_ZN6S499C12v5Ev");}
void  S499C1 ::v6(){vfunc_called(this, "_ZN6S499C12v6Ev");}
void  S499C1 ::v7(){vfunc_called(this, "_ZN6S499C12v7Ev");}
void  S499C1 ::v8(){vfunc_called(this, "_ZN6S499C12v8Ev");}
void  S499C1 ::v9(){vfunc_called(this, "_ZN6S499C12v9Ev");}
void  S499C1 ::v10(){vfunc_called(this, "_ZN6S499C13v10Ev");}
void  S499C1 ::v11(){vfunc_called(this, "_ZN6S499C13v11Ev");}
void  S499C1 ::v12(){vfunc_called(this, "_ZN6S499C13v12Ev");}
void  S499C1 ::v13(){vfunc_called(this, "_ZN6S499C13v13Ev");}
void  S499C1 ::v14(){vfunc_called(this, "_ZN6S499C13v14Ev");}
void  S499C1 ::v15(){vfunc_called(this, "_ZN6S499C13v15Ev");}
void  S499C1 ::v16(){vfunc_called(this, "_ZN6S499C13v16Ev");}
void  S499C1 ::v17(){vfunc_called(this, "_ZN6S499C13v17Ev");}
void  S499C1 ::v18(){vfunc_called(this, "_ZN6S499C13v18Ev");}
S499C1 ::S499C1(){ note_ctor("S499C1", this);} // tgen

static void Test_S499C1()
{
  extern Class_Descriptor cd_S499C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(171,251)];
    init_test(&cd_S499C1, buf);
    S499C1 *dp, &lv = *(dp=new (buf) S499C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,1000), "sizeof(S499C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S499C1)");
    check_base_class_offset(lv, (S499C5_nt*)(S499C4_nt*)(S499C3_nt*)(S499C2_nt*), 0, "S499C1");
    check_base_class_offset(lv, (S499C4_nt*)(S499C3_nt*)(S499C2_nt*), 0, "S499C1");
    check_base_class_offset(lv, (S499C3_nt*)(S499C2_nt*), 0, "S499C1");
    check_base_class_offset(lv, (S499C2_nt*), 0, "S499C1");
    check_base_class_offset(lv, (S499C46_nt*)(S499C45_nt*), ABISELECT(1224,908), "S499C1");
    check_base_class_offset(lv, (S499C45_nt*), ABISELECT(1224,908), "S499C1");
    check_field_offset(lv, s499c1f0, ABISELECT(1232,912), "S499C1.s499c1f0");
    set_bf_and_test(lv, s499c1f1, ABISELECT(1256,924), 0, 1, 1, "S499C1");
    check_field_offset(lv, s499c1f2, ABISELECT(1264,928), "S499C1.s499c1f2");
    check_field_offset(lv, s499c1f3, ABISELECT(1336,976), "S499C1.s499c1f3");
    check_field_offset(lv, s499c1f4, ABISELECT(1356,996), "S499C1.s499c1f4");
    test_class_info(&lv, &cd_S499C1);
    dp->~S499C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS499C1(Test_S499C1, "S499C1", ABISELECT(1360,1000));

#else // __cplusplus

extern void _ZN6S499C1C1Ev();
extern void _ZN6S499C1D1Ev();
Name_Map name_map_S499C1[] = {
  NSPAIR(_ZN6S499C1C1Ev),
  NSPAIR(_ZN6S499C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S499C5_nt;
extern VTBL_ENTRY _ZTI9S499C5_nt[];
extern  VTBL_ENTRY _ZTV9S499C5_nt[];
extern Class_Descriptor cd_S499C4_nt;
extern VTBL_ENTRY _ZTI9S499C4_nt[];
extern  VTBL_ENTRY _ZTV9S499C4_nt[];
extern Class_Descriptor cd_S499C3_nt;
extern VTBL_ENTRY _ZTI9S499C3_nt[];
extern  VTBL_ENTRY _ZTV9S499C3_nt[];
extern Class_Descriptor cd_S499C2_nt;
extern VTBL_ENTRY _ZTI9S499C2_nt[];
extern  VTBL_ENTRY _ZTV9S499C2_nt[];
extern Class_Descriptor cd_S499C46_nt;
extern VTBL_ENTRY _ZTI10S499C46_nt[];
extern  VTBL_ENTRY _ZTV10S499C46_nt[];
extern Class_Descriptor cd_S499C45_nt;
extern VTBL_ENTRY _ZTI10S499C45_nt[];
extern  VTBL_ENTRY _ZTV10S499C45_nt[];
static Base_Class bases_S499C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S499C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S499C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S499C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S499C46_nt,    ABISELECT(1224,908), //bcp->offset
    -1, //bcp->virtual_function_table_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_S499C45_nt,    ABISELECT(1224,908), //bcp->offset
    233, //bcp->virtual_function_table_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 _ZTI6S499C1[];
extern void _ZN6S499C1D1Ev();
extern void _ZN6S499C1D0Ev();
extern void _ZN9S499C5_nt3v19Ev();
extern void _ZN9S499C5_nt3v20Ev();
extern void _ZN9S499C5_nt3v21Ev();
extern void _ZN9S499C5_nt3v22Ev();
extern void _ZN9S499C5_nt3v23Ev();
extern void _ZN9S499C5_nt3v24Ev();
extern void _ZN9S499C5_nt3v25Ev();
extern void _ZN9S499C5_nt3v26Ev();
extern void _ZN9S499C5_nt3v27Ev();
extern void _ZN9S499C5_nt3v28Ev();
extern void _ZN9S499C5_nt3v29Ev();
extern void _ZN9S499C5_nt3v30Ev();
extern void _ZN9S499C5_nt3v31Ev();
extern void _ZN9S499C5_nt3v32Ev();
extern void _ZN9S499C5_nt3v33Ev();
extern void _ZN9S499C5_nt3v34Ev();
extern void _ZN9S499C5_nt3v35Ev();
extern void _ZN9S499C5_nt3v36Ev();
extern void _ZN9S499C5_nt3v37Ev();
extern void _ZN9S499C5_nt3v38Ev();
extern void _ZN9S499C5_nt3v39Ev();
extern void _ZN9S499C5_nt3v40Ev();
extern void _ZN9S499C5_nt3v41Ev();
extern void _ZN9S499C5_nt3v42Ev();
extern void _ZN9S499C5_nt3v43Ev();
extern void _ZN9S499C5_nt3v44Ev();
extern void _ZN9S499C5_nt3v45Ev();
extern void _ZN9S499C5_nt3v46Ev();
extern void _ZN9S499C5_nt3v47Ev();
extern void _ZN9S499C5_nt3v48Ev();
extern void _ZN9S499C5_nt3v49Ev();
extern void _ZN9S499C5_nt3v50Ev();
extern void _ZN9S499C5_nt3v51Ev();
extern void _ZN9S499C5_nt3v52Ev();
extern void _ZN9S499C5_nt3v53Ev();
extern void _ZN9S499C5_nt3v54Ev();
extern void _ZN9S499C5_nt3v55Ev();
extern void _ZN9S499C5_nt3v56Ev();
extern void _ZN9S499C5_nt3v57Ev();
extern void _ZN9S499C5_nt3v58Ev();
extern void _ZN9S499C5_nt3v59Ev();
extern void _ZN9S499C5_nt3v60Ev();
extern void _ZN9S499C5_nt3v61Ev();
extern void _ZN9S499C5_nt3v62Ev();
extern void _ZN9S499C5_nt3v63Ev();
extern void _ZN9S499C5_nt3v64Ev();
extern void _ZN9S499C5_nt3v65Ev();
extern void _ZN9S499C5_nt3v66Ev();
extern void _ZN9S499C5_nt3v67Ev();
extern void _ZN9S499C5_nt3v68Ev();
extern void _ZN9S499C5_nt3v69Ev();
extern void _ZN9S499C5_nt3v70Ev();
extern void _ZN9S499C5_nt3v71Ev();
extern void _ZN9S499C5_nt3v72Ev();
extern void _ZN9S499C5_nt3v73Ev();
extern void _ZN9S499C5_nt3v74Ev();
extern void _ZN9S499C5_nt3v75Ev();
extern void _ZN9S499C5_nt3v76Ev();
extern void _ZN9S499C5_nt3v77Ev();
extern void _ZN9S499C5_nt3v78Ev();
extern void _ZN9S499C5_nt3v79Ev();
extern void _ZN9S499C5_nt3v80Ev();
extern void _ZN9S499C5_nt3v81Ev();
extern void _ZN9S499C5_nt3v82Ev();
extern void _ZN9S499C4_nt3v83Ev();
extern void _ZN9S499C4_nt3v84Ev();
extern void _ZN9S499C3_nt3v85Ev();
extern void _ZN9S499C3_nt3v86Ev();
extern void _ZN9S499C3_nt3v87Ev();
extern void _ZN9S499C3_nt3v88Ev();
extern void _ZN9S499C3_nt3v89Ev();
extern void _ZN9S499C3_nt3v90Ev();
extern void _ZN9S499C3_nt3v91Ev();
extern void _ZN9S499C3_nt3v92Ev();
extern void _ZN9S499C3_nt3v93Ev();
extern void _ZN9S499C3_nt3v94Ev();
extern void _ZN9S499C3_nt3v95Ev();
extern void _ZN9S499C3_nt3v96Ev();
extern void _ZN9S499C3_nt3v97Ev();
extern void _ZN9S499C3_nt3v98Ev();
extern void _ZN9S499C3_nt3v99Ev();
extern void _ZN9S499C3_nt4v100Ev();
extern void _ZN9S499C3_nt4v101Ev();
extern void _ZN9S499C3_nt4v102Ev();
extern void _ZN9S499C3_nt4v103Ev();
extern void _ZN9S499C3_nt4v104Ev();
extern void _ZN9S499C3_nt4v105Ev();
extern void _ZN9S499C3_nt4v106Ev();
extern void _ZN9S499C3_nt4v107Ev();
extern void _ZN9S499C3_nt4v108Ev();
extern void _ZN9S499C3_nt4v109Ev();
extern void _ZN9S499C3_nt4v110Ev();
extern void _ZN9S499C3_nt4v111Ev();
extern void _ZN9S499C3_nt4v112Ev();
extern void _ZN9S499C3_nt4v113Ev();
extern void _ZN9S499C3_nt4v114Ev();
extern void _ZN9S499C3_nt4v115Ev();
extern void _ZN9S499C3_nt4v116Ev();
extern void _ZN9S499C3_nt4v117Ev();
extern void _ZN9S499C3_nt4v118Ev();
extern void _ZN9S499C3_nt4v119Ev();
extern void _ZN9S499C3_nt4v120Ev();
extern void _ZN9S499C3_nt4v121Ev();
extern void _ZN9S499C3_nt4v122Ev();
extern void _ZN9S499C3_nt4v123Ev();
extern void _ZN9S499C3_nt4v124Ev();
extern void _ZN9S499C3_nt4v125Ev();
extern void _ZN9S499C3_nt4v126Ev();
extern void _ZN9S499C3_nt4v127Ev();
extern void _ZN9S499C3_nt4v128Ev();
extern void _ZN9S499C3_nt4v129Ev();
extern void _ZN9S499C3_nt4v130Ev();
extern void _ZN9S499C3_nt4v131Ev();
extern void _ZN9S499C3_nt4v132Ev();
extern void _ZN9S499C3_nt4v133Ev();
extern void _ZN9S499C3_nt4v134Ev();
extern void _ZN9S499C3_nt4v135Ev();
extern void _ZN9S499C3_nt4v136Ev();
extern void _ZN9S499C3_nt4v137Ev();
extern void _ZN9S499C3_nt4v138Ev();
extern void _ZN9S499C3_nt4v139Ev();
extern void _ZN9S499C3_nt4v140Ev();
extern void _ZN9S499C3_nt4v141Ev();
extern void _ZN9S499C3_nt4v142Ev();
extern void _ZN9S499C3_nt4v143Ev();
extern void _ZN9S499C3_nt4v144Ev();
extern void _ZN9S499C3_nt4v145Ev();
extern void _ZN9S499C3_nt4v146Ev();
extern void _ZN9S499C3_nt4v147Ev();
extern void _ZN9S499C3_nt4v148Ev();
extern void _ZN9S499C3_nt4v149Ev();
extern void _ZN9S499C3_nt4v150Ev();
extern void _ZN9S499C3_nt4v151Ev();
extern void _ZN9S499C3_nt4v152Ev();
extern void _ZN9S499C3_nt4v153Ev();
extern void _ZN9S499C3_nt4v154Ev();
extern void _ZN9S499C3_nt4v155Ev();
extern void _ZN9S499C3_nt4v156Ev();
extern void _ZN9S499C3_nt4v157Ev();
extern void _ZN9S499C3_nt4v158Ev();
extern void _ZN9S499C3_nt4v159Ev();
extern void _ZN9S499C3_nt4v160Ev();
extern void _ZN9S499C2_nt4v161Ev();
extern void _ZN9S499C2_nt4v162Ev();
extern void _ZN9S499C2_nt4v163Ev();
extern void _ZN9S499C2_nt4v164Ev();
extern void _ZN9S499C2_nt4v165Ev();
extern void _ZN9S499C2_nt4v166Ev();
extern void _ZN9S499C2_nt4v167Ev();
extern void _ZN9S499C2_nt4v168Ev();
extern void _ZN9S499C2_nt4v169Ev();
extern void _ZN9S499C2_nt4v170Ev();
extern void _ZN9S499C2_nt4v171Ev();
extern void _ZN9S499C2_nt4v172Ev();
extern void _ZN9S499C2_nt4v173Ev();
extern void _ZN9S499C2_nt4v174Ev();
extern void _ZN9S499C2_nt4v175Ev();
extern void _ZN9S499C2_nt4v176Ev();
extern void _ZN9S499C2_nt4v177Ev();
extern void _ZN9S499C2_nt4v178Ev();
extern void _ZN9S499C2_nt4v179Ev();
extern void _ZN9S499C2_nt4v180Ev();
extern void _ZN9S499C2_nt4v181Ev();
extern void _ZN9S499C2_nt4v182Ev();
extern void _ZN9S499C2_nt4v183Ev();
extern void _ZN9S499C2_nt4v184Ev();
extern void _ZN9S499C2_nt4v185Ev();
extern void _ZN9S499C2_nt4v186Ev();
extern void _ZN9S499C2_nt4v187Ev();
extern void _ZN9S499C2_nt4v188Ev();
extern void _ZN9S499C2_nt4v189Ev();
extern void _ZN9S499C2_nt4v190Ev();
extern void _ZN9S499C2_nt4v191Ev();
extern void _ZN9S499C2_nt4v192Ev();
extern void _ZN9S499C2_nt4v193Ev();
extern void _ZN9S499C2_nt4v194Ev();
extern void _ZN9S499C2_nt4v195Ev();
extern void _ZN9S499C2_nt4v196Ev();
extern void _ZN9S499C2_nt4v197Ev();
extern void _ZN9S499C2_nt4v198Ev();
extern void _ZN9S499C2_nt4v199Ev();
extern void _ZN9S499C2_nt4v200Ev();
extern void _ZN9S499C2_nt4v201Ev();
extern void _ZN9S499C2_nt4v202Ev();
extern void _ZN9S499C2_nt4v203Ev();
extern void _ZN9S499C2_nt4v204Ev();
extern void _ZN9S499C2_nt4v205Ev();
extern void _ZN9S499C2_nt4v206Ev();
extern void _ZN9S499C2_nt4v207Ev();
extern void _ZN9S499C2_nt4v208Ev();
extern void _ZN9S499C2_nt4v209Ev();
extern void _ZN9S499C2_nt4v210Ev();
extern void _ZN9S499C2_nt4v211Ev();
extern void _ZN9S499C2_nt4v212Ev();
extern void _ZN9S499C2_nt4v213Ev();
extern void _ZN9S499C2_nt4v214Ev();
extern void _ZN9S499C2_nt4v215Ev();
extern void _ZN9S499C2_nt4v216Ev();
extern void _ZN9S499C2_nt4v217Ev();
extern void _ZN9S499C2_nt4v218Ev();
extern void _ZN9S499C2_nt4v219Ev();
extern void _ZN9S499C2_nt4v220Ev();
extern void _ZN9S499C2_nt4v221Ev();
extern void _ZN9S499C2_nt4v222Ev();
extern void _ZN9S499C2_nt4v223Ev();
extern void _ZN9S499C2_nt4v224Ev();
extern void _ZN9S499C2_nt4v225Ev();
extern void _ZN9S499C2_nt4v226Ev();
extern void _ZN9S499C2_nt4v227Ev();
extern void _ZN9S499C2_nt4v228Ev();
extern void _ZN9S499C2_nt4v229Ev();
extern void _ZN6S499C12v1Ev();
extern void _ZN6S499C12v2Ev();
extern void _ZN6S499C12v3Ev();
extern void _ZN6S499C12v4Ev();
extern void _ZN6S499C12v5Ev();
extern void _ZN6S499C12v6Ev();
extern void _ZN6S499C12v7Ev();
extern void _ZN6S499C12v8Ev();
extern void _ZN6S499C12v9Ev();
extern void _ZN6S499C13v10Ev();
extern void _ZN6S499C13v11Ev();
extern void _ZN6S499C13v12Ev();
extern void _ZN6S499C13v13Ev();
extern void _ZN6S499C13v14Ev();
extern void _ZN6S499C13v15Ev();
extern void _ZN6S499C13v16Ev();
extern void _ZN6S499C13v17Ev();
extern void _ZN6S499C13v18Ev();
extern void ABISELECT(_ZThn1224_N6S499C1D1Ev,_ZThn908_N6S499C1D1Ev)();
extern void ABISELECT(_ZThn1224_N6S499C1D0Ev,_ZThn908_N6S499C1D0Ev)();
extern void _ZN10S499C46_nt4v230Ev();
extern void _ZN10S499C46_nt4v231Ev();
extern void _ZN10S499C46_nt4v232Ev();
extern void _ZN10S499C46_nt4v233Ev();
extern void _ZN10S499C46_nt4v234Ev();
extern void _ZN10S499C46_nt4v235Ev();
extern void _ZN10S499C46_nt4v236Ev();
extern void _ZN10S499C45_nt4v237Ev();
static  VTBL_ENTRY vtc_S499C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S499C1[0]),
  (VTBL_ENTRY)&_ZN6S499C1D1Ev,
  (VTBL_ENTRY)&_ZN6S499C1D0Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S499C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S499C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN9S499C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v224Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v225Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v226Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v227Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v228Ev,
  (VTBL_ENTRY)&_ZN9S499C2_nt4v229Ev,
  (VTBL_ENTRY)&_ZN6S499C12v1Ev,
  (VTBL_ENTRY)&_ZN6S499C12v2Ev,
  (VTBL_ENTRY)&_ZN6S499C12v3Ev,
  (VTBL_ENTRY)&_ZN6S499C12v4Ev,
  (VTBL_ENTRY)&_ZN6S499C12v5Ev,
  (VTBL_ENTRY)&_ZN6S499C12v6Ev,
  (VTBL_ENTRY)&_ZN6S499C12v7Ev,
  (VTBL_ENTRY)&_ZN6S499C12v8Ev,
  (VTBL_ENTRY)&_ZN6S499C12v9Ev,
  (VTBL_ENTRY)&_ZN6S499C13v10Ev,
  (VTBL_ENTRY)&_ZN6S499C13v11Ev,
  (VTBL_ENTRY)&_ZN6S499C13v12Ev,
  (VTBL_ENTRY)&_ZN6S499C13v13Ev,
  (VTBL_ENTRY)&_ZN6S499C13v14Ev,
  (VTBL_ENTRY)&_ZN6S499C13v15Ev,
  (VTBL_ENTRY)&_ZN6S499C13v16Ev,
  (VTBL_ENTRY)&_ZN6S499C13v17Ev,
  (VTBL_ENTRY)&_ZN6S499C13v18Ev,
  ABISELECT(-1224,-908),
  (VTBL_ENTRY)&(_ZTI6S499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1224_N6S499C1D1Ev,_ZThn908_N6S499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1224_N6S499C1D0Ev,_ZThn908_N6S499C1D0Ev),
  (VTBL_ENTRY)&_ZN10S499C46_nt4v230Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v231Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v232Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v233Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v234Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v235Ev,
  (VTBL_ENTRY)&_ZN10S499C46_nt4v236Ev,
  (VTBL_ENTRY)&_ZN10S499C45_nt4v237Ev,
};
extern VTBL_ENTRY _ZTI6S499C1[];
extern  VTBL_ENTRY _ZTV6S499C1[];
Class_Descriptor cd_S499C1 = {  "S499C1", // class name
  bases_S499C1, 6,
  &(vtc_S499C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1360,1000), // object size
  NSPAIRA(_ZTI6S499C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S499C1),245, //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  S7368C5_nt  {
  void *s7368c5f0;
  int s7368c5f1[2];
  ::S499C30_nt s7368c5f2;
  void  mf7368c5(); // _ZN10S7368C5_nt8mf7368c5Ev
};
//SIG(-1 S7368C5_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S7368C5_nt ::mf7368c5(){}

//skip512 S7368C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C4_nt  {
  ::S7368C5_nt s7368c4f0;
  void  mf7368c4(); // _ZN10S7368C4_nt8mf7368c4Ev
  virtual  ~S7368C4_nt(); // _ZN10S7368C4_ntD1Ev
  S7368C4_nt(); // tgen
};
//SIG(-1 S7368C4_nt) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}}}


void  S7368C4_nt ::mf7368c4(){}
 S7368C4_nt ::~S7368C4_nt(){ note_dtor("S7368C4_nt", this);}
S7368C4_nt ::S7368C4_nt(){ note_ctor("S7368C4_nt", this);} // tgen

//skip512 S7368C4_nt

#else // __cplusplus

extern void _ZN10S7368C4_ntC1Ev();
extern void _ZN10S7368C4_ntD1Ev();
Name_Map name_map_S7368C4_nt[] = {
  NSPAIR(_ZN10S7368C4_ntC1Ev),
  NSPAIR(_ZN10S7368C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern void _ZN10S7368C4_ntD1Ev();
extern void _ZN10S7368C4_ntD0Ev();
static  VTBL_ENTRY vtc_S7368C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7368C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7368C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7368C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
VTBL_ENTRY *P__ZTI10S7368C4_nt = _ZTI10S7368C4_nt; 
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
Class_Descriptor cd_S7368C4_nt = {  "S7368C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7368C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S7368C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7368C4_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C8  {
  char s7368c8f0;
  void  mf7368c8(); // _ZN7S7368C88mf7368c8Ev
  virtual  ~S7368C8(); // _ZN7S7368C8D1Ev
  S7368C8(); // tgen
};
//SIG(-1 S7368C8) C1{ vd m Fc}


void  S7368C8 ::mf7368c8(){}
 S7368C8 ::~S7368C8(){ note_dtor("S7368C8", this);}
S7368C8 ::S7368C8(){ note_ctor("S7368C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7368C8C1Ev();
extern void _ZN7S7368C8D1Ev();
Name_Map name_map_S7368C8[] = {
  NSPAIR(_ZN7S7368C8C1Ev),
  NSPAIR(_ZN7S7368C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7368C8[];
extern void _ZN7S7368C8D1Ev();
extern void _ZN7S7368C8D0Ev();
static  VTBL_ENTRY vtc_S7368C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7368C8[0]),
  (VTBL_ENTRY)&_ZN7S7368C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7368C8D0Ev,
};
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
Class_Descriptor cd_S7368C8 = {  "S7368C8", // class name
  0,0,//no base classes
  &(vtc_S7368C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7368C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7368C8),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  S7368C10_nt  {
  void  mf7368c10(); // _ZN11S7368C10_nt9mf7368c10Ev
};
//SIG(-1 S7368C10_nt) C1{ m}


void  S7368C10_nt ::mf7368c10(){}

//skip512 S7368C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C9_nt  {
  void *s7368c9f0;
  int s7368c9f1;
  ::S7368C10_nt s7368c9f2;
  void  mf7368c9(); // _ZN10S7368C9_nt8mf7368c9Ev
};
//SIG(-1 S7368C9_nt) C1{ m Fp Fi FC2{ m}}


void  S7368C9_nt ::mf7368c9(){}

//skip512 S7368C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C11  : S7368C8 {
  __tsi64 s7368c11f0[2];
  virtual  ~S7368C11(); // _ZN8S7368C11D1Ev
  S7368C11(); // tgen
};
//SIG(-1 S7368C11) C1{ BC2{ vd m Fc} vd FL[2]}


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

static void Test_S7368C11()
{
  extern Class_Descriptor cd_S7368C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S7368C11, buf);
    S7368C11 *dp, &lv = *(dp=new (buf) S7368C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S7368C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C11)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C11");
    check_field_offset(lv, s7368c11f0, ABISELECT(16,8), "S7368C11.s7368c11f0");
    test_class_info(&lv, &cd_S7368C11);
    dp->~S7368C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C11(Test_S7368C11, "S7368C11", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S7368C11C1Ev();
extern void _ZN8S7368C11D1Ev();
Name_Map name_map_S7368C11[] = {
  NSPAIR(_ZN8S7368C11C1Ev),
  NSPAIR(_ZN8S7368C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C11[];
extern void _ZN8S7368C11D1Ev();
extern void _ZN8S7368C11D0Ev();
static  VTBL_ENTRY vtc_S7368C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C11[0]),
  (VTBL_ENTRY)&_ZN8S7368C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C11D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C11[];
extern  VTBL_ENTRY _ZTV8S7368C11[];
Class_Descriptor cd_S7368C11 = {  "S7368C11", // class name
  bases_S7368C11, 1,
  &(vtc_S7368C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S7368C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C11),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  S7368C15  {
  void *s7368c15f0;
  int s7368c15f1[2];
  ::S7368C10_nt s7368c15f2;
  void  mf7368c15(); // _ZN8S7368C159mf7368c15Ev
};
//SIG(-1 S7368C15) C1{ m Fp Fi[2] FC2{ m}}


void  S7368C15 ::mf7368c15(){}

static void Test_S7368C15()
{
  {
    init_simple_test("S7368C15");
    S7368C15 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C15)");
    check_field_offset(lv, s7368c15f0, 0, "S7368C15.s7368c15f0");
    check_field_offset(lv, s7368c15f1, ABISELECT(8,4), "S7368C15.s7368c15f1");
    check_field_offset(lv, s7368c15f2, ABISELECT(16,12), "S7368C15.s7368c15f2");
  }
}
static Arrange_To_Call_Me vS7368C15(Test_S7368C15, "S7368C15", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C12  : S7368C8 {
  ::S7368C9_nt s7368c12f0;
  ::S7368C9_nt s7368c12f1;
  ::S7368C9_nt s7368c12f2;
  ::S7368C5_nt s7368c12f3;
  ::S7368C15 s7368c12f4;
  virtual  ~S7368C12(); // _ZN8S7368C12D1Ev
  S7368C12(); // tgen
};
//SIG(-1 S7368C12) C1{ BC2{ vd m Fc} vd FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m Fp Fi[2] FC4}}


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

static void Test_S7368C12()
{
  extern Class_Descriptor cd_S7368C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S7368C12, buf);
    S7368C12 *dp, &lv = *(dp=new (buf) S7368C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S7368C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C12)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C12");
    check_field_offset(lv, s7368c12f0, ABISELECT(16,8), "S7368C12.s7368c12f0");
    check_field_offset(lv, s7368c12f1, ABISELECT(32,20), "S7368C12.s7368c12f1");
    check_field_offset(lv, s7368c12f2, ABISELECT(48,32), "S7368C12.s7368c12f2");
    check_field_offset(lv, s7368c12f3, ABISELECT(64,44), "S7368C12.s7368c12f3");
    check_field_offset(lv, s7368c12f4, ABISELECT(88,60), "S7368C12.s7368c12f4");
    test_class_info(&lv, &cd_S7368C12);
    dp->~S7368C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C12(Test_S7368C12, "S7368C12", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S7368C12C1Ev();
extern void _ZN8S7368C12D1Ev();
Name_Map name_map_S7368C12[] = {
  NSPAIR(_ZN8S7368C12C1Ev),
  NSPAIR(_ZN8S7368C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C12[];
extern void _ZN8S7368C12D1Ev();
extern void _ZN8S7368C12D0Ev();
static  VTBL_ENTRY vtc_S7368C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C12[0]),
  (VTBL_ENTRY)&_ZN8S7368C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C12D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C12[];
extern  VTBL_ENTRY _ZTV8S7368C12[];
Class_Descriptor cd_S7368C12 = {  "S7368C12", // class name
  bases_S7368C12, 1,
  &(vtc_S7368C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S7368C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C12),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C7  : S7368C8 {
  int s7368c7f0;
  ::S7368C9_nt s7368c7f1;
  ::S7368C11 s7368c7f2;
  ::S7368C9_nt s7368c7f3;
  ::S7368C12 s7368c7f4;
  virtual  ~S7368C7(); // _ZN7S7368C7D1Ev
  S7368C7(); // tgen
};
//SIG(-1 S7368C7) C1{ BC2{ vd m Fc} vd Fi FC3{ m Fp Fi FC4{ m}} FC5{ BC2 vd FL[2]} FC3 FC6{ BC2 vd FC3 FC3 FC3 FC7{ m Fp Fi[2] FC8{ m}} FC9{ m Fp Fi[2] FC4}}}


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

static void Test_S7368C7()
{
  extern Class_Descriptor cd_S7368C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S7368C7, buf);
    S7368C7 *dp, &lv = *(dp=new (buf) S7368C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S7368C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C7)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C7");
    check_field_offset(lv, s7368c7f0, ABISELECT(12,8), "S7368C7.s7368c7f0");
    check_field_offset(lv, s7368c7f1, ABISELECT(16,12), "S7368C7.s7368c7f1");
    check_field_offset(lv, s7368c7f2, ABISELECT(32,24), "S7368C7.s7368c7f2");
    check_field_offset(lv, s7368c7f3, ABISELECT(64,48), "S7368C7.s7368c7f3");
    check_field_offset(lv, s7368c7f4, ABISELECT(80,60), "S7368C7.s7368c7f4");
    test_class_info(&lv, &cd_S7368C7);
    dp->~S7368C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C7(Test_S7368C7, "S7368C7", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN7S7368C7C1Ev();
extern void _ZN7S7368C7D1Ev();
Name_Map name_map_S7368C7[] = {
  NSPAIR(_ZN7S7368C7C1Ev),
  NSPAIR(_ZN7S7368C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7368C7[];
extern void _ZN7S7368C7D1Ev();
extern void _ZN7S7368C7D0Ev();
static  VTBL_ENTRY vtc_S7368C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7368C7[0]),
  (VTBL_ENTRY)&_ZN7S7368C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7368C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S7368C7[];
extern  VTBL_ENTRY _ZTV7S7368C7[];
Class_Descriptor cd_S7368C7 = {  "S7368C7", // class name
  bases_S7368C7, 1,
  &(vtc_S7368C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI7S7368C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7368C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C3  : S7368C4_nt {
  void *s7368c3f0[10];
  ::S7368C7 s7368c3f1;
  ::S7368C7 s7368c3f2;
  virtual  ~S7368C3(); // _ZN7S7368C3D1Ev
  S7368C3(); // tgen
};
//SIG(-1 S7368C3) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd Fp[10] FC5{ BC6{ vd m Fc} vd Fi FC7{ m Fp Fi FC8{ m}} FC9{ BC6 vd FL[2]} FC7 FC10{ BC6 vd FC7 FC7 FC7 FC3 FC11{ m Fp Fi[2] FC8}}} FC5}


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

static void Test_S7368C3()
{
  extern Class_Descriptor cd_S7368C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,84)];
    init_test(&cd_S7368C3, buf);
    S7368C3 *dp, &lv = *(dp=new (buf) S7368C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,332), "sizeof(S7368C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C3)");
    check_base_class_offset(lv, (S7368C4_nt*), 0, "S7368C3");
    check_field_offset(lv, s7368c3f0, ABISELECT(32,20), "S7368C3.s7368c3f0");
    check_field_offset(lv, s7368c3f1, ABISELECT(112,60), "S7368C3.s7368c3f1");
    check_field_offset(lv, s7368c3f2, ABISELECT(304,196), "S7368C3.s7368c3f2");
    test_class_info(&lv, &cd_S7368C3);
    dp->~S7368C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C3(Test_S7368C3, "S7368C3", ABISELECT(496,332));

#else // __cplusplus

extern void _ZN7S7368C3C1Ev();
extern void _ZN7S7368C3D1Ev();
Name_Map name_map_S7368C3[] = {
  NSPAIR(_ZN7S7368C3C1Ev),
  NSPAIR(_ZN7S7368C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
static Base_Class bases_S7368C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7368C3[];
extern void _ZN7S7368C3D1Ev();
extern void _ZN7S7368C3D0Ev();
static  VTBL_ENTRY vtc_S7368C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7368C3[0]),
  (VTBL_ENTRY)&_ZN7S7368C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7368C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
Class_Descriptor cd_S7368C3 = {  "S7368C3", // class name
  bases_S7368C3, 1,
  &(vtc_S7368C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,332), // object size
  NSPAIRA(_ZTI7S7368C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7368C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C18_nt  {
  void *s7368c18f0;
  void  mf7368c18(); // _ZN11S7368C18_nt9mf7368c18Ev
  virtual  ~S7368C18_nt(); // _ZN11S7368C18_ntD1Ev
  S7368C18_nt(); // tgen
};
//SIG(-1 S7368C18_nt) C1{ vd m Fp}


void  S7368C18_nt ::mf7368c18(){}
 S7368C18_nt ::~S7368C18_nt(){ note_dtor("S7368C18_nt", this);}
S7368C18_nt ::S7368C18_nt(){ note_ctor("S7368C18_nt", this);} // tgen

//skip512 S7368C18_nt

#else // __cplusplus

extern void _ZN11S7368C18_ntC1Ev();
extern void _ZN11S7368C18_ntD1Ev();
Name_Map name_map_S7368C18_nt[] = {
  NSPAIR(_ZN11S7368C18_ntC1Ev),
  NSPAIR(_ZN11S7368C18_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern void _ZN11S7368C18_ntD1Ev();
extern void _ZN11S7368C18_ntD0Ev();
static  VTBL_ENTRY vtc_S7368C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7368C18_nt[0]),
  (VTBL_ENTRY)&_ZN11S7368C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S7368C18_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
VTBL_ENTRY *P__ZTI11S7368C18_nt = _ZTI11S7368C18_nt; 
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
Class_Descriptor cd_S7368C18_nt = {  "S7368C18_nt", // class name
  0,0,//no base classes
  &(vtc_S7368C18_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S7368C18_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S7368C18_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  S7368C17  : S7368C18_nt {
  ::S7368C15 s7368c17f0;
  void *s7368c17f1;
  int s7368c17f2;
  virtual  ~S7368C17(); // _ZN8S7368C17D1Ev
  S7368C17(); // tgen
};
//SIG(-1 S7368C17) C1{ BC2{ vd m Fp} vd FC3{ m Fp Fi[2] FC4{ m}} Fp Fi}


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

static void Test_S7368C17()
{
  extern Class_Descriptor cd_S7368C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7368C17, buf);
    S7368C17 *dp, &lv = *(dp=new (buf) S7368C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7368C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C17)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S7368C17");
    check_field_offset(lv, s7368c17f0, ABISELECT(16,8), "S7368C17.s7368c17f0");
    check_field_offset(lv, s7368c17f1, ABISELECT(40,24), "S7368C17.s7368c17f1");
    check_field_offset(lv, s7368c17f2, ABISELECT(48,28), "S7368C17.s7368c17f2");
    test_class_info(&lv, &cd_S7368C17);
    dp->~S7368C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C17(Test_S7368C17, "S7368C17", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S7368C17C1Ev();
extern void _ZN8S7368C17D1Ev();
Name_Map name_map_S7368C17[] = {
  NSPAIR(_ZN8S7368C17C1Ev),
  NSPAIR(_ZN8S7368C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S7368C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C17[];
extern void _ZN8S7368C17D1Ev();
extern void _ZN8S7368C17D0Ev();
static  VTBL_ENTRY vtc_S7368C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C17[0]),
  (VTBL_ENTRY)&_ZN8S7368C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C17D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C17[];
extern  VTBL_ENTRY _ZTV8S7368C17[];
Class_Descriptor cd_S7368C17 = {  "S7368C17", // class name
  bases_S7368C17, 1,
  &(vtc_S7368C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S7368C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C17),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C22  {
  void  mf7368c22(); // _ZN8S7368C229mf7368c22Ev
};
//SIG(-1 S7368C22) C1{ m}


void  S7368C22 ::mf7368c22(){}

static void Test_S7368C22()
{
  {
    init_simple_test("S7368C22");
    S7368C22 lv;
    check2(sizeof(lv), 1, "sizeof(S7368C22)");
    check2(__alignof__(lv), 1, "__alignof__(S7368C22)");
  }
}
static Arrange_To_Call_Me vS7368C22(Test_S7368C22, "S7368C22", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C21  {
  void *s7368c21f0;
  int s7368c21f1[2];
  ::S7368C22 s7368c21f2;
  void  mf7368c21(); // _ZN8S7368C219mf7368c21Ev
};
//SIG(-1 S7368C21) C1{ m Fp Fi[2] FC2{ m}}


void  S7368C21 ::mf7368c21(){}

static void Test_S7368C21()
{
  {
    init_simple_test("S7368C21");
    S7368C21 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C21)");
    check_field_offset(lv, s7368c21f0, 0, "S7368C21.s7368c21f0");
    check_field_offset(lv, s7368c21f1, ABISELECT(8,4), "S7368C21.s7368c21f1");
    check_field_offset(lv, s7368c21f2, ABISELECT(16,12), "S7368C21.s7368c21f2");
  }
}
static Arrange_To_Call_Me vS7368C21(Test_S7368C21, "S7368C21", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C25  : S7368C8 {
  ::S7368C11 s7368c25f0;
  ::S7368C11 s7368c25f1;
  virtual  ~S7368C25(); // _ZN8S7368C25D1Ev
  S7368C25(); // tgen
};
//SIG(-1 S7368C25) C1{ BC2{ vd m Fc} vd FC3{ BC2 vd FL[2]} FC3}


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

static void Test_S7368C25()
{
  extern Class_Descriptor cd_S7368C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S7368C25, buf);
    S7368C25 *dp, &lv = *(dp=new (buf) S7368C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S7368C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C25)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C25");
    check_field_offset(lv, s7368c25f0, ABISELECT(16,8), "S7368C25.s7368c25f0");
    check_field_offset(lv, s7368c25f1, ABISELECT(48,32), "S7368C25.s7368c25f1");
    test_class_info(&lv, &cd_S7368C25);
    dp->~S7368C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C25(Test_S7368C25, "S7368C25", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S7368C25C1Ev();
extern void _ZN8S7368C25D1Ev();
Name_Map name_map_S7368C25[] = {
  NSPAIR(_ZN8S7368C25C1Ev),
  NSPAIR(_ZN8S7368C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C25[];
extern void _ZN8S7368C25D1Ev();
extern void _ZN8S7368C25D0Ev();
static  VTBL_ENTRY vtc_S7368C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C25[0]),
  (VTBL_ENTRY)&_ZN8S7368C25D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C25D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C25[];
extern  VTBL_ENTRY _ZTV8S7368C25[];
Class_Descriptor cd_S7368C25 = {  "S7368C25", // class name
  bases_S7368C25, 1,
  &(vtc_S7368C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S7368C25),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C25),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C28_nt  {
  int s7368c28f0;
  void *s7368c28f1[7];
  short s7368c28f2;
  char s7368c28f3[10];
};
//SIG(-1 S7368C28_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S7368C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C29_nt  {
  ::S7368C9_nt s7368c29f0;
  ::S7368C9_nt s7368c29f1;
  void  mf7368c29(); // _ZN11S7368C29_nt9mf7368c29Ev
};
//SIG(-1 S7368C29_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC2}


void  S7368C29_nt ::mf7368c29(){}

//skip512 S7368C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C27_nt  {
  ::S7368C28_nt s7368c27f0;
  void *s7368c27f1;
  char s7368c27f2[2];
  ::S7368C29_nt s7368c27f3;
  void  mf7368c27(); // _ZN11S7368C27_nt9mf7368c27Ev
  virtual  ~S7368C27_nt(); // _ZN11S7368C27_ntD1Ev
  S7368C27_nt(); // tgen
};
//SIG(-1 S7368C27_nt) C1{ vd m FC2{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC3{ m FC4{ m Fp Fi FC5{ m}} FC4}}


void  S7368C27_nt ::mf7368c27(){}
 S7368C27_nt ::~S7368C27_nt(){ note_dtor("S7368C27_nt", this);}
S7368C27_nt ::S7368C27_nt(){ note_ctor("S7368C27_nt", this);} // tgen

//skip512 S7368C27_nt

#else // __cplusplus

extern void _ZN11S7368C27_ntC1Ev();
extern void _ZN11S7368C27_ntD1Ev();
Name_Map name_map_S7368C27_nt[] = {
  NSPAIR(_ZN11S7368C27_ntC1Ev),
  NSPAIR(_ZN11S7368C27_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7368C27_nt[];
extern void _ZN11S7368C27_ntD1Ev();
extern void _ZN11S7368C27_ntD0Ev();
static  VTBL_ENTRY vtc_S7368C27_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7368C27_nt[0]),
  (VTBL_ENTRY)&_ZN11S7368C27_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S7368C27_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S7368C27_nt[];
VTBL_ENTRY *P__ZTI11S7368C27_nt = _ZTI11S7368C27_nt; 
extern  VTBL_ENTRY _ZTV11S7368C27_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C33  : S7368C8 {
  __tsi64 s7368c33f0;
  virtual  ~S7368C33(); // _ZN8S7368C33D1Ev
  S7368C33(); // tgen
};
//SIG(-1 S7368C33) C1{ BC2{ vd m Fc} vd FL}


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

static void Test_S7368C33()
{
  extern Class_Descriptor cd_S7368C33;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7368C33, buf);
    S7368C33 *dp, &lv = *(dp=new (buf) S7368C33());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C33)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C33");
    check_field_offset(lv, s7368c33f0, ABISELECT(16,8), "S7368C33.s7368c33f0");
    test_class_info(&lv, &cd_S7368C33);
    dp->~S7368C33();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C33(Test_S7368C33, "S7368C33", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7368C33C1Ev();
extern void _ZN8S7368C33D1Ev();
Name_Map name_map_S7368C33[] = {
  NSPAIR(_ZN8S7368C33C1Ev),
  NSPAIR(_ZN8S7368C33D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C33[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C33[];
extern void _ZN8S7368C33D1Ev();
extern void _ZN8S7368C33D0Ev();
static  VTBL_ENTRY vtc_S7368C33[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C33[0]),
  (VTBL_ENTRY)&_ZN8S7368C33D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C33D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C33[];
extern  VTBL_ENTRY _ZTV8S7368C33[];
Class_Descriptor cd_S7368C33 = {  "S7368C33", // class name
  bases_S7368C33, 1,
  &(vtc_S7368C33[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7368C33),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C33),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  S7368C32  {
  ::S7368C33 s7368c32f0;
  ::S7368C7 s7368c32f1;
  void  mf7368c32(); // _ZN8S7368C329mf7368c32Ev
  virtual  ~S7368C32(); // _ZN8S7368C32D1Ev
  S7368C32(); // tgen
};
//SIG(-1 S7368C32) C1{ vd m FC2{ BC3{ vd m Fc} vd FL} FC4{ BC3 vd Fi FC5{ m Fp Fi FC6{ m}} FC7{ BC3 vd FL[2]} FC5 FC8{ BC3 vd FC5 FC5 FC5 FC9{ m Fp Fi[2] FC10{ m}} FC11{ m Fp Fi[2] FC6}}}}


void  S7368C32 ::mf7368c32(){}
 S7368C32 ::~S7368C32(){ note_dtor("S7368C32", this);}
S7368C32 ::S7368C32(){ note_ctor("S7368C32", this);} // tgen

static void Test_S7368C32()
{
  extern Class_Descriptor cd_S7368C32;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,40)];
    init_test(&cd_S7368C32, buf);
    S7368C32 *dp, &lv = *(dp=new (buf) S7368C32());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S7368C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C32)");
    check_field_offset(lv, s7368c32f0, ABISELECT(8,4), "S7368C32.s7368c32f0");
    check_field_offset(lv, s7368c32f1, ABISELECT(32,20), "S7368C32.s7368c32f1");
    test_class_info(&lv, &cd_S7368C32);
    dp->~S7368C32();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C32(Test_S7368C32, "S7368C32", ABISELECT(224,156));

#else // __cplusplus

extern void _ZN8S7368C32C1Ev();
extern void _ZN8S7368C32D1Ev();
Name_Map name_map_S7368C32[] = {
  NSPAIR(_ZN8S7368C32C1Ev),
  NSPAIR(_ZN8S7368C32D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C32[];
extern void _ZN8S7368C32D1Ev();
extern void _ZN8S7368C32D0Ev();
static  VTBL_ENTRY vtc_S7368C32[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C32[0]),
  (VTBL_ENTRY)&_ZN8S7368C32D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C32D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C32[];
extern  VTBL_ENTRY _ZTV8S7368C32[];
Class_Descriptor cd_S7368C32 = {  "S7368C32", // class name
  0,0,//no base classes
  &(vtc_S7368C32[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,156), // object size
  NSPAIRA(_ZTI8S7368C32),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C32),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  S7368C35  {
  ::S7368C9_nt s7368c35f0;
  ::S7368C11 s7368c35f1;
  void  mf7368c35(); // _ZN8S7368C359mf7368c35Ev
  virtual  ~S7368C35(); // _ZN8S7368C35D1Ev
  S7368C35(); // tgen
};
//SIG(-1 S7368C35) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ vd m Fc} vd FL[2]}}


void  S7368C35 ::mf7368c35(){}
 S7368C35 ::~S7368C35(){ note_dtor("S7368C35", this);}
S7368C35 ::S7368C35(){ note_ctor("S7368C35", this);} // tgen

static void Test_S7368C35()
{
  extern Class_Descriptor cd_S7368C35;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7368C35, buf);
    S7368C35 *dp, &lv = *(dp=new (buf) S7368C35());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7368C35)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C35)");
    check_field_offset(lv, s7368c35f0, ABISELECT(8,4), "S7368C35.s7368c35f0");
    check_field_offset(lv, s7368c35f1, ABISELECT(24,16), "S7368C35.s7368c35f1");
    test_class_info(&lv, &cd_S7368C35);
    dp->~S7368C35();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C35(Test_S7368C35, "S7368C35", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN8S7368C35C1Ev();
extern void _ZN8S7368C35D1Ev();
Name_Map name_map_S7368C35[] = {
  NSPAIR(_ZN8S7368C35C1Ev),
  NSPAIR(_ZN8S7368C35D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C35[];
extern void _ZN8S7368C35D1Ev();
extern void _ZN8S7368C35D0Ev();
static  VTBL_ENTRY vtc_S7368C35[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C35[0]),
  (VTBL_ENTRY)&_ZN8S7368C35D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C35D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C35[];
extern  VTBL_ENTRY _ZTV8S7368C35[];
Class_Descriptor cd_S7368C35 = {  "S7368C35", // class name
  0,0,//no base classes
  &(vtc_S7368C35[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI8S7368C35),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C35),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  S7368C34  : S7368C8 {
  ::S7368C33 s7368c34f0;
  int s7368c34f1;
  ::S7368C35 s7368c34f2;
  ::S7368C35 s7368c34f3;
  int s7368c34f4;
  ::S7368C9_nt s7368c34f5;
  ::S7368C9_nt s7368c34f6;
  int s7368c34f7;
  ::S7368C35 s7368c34f8;
  ::S7368C35 s7368c34f9;
  virtual  ~S7368C34(); // _ZN8S7368C34D1Ev
  S7368C34(); // tgen
};
//SIG(-1 S7368C34) C1{ BC2{ vd m Fc} vd FC3{ BC2 vd FL} Fi FC4{ vd m FC5{ m Fp Fi FC6{ m}} FC7{ BC2 vd FL[2]}} FC4 Fi FC5 FC5 Fi FC4 FC4}


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

static void Test_S7368C34()
{
  extern Class_Descriptor cd_S7368C34;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,56)];
    init_test(&cd_S7368C34, buf);
    S7368C34 *dp, &lv = *(dp=new (buf) S7368C34());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,220), "sizeof(S7368C34)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C34)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C34");
    check_field_offset(lv, s7368c34f0, ABISELECT(16,8), "S7368C34.s7368c34f0");
    check_field_offset(lv, s7368c34f1, ABISELECT(40,24), "S7368C34.s7368c34f1");
    check_field_offset(lv, s7368c34f2, ABISELECT(48,28), "S7368C34.s7368c34f2");
    check_field_offset(lv, s7368c34f3, ABISELECT(104,68), "S7368C34.s7368c34f3");
    check_field_offset(lv, s7368c34f4, ABISELECT(160,108), "S7368C34.s7368c34f4");
    check_field_offset(lv, s7368c34f5, ABISELECT(168,112), "S7368C34.s7368c34f5");
    check_field_offset(lv, s7368c34f6, ABISELECT(184,124), "S7368C34.s7368c34f6");
    check_field_offset(lv, s7368c34f7, ABISELECT(200,136), "S7368C34.s7368c34f7");
    check_field_offset(lv, s7368c34f8, ABISELECT(208,140), "S7368C34.s7368c34f8");
    check_field_offset(lv, s7368c34f9, ABISELECT(264,180), "S7368C34.s7368c34f9");
    test_class_info(&lv, &cd_S7368C34);
    dp->~S7368C34();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C34(Test_S7368C34, "S7368C34", ABISELECT(320,220));

#else // __cplusplus

extern void _ZN8S7368C34C1Ev();
extern void _ZN8S7368C34D1Ev();
Name_Map name_map_S7368C34[] = {
  NSPAIR(_ZN8S7368C34C1Ev),
  NSPAIR(_ZN8S7368C34D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C34[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C34[];
extern void _ZN8S7368C34D1Ev();
extern void _ZN8S7368C34D0Ev();
static  VTBL_ENTRY vtc_S7368C34[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C34[0]),
  (VTBL_ENTRY)&_ZN8S7368C34D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C34D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C34[];
extern  VTBL_ENTRY _ZTV8S7368C34[];
Class_Descriptor cd_S7368C34 = {  "S7368C34", // class name
  bases_S7368C34, 1,
  &(vtc_S7368C34[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,220), // object size
  NSPAIRA(_ZTI8S7368C34),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C34),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C37  : S7368C8 {
  ::S7368C9_nt s7368c37f0;
  ::S7368C11 s7368c37f1;
  virtual  ~S7368C37(); // _ZN8S7368C37D1Ev
  S7368C37(); // tgen
};
//SIG(-1 S7368C37) C1{ BC2{ vd m Fc} vd FC3{ m Fp Fi FC4{ m}} FC5{ BC2 vd FL[2]}}


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

static void Test_S7368C37()
{
  extern Class_Descriptor cd_S7368C37;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S7368C37, buf);
    S7368C37 *dp, &lv = *(dp=new (buf) S7368C37());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S7368C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C37)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C37");
    check_field_offset(lv, s7368c37f0, ABISELECT(16,8), "S7368C37.s7368c37f0");
    check_field_offset(lv, s7368c37f1, ABISELECT(32,20), "S7368C37.s7368c37f1");
    test_class_info(&lv, &cd_S7368C37);
    dp->~S7368C37();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C37(Test_S7368C37, "S7368C37", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN8S7368C37C1Ev();
extern void _ZN8S7368C37D1Ev();
Name_Map name_map_S7368C37[] = {
  NSPAIR(_ZN8S7368C37C1Ev),
  NSPAIR(_ZN8S7368C37D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C37[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C37[];
extern void _ZN8S7368C37D1Ev();
extern void _ZN8S7368C37D0Ev();
static  VTBL_ENTRY vtc_S7368C37[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C37[0]),
  (VTBL_ENTRY)&_ZN8S7368C37D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C37D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C37[];
extern  VTBL_ENTRY _ZTV8S7368C37[];
Class_Descriptor cd_S7368C37 = {  "S7368C37", // class name
  bases_S7368C37, 1,
  &(vtc_S7368C37[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI8S7368C37),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C37),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C38  : S7368C8 {
  ::S7368C9_nt s7368c38f0;
  ::S7368C9_nt s7368c38f1;
  int s7368c38f2;
  virtual  ~S7368C38(); // _ZN8S7368C38D1Ev
  S7368C38(); // tgen
};
//SIG(-1 S7368C38) C1{ BC2{ vd m Fc} vd FC3{ m Fp Fi FC4{ m}} FC3 Fi}


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

static void Test_S7368C38()
{
  extern Class_Descriptor cd_S7368C38;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7368C38, buf);
    S7368C38 *dp, &lv = *(dp=new (buf) S7368C38());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7368C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C38)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C38");
    check_field_offset(lv, s7368c38f0, ABISELECT(16,8), "S7368C38.s7368c38f0");
    check_field_offset(lv, s7368c38f1, ABISELECT(32,20), "S7368C38.s7368c38f1");
    check_field_offset(lv, s7368c38f2, ABISELECT(48,32), "S7368C38.s7368c38f2");
    test_class_info(&lv, &cd_S7368C38);
    dp->~S7368C38();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C38(Test_S7368C38, "S7368C38", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S7368C38C1Ev();
extern void _ZN8S7368C38D1Ev();
Name_Map name_map_S7368C38[] = {
  NSPAIR(_ZN8S7368C38C1Ev),
  NSPAIR(_ZN8S7368C38D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C38[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C38[];
extern void _ZN8S7368C38D1Ev();
extern void _ZN8S7368C38D0Ev();
static  VTBL_ENTRY vtc_S7368C38[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C38[0]),
  (VTBL_ENTRY)&_ZN8S7368C38D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C38D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C38[];
extern  VTBL_ENTRY _ZTV8S7368C38[];
Class_Descriptor cd_S7368C38 = {  "S7368C38", // class name
  bases_S7368C38, 1,
  &(vtc_S7368C38[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S7368C38),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C38),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C36  : S7368C8 {
  int s7368c36f0[2];
  ::S7368C11 s7368c36f1;
  ::S7368C9_nt s7368c36f2;
  ::S7368C37 s7368c36f3;
  ::S7368C38 s7368c36f4;
  virtual  ~S7368C36(); // _ZN8S7368C36D1Ev
  S7368C36(); // tgen
};
//SIG(-1 S7368C36) C1{ BC2{ vd m Fc} vd Fi[2] FC3{ BC2 vd FL[2]} FC4{ m Fp Fi FC5{ m}} FC6{ BC2 vd FC4 FC3} FC7{ BC2 vd FC4 FC4 Fi}}


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

static void Test_S7368C36()
{
  extern Class_Descriptor cd_S7368C36;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S7368C36, buf);
    S7368C36 *dp, &lv = *(dp=new (buf) S7368C36());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S7368C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C36)");
    check_base_class_offset(lv, (S7368C8*), 0, "S7368C36");
    check_field_offset(lv, s7368c36f0, ABISELECT(12,8), "S7368C36.s7368c36f0");
    check_field_offset(lv, s7368c36f1, ABISELECT(24,16), "S7368C36.s7368c36f1");
    check_field_offset(lv, s7368c36f2, ABISELECT(56,40), "S7368C36.s7368c36f2");
    check_field_offset(lv, s7368c36f3, ABISELECT(72,52), "S7368C36.s7368c36f3");
    check_field_offset(lv, s7368c36f4, ABISELECT(136,96), "S7368C36.s7368c36f4");
    test_class_info(&lv, &cd_S7368C36);
    dp->~S7368C36();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C36(Test_S7368C36, "S7368C36", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN8S7368C36C1Ev();
extern void _ZN8S7368C36D1Ev();
Name_Map name_map_S7368C36[] = {
  NSPAIR(_ZN8S7368C36C1Ev),
  NSPAIR(_ZN8S7368C36D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S7368C36[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C36[];
extern void _ZN8S7368C36D1Ev();
extern void _ZN8S7368C36D0Ev();
static  VTBL_ENTRY vtc_S7368C36[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C36[0]),
  (VTBL_ENTRY)&_ZN8S7368C36D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C36D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C36[];
extern  VTBL_ENTRY _ZTV8S7368C36[];
Class_Descriptor cd_S7368C36 = {  "S7368C36", // class name
  bases_S7368C36, 1,
  &(vtc_S7368C36[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI8S7368C36),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C36),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C26  {
  int s7368c26f0;
  ::S7368C27_nt s7368c26f1;
  ::S7368C32 s7368c26f2;
  ::S7368C34 s7368c26f3;
  ::S7368C36 s7368c26f4;
  void  mf7368c26(); // _ZN8S7368C269mf7368c26Ev
  virtual  ~S7368C26(); // _ZN8S7368C26D1Ev
  S7368C26(); // tgen
};
//SIG(-1 S7368C26) C1{ vd m Fi FC2{ vd m FC3{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC4{ m FC5{ m Fp Fi FC6{ m}} FC5}} FC7{ vd m FC8{ BC9{ vd m Fc} vd FL} FC10{ BC9 vd Fi FC5 FC11{ BC9 vd FL[2]} FC5 FC12{ BC9 vd FC5 FC5 FC5 FC13{ m Fp Fi[2] FC14{ m}} FC15{ m Fp Fi[2] FC6}}}} FC16{ BC9 vd FC8 Fi FC17{ vd m FC5 FC11} FC17 Fi FC5 FC5 Fi FC17 FC17} FC18{ BC9 vd Fi[2] FC11 FC5 FC19{ BC9 vd FC5 FC11} FC20{ BC9 vd FC5 FC5 Fi}}}


void  S7368C26 ::mf7368c26(){}
 S7368C26 ::~S7368C26(){ note_dtor("S7368C26", this);}
S7368C26 ::S7368C26(){ note_ctor("S7368C26", this);} // tgen

static void Test_S7368C26()
{
  extern Class_Descriptor cd_S7368C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(112,150)];
    init_test(&cd_S7368C26, buf);
    S7368C26 *dp, &lv = *(dp=new (buf) S7368C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(888,596), "sizeof(S7368C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C26)");
    check_field_offset(lv, s7368c26f0, ABISELECT(8,4), "S7368C26.s7368c26f0");
    check_field_offset(lv, s7368c26f1, ABISELECT(16,8), "S7368C26.s7368c26f1");
    check_field_offset(lv, s7368c26f2, ABISELECT(152,88), "S7368C26.s7368c26f2");
    check_field_offset(lv, s7368c26f3, ABISELECT(376,244), "S7368C26.s7368c26f3");
    check_field_offset(lv, s7368c26f4, ABISELECT(696,464), "S7368C26.s7368c26f4");
    test_class_info(&lv, &cd_S7368C26);
    dp->~S7368C26();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C26(Test_S7368C26, "S7368C26", ABISELECT(888,596));

#else // __cplusplus

extern void _ZN8S7368C26C1Ev();
extern void _ZN8S7368C26D1Ev();
Name_Map name_map_S7368C26[] = {
  NSPAIR(_ZN8S7368C26C1Ev),
  NSPAIR(_ZN8S7368C26D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C26[];
extern void _ZN8S7368C26D1Ev();
extern void _ZN8S7368C26D0Ev();
static  VTBL_ENTRY vtc_S7368C26[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C26[0]),
  (VTBL_ENTRY)&_ZN8S7368C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C26D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C26[];
extern  VTBL_ENTRY _ZTV8S7368C26[];
Class_Descriptor cd_S7368C26 = {  "S7368C26", // class name
  0,0,//no base classes
  &(vtc_S7368C26[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(888,596), // object size
  NSPAIRA(_ZTI8S7368C26),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C26),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  S7368C2  : virtual S7368C3 {
  ::S7368C17 s7368c2f0;
  ::S7368C21 s7368c2f1;
  int s7368c2f2;
  ::S7368C21 s7368c2f3;
  ::S7368C21 s7368c2f4;
  ::S7368C25 s7368c2f5;
  ::S7368C26 s7368c2f6;
  ::S7368C27_nt s7368c2f7;
  ::S7368C9_nt s7368c2f8;
  ::S7368C11 s7368c2f9;
  virtual  ~S7368C2(); // _ZN7S7368C2D2Ev
  S7368C2(); // tgen
};
//SIG(-1 S7368C2) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd FC13{ BC14{ vd m Fp} vd FC12 Fp Fi} FC15{ m Fp Fi[2] FC16{ m}} Fi FC15 FC15 FC17{ BC7 vd FC10 FC10} FC18{ vd m Fi FC19{ vd m FC20{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC21{ m FC8 FC8}} FC22{ vd m FC23{ BC7 vd FL} FC6} FC24{ BC7 vd FC23 Fi FC25{ vd m FC8 FC10} FC25 Fi FC8 FC8 Fi FC25 FC25} FC26{ BC7 vd Fi[2] FC10 FC8 FC27{ BC7 vd FC8 FC10} FC28{ BC7 vd FC8 FC8 Fi}}} FC19 FC8 FC10}


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

static void Test_S7368C2()
{
  extern Class_Descriptor cd_S7368C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(225,298)];
    init_test(&cd_S7368C2, buf);
    S7368C2 *dp, &lv = *(dp=new (buf) S7368C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1792,1188), "sizeof(S7368C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C2)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(1296,856), "S7368C2");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(1296,856), "S7368C2");
    check_field_offset(lv, s7368c2f0, ABISELECT(8,4), "S7368C2.s7368c2f0");
    check_field_offset(lv, s7368c2f1, ABISELECT(64,36), "S7368C2.s7368c2f1");
    check_field_offset(lv, s7368c2f2, ABISELECT(88,52), "S7368C2.s7368c2f2");
    check_field_offset(lv, s7368c2f3, ABISELECT(96,56), "S7368C2.s7368c2f3");
    check_field_offset(lv, s7368c2f4, ABISELECT(120,72), "S7368C2.s7368c2f4");
    check_field_offset(lv, s7368c2f5, ABISELECT(144,88), "S7368C2.s7368c2f5");
    check_field_offset(lv, s7368c2f6, ABISELECT(224,144), "S7368C2.s7368c2f6");
    check_field_offset(lv, s7368c2f7, ABISELECT(1112,740), "S7368C2.s7368c2f7");
    check_field_offset(lv, s7368c2f8, ABISELECT(1248,820), "S7368C2.s7368c2f8");
    check_field_offset(lv, s7368c2f9, ABISELECT(1264,832), "S7368C2.s7368c2f9");
    test_class_info(&lv, &cd_S7368C2);
    dp->~S7368C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C2(Test_S7368C2, "S7368C2", ABISELECT(1792,1188));

#else // __cplusplus

extern void _ZN7S7368C2C1Ev();
extern void _ZN7S7368C2D2Ev();
Name_Map name_map_S7368C2[] = {
  NSPAIR(_ZN7S7368C2C1Ev),
  NSPAIR(_ZN7S7368C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(1296,856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(1296,856), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7368C2[];
extern void _ZN7S7368C2D1Ev();
extern void _ZN7S7368C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7368C2D1Ev,_ZTv0_n12_N7S7368C2D1Ev)();
extern void ABISELECT(_ZThn1296_N7S7368C2D1Ev,_ZThn856_N7S7368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7368C2D0Ev,_ZTv0_n12_N7S7368C2D0Ev)();
extern void ABISELECT(_ZThn1296_N7S7368C2D0Ev,_ZThn856_N7S7368C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C2[] = {
  ABISELECT(1296,856),
  0,
  (VTBL_ENTRY)&(_ZTI7S7368C2[0]),
  (VTBL_ENTRY)&_ZN7S7368C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7368C2D0Ev,
  ABISELECT(-1296,-856),
  ABISELECT(-1296,-856),
  (VTBL_ENTRY)&(_ZTI7S7368C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7368C2D1Ev,_ZTv0_n12_N7S7368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7368C2D0Ev,_ZTv0_n12_N7S7368C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7368C2[];
static  VTT_ENTRY vtt_S7368C2[] = {
  {&(_ZTV7S7368C2[3]),  3,10},
  {&(_ZTV7S7368C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S7368C2[];
extern  VTBL_ENTRY _ZTV7S7368C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7368C2[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7368C2D0Ev,_ZTv0_n12_N7S7368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N7S7368C2D0Ev,_ZThn856_N7S7368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7368C2D1Ev,_ZTv0_n12_N7S7368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N7S7368C2D1Ev,_ZThn856_N7S7368C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C2 = {  "S7368C2", // class name
  bases_S7368C2, 2,
  &(vtc_S7368C2[0]), // expected_vtbl_contents
  &(vtt_S7368C2[0]), // expected_vtt_contents
  ABISELECT(1792,1188), // object size
  NSPAIRA(_ZTI7S7368C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7368C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7368C2),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C40  {
  ::S7368C9_nt s7368c40f0;
  ::S7368C11 s7368c40f1;
  int s7368c40f2[2];
  void  mf7368c40(); // _ZN8S7368C409mf7368c40Ev
  virtual  ~S7368C40(); // _ZN8S7368C40D1Ev
  S7368C40(); // tgen
};
//SIG(-1 S7368C40) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ vd m Fc} vd FL[2]} Fi[2]}


void  S7368C40 ::mf7368c40(){}
 S7368C40 ::~S7368C40(){ note_dtor("S7368C40", this);}
S7368C40 ::S7368C40(){ note_ctor("S7368C40", this);} // tgen

static void Test_S7368C40()
{
  extern Class_Descriptor cd_S7368C40;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7368C40, buf);
    S7368C40 *dp, &lv = *(dp=new (buf) S7368C40());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7368C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C40)");
    check_field_offset(lv, s7368c40f0, ABISELECT(8,4), "S7368C40.s7368c40f0");
    check_field_offset(lv, s7368c40f1, ABISELECT(24,16), "S7368C40.s7368c40f1");
    check_field_offset(lv, s7368c40f2, ABISELECT(56,40), "S7368C40.s7368c40f2");
    test_class_info(&lv, &cd_S7368C40);
    dp->~S7368C40();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C40(Test_S7368C40, "S7368C40", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S7368C40C1Ev();
extern void _ZN8S7368C40D1Ev();
Name_Map name_map_S7368C40[] = {
  NSPAIR(_ZN8S7368C40C1Ev),
  NSPAIR(_ZN8S7368C40D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C40[];
extern void _ZN8S7368C40D1Ev();
extern void _ZN8S7368C40D0Ev();
static  VTBL_ENTRY vtc_S7368C40[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C40[0]),
  (VTBL_ENTRY)&_ZN8S7368C40D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C40D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C40[];
extern  VTBL_ENTRY _ZTV8S7368C40[];
Class_Descriptor cd_S7368C40 = {  "S7368C40", // class name
  0,0,//no base classes
  &(vtc_S7368C40[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S7368C40),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C40),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  S7368C42  {
  void *s7368c42f0;
  int s7368c42f1[2];
  ::S7368C22 s7368c42f2;
  void  mf7368c42(); // _ZN8S7368C429mf7368c42Ev
};
//SIG(-1 S7368C42) C1{ m Fp Fi[2] FC2{ m}}


void  S7368C42 ::mf7368c42(){}

static void Test_S7368C42()
{
  {
    init_simple_test("S7368C42");
    S7368C42 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C42)");
    check_field_offset(lv, s7368c42f0, 0, "S7368C42.s7368c42f0");
    check_field_offset(lv, s7368c42f1, ABISELECT(8,4), "S7368C42.s7368c42f1");
    check_field_offset(lv, s7368c42f2, ABISELECT(16,12), "S7368C42.s7368c42f2");
  }
}
static Arrange_To_Call_Me vS7368C42(Test_S7368C42, "S7368C42", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C41  {
  ::S7368C42 s7368c41f0;
  ::S7368C25 s7368c41f1;
  ::S7368C15 s7368c41f2;
  void  mf7368c41(); // _ZN8S7368C419mf7368c41Ev
  virtual  ~S7368C41(); // _ZN8S7368C41D1Ev
  S7368C41(); // tgen
};
//SIG(-1 S7368C41) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}} FC4{ BC5{ vd m Fc} vd FC6{ BC5 vd FL[2]} FC6} FC7{ m Fp Fi[2] FC8{ m}}}


void  S7368C41 ::mf7368c41(){}
 S7368C41 ::~S7368C41(){ note_dtor("S7368C41", this);}
S7368C41 ::S7368C41(){ note_ctor("S7368C41", this);} // tgen

static void Test_S7368C41()
{
  extern Class_Descriptor cd_S7368C41;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S7368C41, buf);
    S7368C41 *dp, &lv = *(dp=new (buf) S7368C41());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S7368C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C41)");
    check_field_offset(lv, s7368c41f0, ABISELECT(8,4), "S7368C41.s7368c41f0");
    check_field_offset(lv, s7368c41f1, ABISELECT(32,20), "S7368C41.s7368c41f1");
    check_field_offset(lv, s7368c41f2, ABISELECT(112,76), "S7368C41.s7368c41f2");
    test_class_info(&lv, &cd_S7368C41);
    dp->~S7368C41();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C41(Test_S7368C41, "S7368C41", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN8S7368C41C1Ev();
extern void _ZN8S7368C41D1Ev();
Name_Map name_map_S7368C41[] = {
  NSPAIR(_ZN8S7368C41C1Ev),
  NSPAIR(_ZN8S7368C41D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C41[];
extern void _ZN8S7368C41D1Ev();
extern void _ZN8S7368C41D0Ev();
static  VTBL_ENTRY vtc_S7368C41[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C41[0]),
  (VTBL_ENTRY)&_ZN8S7368C41D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C41D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C41[];
extern  VTBL_ENTRY _ZTV8S7368C41[];
Class_Descriptor cd_S7368C41 = {  "S7368C41", // class name
  0,0,//no base classes
  &(vtc_S7368C41[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI8S7368C41),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C41),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  S7368C44  {
  ::S7368C42 s7368c44f0;
  ::S7368C25 s7368c44f1;
  void  mf7368c44(); // _ZN8S7368C449mf7368c44Ev
  virtual  ~S7368C44(); // _ZN8S7368C44D1Ev
  S7368C44(); // tgen
};
//SIG(-1 S7368C44) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}} FC4{ BC5{ vd m Fc} vd FC6{ BC5 vd FL[2]} FC6}}


void  S7368C44 ::mf7368c44(){}
 S7368C44 ::~S7368C44(){ note_dtor("S7368C44", this);}
S7368C44 ::S7368C44(){ note_ctor("S7368C44", this);} // tgen

static void Test_S7368C44()
{
  extern Class_Descriptor cd_S7368C44;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S7368C44, buf);
    S7368C44 *dp, &lv = *(dp=new (buf) S7368C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S7368C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C44)");
    check_field_offset(lv, s7368c44f0, ABISELECT(8,4), "S7368C44.s7368c44f0");
    check_field_offset(lv, s7368c44f1, ABISELECT(32,20), "S7368C44.s7368c44f1");
    test_class_info(&lv, &cd_S7368C44);
    dp->~S7368C44();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C44(Test_S7368C44, "S7368C44", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S7368C44C1Ev();
extern void _ZN8S7368C44D1Ev();
Name_Map name_map_S7368C44[] = {
  NSPAIR(_ZN8S7368C44C1Ev),
  NSPAIR(_ZN8S7368C44D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C44[];
extern void _ZN8S7368C44D1Ev();
extern void _ZN8S7368C44D0Ev();
static  VTBL_ENTRY vtc_S7368C44[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C44[0]),
  (VTBL_ENTRY)&_ZN8S7368C44D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C44D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C44[];
extern  VTBL_ENTRY _ZTV8S7368C44[];
Class_Descriptor cd_S7368C44 = {  "S7368C44", // class name
  0,0,//no base classes
  &(vtc_S7368C44[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S7368C44),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C44),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  S7368C47  {
  ::S7368C9_nt s7368c47f0;
  void  mf7368c47(); // _ZN8S7368C479mf7368c47Ev
  virtual  ~S7368C47(); // _ZN8S7368C47D1Ev
  S7368C47(); // tgen
};
//SIG(-1 S7368C47) C1{ vd m FC2{ m Fp Fi FC3{ m}}}


void  S7368C47 ::mf7368c47(){}
 S7368C47 ::~S7368C47(){ note_dtor("S7368C47", this);}
S7368C47 ::S7368C47(){ note_ctor("S7368C47", this);} // tgen

static void Test_S7368C47()
{
  extern Class_Descriptor cd_S7368C47;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7368C47, buf);
    S7368C47 *dp, &lv = *(dp=new (buf) S7368C47());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C47)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C47)");
    check_field_offset(lv, s7368c47f0, ABISELECT(8,4), "S7368C47.s7368c47f0");
    test_class_info(&lv, &cd_S7368C47);
    dp->~S7368C47();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C47(Test_S7368C47, "S7368C47", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7368C47C1Ev();
extern void _ZN8S7368C47D1Ev();
Name_Map name_map_S7368C47[] = {
  NSPAIR(_ZN8S7368C47C1Ev),
  NSPAIR(_ZN8S7368C47D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C47[];
extern void _ZN8S7368C47D1Ev();
extern void _ZN8S7368C47D0Ev();
static  VTBL_ENTRY vtc_S7368C47[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C47[0]),
  (VTBL_ENTRY)&_ZN8S7368C47D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C47D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C47[];
extern  VTBL_ENTRY _ZTV8S7368C47[];
Class_Descriptor cd_S7368C47 = {  "S7368C47", // class name
  0,0,//no base classes
  &(vtc_S7368C47[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7368C47),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C47),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  S7368C48  {
  ::S7368C9_nt s7368c48f0;
  ::S7368C9_nt s7368c48f1;
  ::S7368C9_nt s7368c48f2;
  ::S7368C11 s7368c48f3;
  ::S7368C25 s7368c48f4;
  ::S7368C9_nt s7368c48f5;
  ::S7368C5_nt s7368c48f6;
  ::S7368C9_nt s7368c48f7;
  ::S7368C15 s7368c48f8;
  void  mf7368c48(); // _ZN8S7368C489mf7368c48Ev
  virtual  ~S7368C48(); // _ZN8S7368C48D1Ev
  S7368C48(); // tgen
};
//SIG(-1 S7368C48) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC4{ BC5{ vd m Fc} vd FL[2]} FC6{ BC5 vd FC4 FC4} FC2 FC7{ m Fp Fi[2] FC8{ m}} FC2 FC9{ m Fp Fi[2] FC3}}


void  S7368C48 ::mf7368c48(){}
 S7368C48 ::~S7368C48(){ note_dtor("S7368C48", this);}
S7368C48 ::S7368C48(){ note_ctor("S7368C48", this);} // tgen

static void Test_S7368C48()
{
  extern Class_Descriptor cd_S7368C48;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,45)];
    init_test(&cd_S7368C48, buf);
    S7368C48 *dp, &lv = *(dp=new (buf) S7368C48());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,176), "sizeof(S7368C48)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C48)");
    check_field_offset(lv, s7368c48f0, ABISELECT(8,4), "S7368C48.s7368c48f0");
    check_field_offset(lv, s7368c48f1, ABISELECT(24,16), "S7368C48.s7368c48f1");
    check_field_offset(lv, s7368c48f2, ABISELECT(40,28), "S7368C48.s7368c48f2");
    check_field_offset(lv, s7368c48f3, ABISELECT(56,40), "S7368C48.s7368c48f3");
    check_field_offset(lv, s7368c48f4, ABISELECT(88,64), "S7368C48.s7368c48f4");
    check_field_offset(lv, s7368c48f5, ABISELECT(168,120), "S7368C48.s7368c48f5");
    check_field_offset(lv, s7368c48f6, ABISELECT(184,132), "S7368C48.s7368c48f6");
    check_field_offset(lv, s7368c48f7, ABISELECT(208,148), "S7368C48.s7368c48f7");
    check_field_offset(lv, s7368c48f8, ABISELECT(224,160), "S7368C48.s7368c48f8");
    test_class_info(&lv, &cd_S7368C48);
    dp->~S7368C48();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C48(Test_S7368C48, "S7368C48", ABISELECT(248,176));

#else // __cplusplus

extern void _ZN8S7368C48C1Ev();
extern void _ZN8S7368C48D1Ev();
Name_Map name_map_S7368C48[] = {
  NSPAIR(_ZN8S7368C48C1Ev),
  NSPAIR(_ZN8S7368C48D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C48[];
extern void _ZN8S7368C48D1Ev();
extern void _ZN8S7368C48D0Ev();
static  VTBL_ENTRY vtc_S7368C48[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C48[0]),
  (VTBL_ENTRY)&_ZN8S7368C48D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C48D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C48[];
extern  VTBL_ENTRY _ZTV8S7368C48[];
Class_Descriptor cd_S7368C48 = {  "S7368C48", // class name
  0,0,//no base classes
  &(vtc_S7368C48[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,176), // object size
  NSPAIRA(_ZTI8S7368C48),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C48),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  S7368C51  {
  void  mf7368c51(); // _ZN8S7368C519mf7368c51Ev
};
//SIG(-1 S7368C51) C1{ m}


void  S7368C51 ::mf7368c51(){}

static void Test_S7368C51()
{
  {
    init_simple_test("S7368C51");
    S7368C51 lv;
    check2(sizeof(lv), 1, "sizeof(S7368C51)");
    check2(__alignof__(lv), 1, "__alignof__(S7368C51)");
  }
}
static Arrange_To_Call_Me vS7368C51(Test_S7368C51, "S7368C51", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7368C51[];
VTBL_ENTRY *P__ZTI8S7368C51 = _ZTI8S7368C51; 
Class_Descriptor cd_S7368C51 = {  "S7368C51", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S7368C51),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  S7368C50  {
  void *s7368c50f0;
  int s7368c50f1[2];
  ::S7368C51 s7368c50f2;
  void  mf7368c50(); // _ZN8S7368C509mf7368c50Ev
};
//SIG(-1 S7368C50) C1{ m Fp Fi[2] FC2{ m}}


void  S7368C50 ::mf7368c50(){}

static void Test_S7368C50()
{
  {
    init_simple_test("S7368C50");
    S7368C50 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C50)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C50)");
    check_field_offset(lv, s7368c50f0, 0, "S7368C50.s7368c50f0");
    check_field_offset(lv, s7368c50f1, ABISELECT(8,4), "S7368C50.s7368c50f1");
    check_field_offset(lv, s7368c50f2, ABISELECT(16,12), "S7368C50.s7368c50f2");
  }
}
static Arrange_To_Call_Me vS7368C50(Test_S7368C50, "S7368C50", ABISELECT(24,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7368C50[];
VTBL_ENTRY *P__ZTI8S7368C50 = _ZTI8S7368C50; 
Class_Descriptor cd_S7368C50 = {  "S7368C50", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7368C50),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  S7368C49  {
  ::S7368C50 s7368c49f0;
  void  mf7368c49(); // _ZN8S7368C499mf7368c49Ev
  virtual  ~S7368C49(); // _ZN8S7368C49D1Ev
  S7368C49(); // tgen
};
//SIG(-1 S7368C49) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}}}


void  S7368C49 ::mf7368c49(){}
 S7368C49 ::~S7368C49(){ note_dtor("S7368C49", this);}
S7368C49 ::S7368C49(){ note_ctor("S7368C49", this);} // tgen

static void Test_S7368C49()
{
  extern Class_Descriptor cd_S7368C49;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7368C49, buf);
    S7368C49 *dp, &lv = *(dp=new (buf) S7368C49());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7368C49)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C49)");
    check_field_offset(lv, s7368c49f0, ABISELECT(8,4), "S7368C49.s7368c49f0");
    test_class_info(&lv, &cd_S7368C49);
    dp->~S7368C49();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C49(Test_S7368C49, "S7368C49", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7368C49C1Ev();
extern void _ZN8S7368C49D1Ev();
Name_Map name_map_S7368C49[] = {
  NSPAIR(_ZN8S7368C49C1Ev),
  NSPAIR(_ZN8S7368C49D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C49[];
extern void _ZN8S7368C49D1Ev();
extern void _ZN8S7368C49D0Ev();
static  VTBL_ENTRY vtc_S7368C49[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C49[0]),
  (VTBL_ENTRY)&_ZN8S7368C49D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C49D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
Class_Descriptor cd_S7368C49 = {  "S7368C49", // class name
  0,0,//no base classes
  &(vtc_S7368C49[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7368C49),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C49),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  S7368C39  : virtual S7368C3 {
  ::S7368C40 s7368c39f0;
  ::S7368C40 s7368c39f1;
  ::S7368C41 s7368c39f2;
  ::S7368C44 s7368c39f3;
  ::S7368C44 s7368c39f4;
  ::S7368C47 s7368c39f5;
  ::S7368C48 s7368c39f6;
  ::S7368C49 s7368c39f7;
  int s7368c39f8;
  ::S7368C34 s7368c39f9;
  ::S7368C32 s7368c39f10;
  virtual  ~S7368C39(); // _ZN8S7368C39D2Ev
  S7368C39(); // tgen
};
//SIG(-1 S7368C39) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd FC13{ vd m FC8 FC10 Fi[2]} FC13 FC14{ vd m FC15{ m Fp Fi[2] FC16{ m}} FC17{ BC7 vd FC10 FC10} FC12} FC18{ vd m FC15 FC17} FC18 FC19{ vd m FC8} FC20{ vd m FC8 FC8 FC8 FC10 FC17 FC8 FC4 FC8 FC12} FC21{ vd m FC22{ m Fp Fi[2] FC23{ m}}} Fi FC24{ BC7 vd FC25{ BC7 vd FL} Fi FC26{ vd m FC8 FC10} FC26 Fi FC8 FC8 Fi FC26 FC26} FC27{ vd m FC25 FC6}}


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

static void Test_S7368C39()
{
  extern Class_Descriptor cd_S7368C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(232,318)];
    init_test(&cd_S7368C39, buf);
    S7368C39 *dp, &lv = *(dp=new (buf) S7368C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1848,1268), "sizeof(S7368C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C39)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(1352,936), "S7368C39");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(1352,936), "S7368C39");
    check_field_offset(lv, s7368c39f0, ABISELECT(8,4), "S7368C39.s7368c39f0");
    check_field_offset(lv, s7368c39f1, ABISELECT(72,52), "S7368C39.s7368c39f1");
    check_field_offset(lv, s7368c39f2, ABISELECT(136,100), "S7368C39.s7368c39f2");
    check_field_offset(lv, s7368c39f3, ABISELECT(272,192), "S7368C39.s7368c39f3");
    check_field_offset(lv, s7368c39f4, ABISELECT(384,268), "S7368C39.s7368c39f4");
    check_field_offset(lv, s7368c39f5, ABISELECT(496,344), "S7368C39.s7368c39f5");
    check_field_offset(lv, s7368c39f6, ABISELECT(520,360), "S7368C39.s7368c39f6");
    check_field_offset(lv, s7368c39f7, ABISELECT(768,536), "S7368C39.s7368c39f7");
    check_field_offset(lv, s7368c39f8, ABISELECT(800,556), "S7368C39.s7368c39f8");
    check_field_offset(lv, s7368c39f9, ABISELECT(808,560), "S7368C39.s7368c39f9");
    check_field_offset(lv, s7368c39f10, ABISELECT(1128,780), "S7368C39.s7368c39f10");
    test_class_info(&lv, &cd_S7368C39);
    dp->~S7368C39();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C39(Test_S7368C39, "S7368C39", ABISELECT(1848,1268));

#else // __cplusplus

extern void _ZN8S7368C39C1Ev();
extern void _ZN8S7368C39D2Ev();
Name_Map name_map_S7368C39[] = {
  NSPAIR(_ZN8S7368C39C1Ev),
  NSPAIR(_ZN8S7368C39D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C39[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(1352,936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(1352,936), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C39[];
extern void _ZN8S7368C39D1Ev();
extern void _ZN8S7368C39D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C39D1Ev,_ZTv0_n12_N8S7368C39D1Ev)();
extern void ABISELECT(_ZThn1352_N8S7368C39D1Ev,_ZThn936_N8S7368C39D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C39D0Ev,_ZTv0_n12_N8S7368C39D0Ev)();
extern void ABISELECT(_ZThn1352_N8S7368C39D0Ev,_ZThn936_N8S7368C39D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C39[] = {
  ABISELECT(1352,936),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C39[0]),
  (VTBL_ENTRY)&_ZN8S7368C39D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C39D0Ev,
  ABISELECT(-1352,-936),
  ABISELECT(-1352,-936),
  (VTBL_ENTRY)&(_ZTI8S7368C39[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C39D1Ev,_ZTv0_n12_N8S7368C39D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C39D0Ev,_ZTv0_n12_N8S7368C39D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C39[];
static  VTT_ENTRY vtt_S7368C39[] = {
  {&(_ZTV8S7368C39[3]),  3,10},
  {&(_ZTV8S7368C39[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C39[];
extern  VTBL_ENTRY _ZTV8S7368C39[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C39[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C39D0Ev,_ZTv0_n12_N8S7368C39D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S7368C39D0Ev,_ZThn936_N8S7368C39D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C39D1Ev,_ZTv0_n12_N8S7368C39D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S7368C39D1Ev,_ZThn936_N8S7368C39D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C39 = {  "S7368C39", // class name
  bases_S7368C39, 2,
  &(vtc_S7368C39[0]), // expected_vtbl_contents
  &(vtt_S7368C39[0]), // expected_vtt_contents
  ABISELECT(1848,1268), // object size
  NSPAIRA(_ZTI8S7368C39),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C39),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C39),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C53  {
  ::S7368C9_nt s7368c53f0;
  ::S7368C9_nt s7368c53f1;
  ::S7368C11 s7368c53f2;
  ::S7368C11 s7368c53f3;
  int s7368c53f4;
  char s7368c53f5;
  ::S7368C9_nt s7368c53f6;
  void  mf7368c53(); // _ZN8S7368C539mf7368c53Ev
  virtual  ~S7368C53(); // _ZN8S7368C53D1Ev
  S7368C53(); // tgen
};
//SIG(-1 S7368C53) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ BC5{ vd m Fc} vd FL[2]} FC4 Fi Fc FC2}


void  S7368C53 ::mf7368c53(){}
 S7368C53 ::~S7368C53(){ note_dtor("S7368C53", this);}
S7368C53 ::S7368C53(){ note_ctor("S7368C53", this);} // tgen

static void Test_S7368C53()
{
  extern Class_Descriptor cd_S7368C53;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,25)];
    init_test(&cd_S7368C53, buf);
    S7368C53 *dp, &lv = *(dp=new (buf) S7368C53());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S7368C53)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C53)");
    check_field_offset(lv, s7368c53f0, ABISELECT(8,4), "S7368C53.s7368c53f0");
    check_field_offset(lv, s7368c53f1, ABISELECT(24,16), "S7368C53.s7368c53f1");
    check_field_offset(lv, s7368c53f2, ABISELECT(40,28), "S7368C53.s7368c53f2");
    check_field_offset(lv, s7368c53f3, ABISELECT(72,52), "S7368C53.s7368c53f3");
    check_field_offset(lv, s7368c53f4, ABISELECT(104,76), "S7368C53.s7368c53f4");
    check_field_offset(lv, s7368c53f5, ABISELECT(108,80), "S7368C53.s7368c53f5");
    check_field_offset(lv, s7368c53f6, ABISELECT(112,84), "S7368C53.s7368c53f6");
    test_class_info(&lv, &cd_S7368C53);
    dp->~S7368C53();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C53(Test_S7368C53, "S7368C53", ABISELECT(128,96));

#else // __cplusplus

extern void _ZN8S7368C53C1Ev();
extern void _ZN8S7368C53D1Ev();
Name_Map name_map_S7368C53[] = {
  NSPAIR(_ZN8S7368C53C1Ev),
  NSPAIR(_ZN8S7368C53D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C53[];
extern void _ZN8S7368C53D1Ev();
extern void _ZN8S7368C53D0Ev();
static  VTBL_ENTRY vtc_S7368C53[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C53[0]),
  (VTBL_ENTRY)&_ZN8S7368C53D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C53D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C53[];
extern  VTBL_ENTRY _ZTV8S7368C53[];
Class_Descriptor cd_S7368C53 = {  "S7368C53", // class name
  0,0,//no base classes
  &(vtc_S7368C53[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,96), // object size
  NSPAIRA(_ZTI8S7368C53),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C53),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  S7368C55  {
  int s7368c55f0;
  ::S7368C9_nt s7368c55f1;
  ::S7368C7 s7368c55f2;
  ::S7368C7 s7368c55f3;
  __tsi64 s7368c55f4[2];
  long s7368c55f5;
  ::S7368C9_nt s7368c55f6;
  long s7368c55f7;
  ::S7368C9_nt s7368c55f8;
  ::S7368C50 s7368c55f9;
  ::S7368C15 s7368c55f10;
  ::S7368C15 s7368c55f11;
  void  mf7368c55(); // _ZN8S7368C559mf7368c55Ev
  virtual  ~S7368C55(); // _ZN8S7368C55D1Ev
  S7368C55(); // tgen
};
//SIG(-1 S7368C55) C1{ vd m Fi FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ vd m Fc} vd Fi FC2 FC6{ BC5 vd FL[2]} FC2 FC7{ BC5 vd FC2 FC2 FC2 FC8{ m Fp Fi[2] FC9{ m}} FC10{ m Fp Fi[2] FC3}}} FC4 FL[2] Fl FC2 Fl FC2 FC11{ m Fp Fi[2] FC12{ m}} FC10 FC10}


void  S7368C55 ::mf7368c55(){}
 S7368C55 ::~S7368C55(){ note_dtor("S7368C55", this);}
S7368C55 ::S7368C55(){ note_ctor("S7368C55", this);} // tgen

static void Test_S7368C55()
{
  extern Class_Descriptor cd_S7368C55;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,98)];
    init_test(&cd_S7368C55, buf);
    S7368C55 *dp, &lv = *(dp=new (buf) S7368C55());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,388), "sizeof(S7368C55)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C55)");
    check_field_offset(lv, s7368c55f0, ABISELECT(8,4), "S7368C55.s7368c55f0");
    check_field_offset(lv, s7368c55f1, ABISELECT(16,8), "S7368C55.s7368c55f1");
    check_field_offset(lv, s7368c55f2, ABISELECT(32,20), "S7368C55.s7368c55f2");
    check_field_offset(lv, s7368c55f3, ABISELECT(224,156), "S7368C55.s7368c55f3");
    check_field_offset(lv, s7368c55f4, ABISELECT(416,292), "S7368C55.s7368c55f4");
    check_field_offset(lv, s7368c55f5, ABISELECT(432,308), "S7368C55.s7368c55f5");
    check_field_offset(lv, s7368c55f6, ABISELECT(440,312), "S7368C55.s7368c55f6");
    check_field_offset(lv, s7368c55f7, ABISELECT(456,324), "S7368C55.s7368c55f7");
    check_field_offset(lv, s7368c55f8, ABISELECT(464,328), "S7368C55.s7368c55f8");
    check_field_offset(lv, s7368c55f9, ABISELECT(480,340), "S7368C55.s7368c55f9");
    check_field_offset(lv, s7368c55f10, ABISELECT(504,356), "S7368C55.s7368c55f10");
    check_field_offset(lv, s7368c55f11, ABISELECT(528,372), "S7368C55.s7368c55f11");
    test_class_info(&lv, &cd_S7368C55);
    dp->~S7368C55();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C55(Test_S7368C55, "S7368C55", ABISELECT(552,388));

#else // __cplusplus

extern void _ZN8S7368C55C1Ev();
extern void _ZN8S7368C55D1Ev();
Name_Map name_map_S7368C55[] = {
  NSPAIR(_ZN8S7368C55C1Ev),
  NSPAIR(_ZN8S7368C55D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C55[];
extern void _ZN8S7368C55D1Ev();
extern void _ZN8S7368C55D0Ev();
static  VTBL_ENTRY vtc_S7368C55[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C55[0]),
  (VTBL_ENTRY)&_ZN8S7368C55D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C55D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C55[];
extern  VTBL_ENTRY _ZTV8S7368C55[];
Class_Descriptor cd_S7368C55 = {  "S7368C55", // class name
  0,0,//no base classes
  &(vtc_S7368C55[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(552,388), // object size
  NSPAIRA(_ZTI8S7368C55),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C55),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  S7368C58  {
  void *s7368c58f0;
  int s7368c58f1[2];
  ::S7368C51 s7368c58f2;
  void  mf7368c58(); // _ZN8S7368C589mf7368c58Ev
};
//SIG(-1 S7368C58) C1{ m Fp Fi[2] FC2{ m}}


void  S7368C58 ::mf7368c58(){}

static void Test_S7368C58()
{
  {
    init_simple_test("S7368C58");
    S7368C58 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C58)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C58)");
    check_field_offset(lv, s7368c58f0, 0, "S7368C58.s7368c58f0");
    check_field_offset(lv, s7368c58f1, ABISELECT(8,4), "S7368C58.s7368c58f1");
    check_field_offset(lv, s7368c58f2, ABISELECT(16,12), "S7368C58.s7368c58f2");
  }
}
static Arrange_To_Call_Me vS7368C58(Test_S7368C58, "S7368C58", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C54  {
  ::S7368C55 s7368c54f0;
  ::S7368C15 s7368c54f1;
  int s7368c54f2;
  ::S7368C58 s7368c54f3;
  void  mf7368c54(); // _ZN8S7368C549mf7368c54Ev
  virtual  ~S7368C54(); // _ZN8S7368C54D1Ev
  S7368C54(); // tgen
};
//SIG(-1 S7368C54) C1{ vd m FC2{ vd m Fi FC3{ m Fp Fi FC4{ m}} FC5{ BC6{ vd m Fc} vd Fi FC3 FC7{ BC6 vd FL[2]} FC3 FC8{ BC6 vd FC3 FC3 FC3 FC9{ m Fp Fi[2] FC10{ m}} FC11{ m Fp Fi[2] FC4}}} FC5 FL[2] Fl FC3 Fl FC3 FC12{ m Fp Fi[2] FC13{ m}} FC11 FC11} FC11 Fi FC14{ m Fp Fi[2] FC13}}


void  S7368C54 ::mf7368c54(){}
 S7368C54 ::~S7368C54(){ note_dtor("S7368C54", this);}
S7368C54 ::S7368C54(){ note_ctor("S7368C54", this);} // tgen

static void Test_S7368C54()
{
  extern Class_Descriptor cd_S7368C54;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,108)];
    init_test(&cd_S7368C54, buf);
    S7368C54 *dp, &lv = *(dp=new (buf) S7368C54());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,428), "sizeof(S7368C54)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C54)");
    check_field_offset(lv, s7368c54f0, ABISELECT(8,4), "S7368C54.s7368c54f0");
    check_field_offset(lv, s7368c54f1, ABISELECT(560,392), "S7368C54.s7368c54f1");
    check_field_offset(lv, s7368c54f2, ABISELECT(584,408), "S7368C54.s7368c54f2");
    check_field_offset(lv, s7368c54f3, ABISELECT(592,412), "S7368C54.s7368c54f3");
    test_class_info(&lv, &cd_S7368C54);
    dp->~S7368C54();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C54(Test_S7368C54, "S7368C54", ABISELECT(616,428));

#else // __cplusplus

extern void _ZN8S7368C54C1Ev();
extern void _ZN8S7368C54D1Ev();
Name_Map name_map_S7368C54[] = {
  NSPAIR(_ZN8S7368C54C1Ev),
  NSPAIR(_ZN8S7368C54D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C54[];
extern void _ZN8S7368C54D1Ev();
extern void _ZN8S7368C54D0Ev();
static  VTBL_ENTRY vtc_S7368C54[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C54[0]),
  (VTBL_ENTRY)&_ZN8S7368C54D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C54D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C54[];
extern  VTBL_ENTRY _ZTV8S7368C54[];
Class_Descriptor cd_S7368C54 = {  "S7368C54", // class name
  0,0,//no base classes
  &(vtc_S7368C54[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,428), // object size
  NSPAIRA(_ZTI8S7368C54),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C54),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  S7368C60  : S7368C18_nt {
  void *s7368c60f0;
  ::S7368C9_nt s7368c60f1;
  virtual  ~S7368C60(); // _ZN8S7368C60D1Ev
  S7368C60(); // tgen
};
//SIG(-1 S7368C60) C1{ BC2{ vd m Fp} vd Fp FC3{ m Fp Fi FC4{ m}}}


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

static void Test_S7368C60()
{
  extern Class_Descriptor cd_S7368C60;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7368C60, buf);
    S7368C60 *dp, &lv = *(dp=new (buf) S7368C60());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7368C60)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C60)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S7368C60");
    check_field_offset(lv, s7368c60f0, ABISELECT(16,8), "S7368C60.s7368c60f0");
    check_field_offset(lv, s7368c60f1, ABISELECT(24,12), "S7368C60.s7368c60f1");
    test_class_info(&lv, &cd_S7368C60);
    dp->~S7368C60();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C60(Test_S7368C60, "S7368C60", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S7368C60C1Ev();
extern void _ZN8S7368C60D1Ev();
Name_Map name_map_S7368C60[] = {
  NSPAIR(_ZN8S7368C60C1Ev),
  NSPAIR(_ZN8S7368C60D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S7368C60[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C60[];
extern void _ZN8S7368C60D1Ev();
extern void _ZN8S7368C60D0Ev();
static  VTBL_ENTRY vtc_S7368C60[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C60[0]),
  (VTBL_ENTRY)&_ZN8S7368C60D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C60D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C60[];
extern  VTBL_ENTRY _ZTV8S7368C60[];
Class_Descriptor cd_S7368C60 = {  "S7368C60", // class name
  bases_S7368C60, 1,
  &(vtc_S7368C60[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S7368C60),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C60),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C52  : virtual S7368C3 {
  ::S7368C53 s7368c52f0;
  ::S7368C54 s7368c52f1;
  ::S7368C42 s7368c52f2;
  int s7368c52f3;
  ::S7368C60 s7368c52f4;
  int s7368c52f5;
  virtual  ~S7368C52(); // _ZN8S7368C52D2Ev
  S7368C52(); // tgen
};
//SIG(-1 S7368C52) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd FC13{ vd m FC8 FC8 FC10 FC10 Fi Fc FC8} FC14{ vd m FC15{ vd m Fi FC8 FC6 FC6 FL[2] Fl FC8 Fl FC8 FC16{ m Fp Fi[2] FC17{ m}} FC12 FC12} FC12 Fi FC18{ m Fp Fi[2] FC17}} FC19{ m Fp Fi[2] FC20{ m}} Fi FC21{ BC22{ vd m Fp} vd Fp FC8} Fi}


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

static void Test_S7368C52()
{
  extern Class_Descriptor cd_S7368C52;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(167,228)];
    init_test(&cd_S7368C52, buf);
    S7368C52 *dp, &lv = *(dp=new (buf) S7368C52());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,908), "sizeof(S7368C52)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C52)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(832,576), "S7368C52");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(832,576), "S7368C52");
    check_field_offset(lv, s7368c52f0, ABISELECT(8,4), "S7368C52.s7368c52f0");
    check_field_offset(lv, s7368c52f1, ABISELECT(136,100), "S7368C52.s7368c52f1");
    check_field_offset(lv, s7368c52f2, ABISELECT(752,528), "S7368C52.s7368c52f2");
    check_field_offset(lv, s7368c52f3, ABISELECT(776,544), "S7368C52.s7368c52f3");
    check_field_offset(lv, s7368c52f4, ABISELECT(784,548), "S7368C52.s7368c52f4");
    check_field_offset(lv, s7368c52f5, ABISELECT(824,572), "S7368C52.s7368c52f5");
    test_class_info(&lv, &cd_S7368C52);
    dp->~S7368C52();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C52(Test_S7368C52, "S7368C52", ABISELECT(1328,908));

#else // __cplusplus

extern void _ZN8S7368C52C1Ev();
extern void _ZN8S7368C52D2Ev();
Name_Map name_map_S7368C52[] = {
  NSPAIR(_ZN8S7368C52C1Ev),
  NSPAIR(_ZN8S7368C52D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C52[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(832,576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(832,576), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C52[];
extern void _ZN8S7368C52D1Ev();
extern void _ZN8S7368C52D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C52D1Ev,_ZTv0_n12_N8S7368C52D1Ev)();
extern void ABISELECT(_ZThn832_N8S7368C52D1Ev,_ZThn576_N8S7368C52D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C52D0Ev,_ZTv0_n12_N8S7368C52D0Ev)();
extern void ABISELECT(_ZThn832_N8S7368C52D0Ev,_ZThn576_N8S7368C52D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C52[] = {
  ABISELECT(832,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C52[0]),
  (VTBL_ENTRY)&_ZN8S7368C52D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C52D0Ev,
  ABISELECT(-832,-576),
  ABISELECT(-832,-576),
  (VTBL_ENTRY)&(_ZTI8S7368C52[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C52D1Ev,_ZTv0_n12_N8S7368C52D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C52D0Ev,_ZTv0_n12_N8S7368C52D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C52[];
static  VTT_ENTRY vtt_S7368C52[] = {
  {&(_ZTV8S7368C52[3]),  3,10},
  {&(_ZTV8S7368C52[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C52[];
extern  VTBL_ENTRY _ZTV8S7368C52[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C52[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C52D0Ev,_ZTv0_n12_N8S7368C52D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S7368C52D0Ev,_ZThn576_N8S7368C52D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C52D1Ev,_ZTv0_n12_N8S7368C52D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S7368C52D1Ev,_ZThn576_N8S7368C52D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C52 = {  "S7368C52", // class name
  bases_S7368C52, 2,
  &(vtc_S7368C52[0]), // expected_vtbl_contents
  &(vtt_S7368C52[0]), // expected_vtt_contents
  ABISELECT(1328,908), // object size
  NSPAIRA(_ZTI8S7368C52),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C52),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C52),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C61  : virtual S7368C3 {
  virtual  ~S7368C61(); // _ZN8S7368C61D2Ev
  S7368C61(); // tgen
};
//SIG(-1 S7368C61) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd}


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

static void Test_S7368C61()
{
  extern Class_Descriptor cd_S7368C61;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(64,85)];
    init_test(&cd_S7368C61, buf);
    S7368C61 *dp, &lv = *(dp=new (buf) S7368C61());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(504,336), "sizeof(S7368C61)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C61)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(8,4), "S7368C61");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(8,4), "S7368C61");
    test_class_info(&lv, &cd_S7368C61);
    dp->~S7368C61();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C61(Test_S7368C61, "S7368C61", ABISELECT(504,336));

#else // __cplusplus

extern void _ZN8S7368C61C1Ev();
extern void _ZN8S7368C61D2Ev();
Name_Map name_map_S7368C61[] = {
  NSPAIR(_ZN8S7368C61C1Ev),
  NSPAIR(_ZN8S7368C61D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C61[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_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_S7368C3,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C61[];
extern void _ZN8S7368C61D1Ev();
extern void _ZN8S7368C61D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C61D1Ev,_ZTv0_n12_N8S7368C61D1Ev)();
extern void ABISELECT(_ZThn8_N8S7368C61D1Ev,_ZThn4_N8S7368C61D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C61D0Ev,_ZTv0_n12_N8S7368C61D0Ev)();
extern void ABISELECT(_ZThn8_N8S7368C61D0Ev,_ZThn4_N8S7368C61D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C61[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C61[0]),
  (VTBL_ENTRY)&_ZN8S7368C61D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C61D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7368C61[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C61D1Ev,_ZTv0_n12_N8S7368C61D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C61D0Ev,_ZTv0_n12_N8S7368C61D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C61[];
static  VTT_ENTRY vtt_S7368C61[] = {
  {&(_ZTV8S7368C61[3]),  3,10},
  {&(_ZTV8S7368C61[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C61[];
extern  VTBL_ENTRY _ZTV8S7368C61[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C61[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C61D0Ev,_ZTv0_n12_N8S7368C61D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7368C61D0Ev,_ZThn4_N8S7368C61D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C61D1Ev,_ZTv0_n12_N8S7368C61D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7368C61D1Ev,_ZThn4_N8S7368C61D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C61 = {  "S7368C61", // class name
  bases_S7368C61, 2,
  &(vtc_S7368C61[0]), // expected_vtbl_contents
  &(vtt_S7368C61[0]), // expected_vtt_contents
  ABISELECT(504,336), // object size
  NSPAIRA(_ZTI8S7368C61),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C61),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C61),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C63  {
  ::S7368C9_nt s7368c63f0;
  int s7368c63f1;
  ::S7368C11 s7368c63f2;
  void  mf7368c63(); // _ZN8S7368C639mf7368c63Ev
  virtual  ~S7368C63(); // _ZN8S7368C63D1Ev
  S7368C63(); // tgen
};
//SIG(-1 S7368C63) C1{ vd m FC2{ m Fp Fi FC3{ m}} Fi FC4{ BC5{ vd m Fc} vd FL[2]}}


void  S7368C63 ::mf7368c63(){}
 S7368C63 ::~S7368C63(){ note_dtor("S7368C63", this);}
S7368C63 ::S7368C63(){ note_ctor("S7368C63", this);} // tgen

static void Test_S7368C63()
{
  extern Class_Descriptor cd_S7368C63;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S7368C63, buf);
    S7368C63 *dp, &lv = *(dp=new (buf) S7368C63());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S7368C63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C63)");
    check_field_offset(lv, s7368c63f0, ABISELECT(8,4), "S7368C63.s7368c63f0");
    check_field_offset(lv, s7368c63f1, ABISELECT(24,16), "S7368C63.s7368c63f1");
    check_field_offset(lv, s7368c63f2, ABISELECT(32,20), "S7368C63.s7368c63f2");
    test_class_info(&lv, &cd_S7368C63);
    dp->~S7368C63();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C63(Test_S7368C63, "S7368C63", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN8S7368C63C1Ev();
extern void _ZN8S7368C63D1Ev();
Name_Map name_map_S7368C63[] = {
  NSPAIR(_ZN8S7368C63C1Ev),
  NSPAIR(_ZN8S7368C63D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C63[];
extern void _ZN8S7368C63D1Ev();
extern void _ZN8S7368C63D0Ev();
static  VTBL_ENTRY vtc_S7368C63[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C63[0]),
  (VTBL_ENTRY)&_ZN8S7368C63D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C63D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C63[];
extern  VTBL_ENTRY _ZTV8S7368C63[];
Class_Descriptor cd_S7368C63 = {  "S7368C63", // class name
  0,0,//no base classes
  &(vtc_S7368C63[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI8S7368C63),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C63),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  S7368C64  {
  ::S7368C11 s7368c64f0;
  ::S7368C9_nt s7368c64f1;
  int s7368c64f2;
  ::S7368C9_nt s7368c64f3;
  ::S7368C58 s7368c64f4;
  int s7368c64f5;
  void  mf7368c64(); // _ZN8S7368C649mf7368c64Ev
  virtual  ~S7368C64(); // _ZN8S7368C64D1Ev
  S7368C64(); // tgen
};
//SIG(-1 S7368C64) C1{ vd m FC2{ BC3{ vd m Fc} vd FL[2]} FC4{ m Fp Fi FC5{ m}} Fi FC4 FC6{ m Fp Fi[2] FC7{ m}} Fi}


void  S7368C64 ::mf7368c64(){}
 S7368C64 ::~S7368C64(){ note_dtor("S7368C64", this);}
S7368C64 ::S7368C64(){ note_ctor("S7368C64", this);} // tgen

static void Test_S7368C64()
{
  extern Class_Descriptor cd_S7368C64;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S7368C64, buf);
    S7368C64 *dp, &lv = *(dp=new (buf) S7368C64());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S7368C64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C64)");
    check_field_offset(lv, s7368c64f0, ABISELECT(8,4), "S7368C64.s7368c64f0");
    check_field_offset(lv, s7368c64f1, ABISELECT(40,28), "S7368C64.s7368c64f1");
    check_field_offset(lv, s7368c64f2, ABISELECT(56,40), "S7368C64.s7368c64f2");
    check_field_offset(lv, s7368c64f3, ABISELECT(64,44), "S7368C64.s7368c64f3");
    check_field_offset(lv, s7368c64f4, ABISELECT(80,56), "S7368C64.s7368c64f4");
    check_field_offset(lv, s7368c64f5, ABISELECT(104,72), "S7368C64.s7368c64f5");
    test_class_info(&lv, &cd_S7368C64);
    dp->~S7368C64();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C64(Test_S7368C64, "S7368C64", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN8S7368C64C1Ev();
extern void _ZN8S7368C64D1Ev();
Name_Map name_map_S7368C64[] = {
  NSPAIR(_ZN8S7368C64C1Ev),
  NSPAIR(_ZN8S7368C64D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7368C64[];
extern void _ZN8S7368C64D1Ev();
extern void _ZN8S7368C64D0Ev();
static  VTBL_ENTRY vtc_S7368C64[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C64[0]),
  (VTBL_ENTRY)&_ZN8S7368C64D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C64D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C64[];
extern  VTBL_ENTRY _ZTV8S7368C64[];
Class_Descriptor cd_S7368C64 = {  "S7368C64", // class name
  0,0,//no base classes
  &(vtc_S7368C64[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI8S7368C64),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7368C64),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  S7368C62  : virtual S7368C3 {
  ::S7368C63 s7368c62f0;
  ::S7368C64 s7368c62f1;
  ::S7368C64 s7368c62f2;
  int s7368c62f3[2];
  virtual  ~S7368C62(); // _ZN8S7368C62D2Ev
  S7368C62(); // tgen
};
//SIG(-1 S7368C62) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd FC13{ vd m FC8 Fi FC10} FC14{ vd m FC10 FC8 Fi FC8 FC15{ m Fp Fi[2] FC16{ m}} Fi} FC14 Fi[2]}


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

static void Test_S7368C62()
{
  extern Class_Descriptor cd_S7368C62;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(101,136)];
    init_test(&cd_S7368C62, buf);
    S7368C62 *dp, &lv = *(dp=new (buf) S7368C62());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(800,540), "sizeof(S7368C62)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C62)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(304,208), "S7368C62");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(304,208), "S7368C62");
    check_field_offset(lv, s7368c62f0, ABISELECT(8,4), "S7368C62.s7368c62f0");
    check_field_offset(lv, s7368c62f1, ABISELECT(72,48), "S7368C62.s7368c62f1");
    check_field_offset(lv, s7368c62f2, ABISELECT(184,124), "S7368C62.s7368c62f2");
    check_field_offset(lv, s7368c62f3, ABISELECT(296,200), "S7368C62.s7368c62f3");
    test_class_info(&lv, &cd_S7368C62);
    dp->~S7368C62();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C62(Test_S7368C62, "S7368C62", ABISELECT(800,540));

#else // __cplusplus

extern void _ZN8S7368C62C1Ev();
extern void _ZN8S7368C62D2Ev();
Name_Map name_map_S7368C62[] = {
  NSPAIR(_ZN8S7368C62C1Ev),
  NSPAIR(_ZN8S7368C62D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C62[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(304,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(304,208), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C62[];
extern void _ZN8S7368C62D1Ev();
extern void _ZN8S7368C62D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C62D1Ev,_ZTv0_n12_N8S7368C62D1Ev)();
extern void ABISELECT(_ZThn304_N8S7368C62D1Ev,_ZThn208_N8S7368C62D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C62D0Ev,_ZTv0_n12_N8S7368C62D0Ev)();
extern void ABISELECT(_ZThn304_N8S7368C62D0Ev,_ZThn208_N8S7368C62D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C62[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C62[0]),
  (VTBL_ENTRY)&_ZN8S7368C62D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C62D0Ev,
  ABISELECT(-304,-208),
  ABISELECT(-304,-208),
  (VTBL_ENTRY)&(_ZTI8S7368C62[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C62D1Ev,_ZTv0_n12_N8S7368C62D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C62D0Ev,_ZTv0_n12_N8S7368C62D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C62[];
static  VTT_ENTRY vtt_S7368C62[] = {
  {&(_ZTV8S7368C62[3]),  3,10},
  {&(_ZTV8S7368C62[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C62[];
extern  VTBL_ENTRY _ZTV8S7368C62[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C62[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C62D0Ev,_ZTv0_n12_N8S7368C62D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S7368C62D0Ev,_ZThn208_N8S7368C62D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C62D1Ev,_ZTv0_n12_N8S7368C62D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S7368C62D1Ev,_ZThn208_N8S7368C62D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C62 = {  "S7368C62", // class name
  bases_S7368C62, 2,
  &(vtc_S7368C62[0]), // expected_vtbl_contents
  &(vtt_S7368C62[0]), // expected_vtt_contents
  ABISELECT(800,540), // object size
  NSPAIRA(_ZTI8S7368C62),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C62),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C62),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C70_nt  {
  __tsi64 s7368c70f0[2];
  void  mf7368c70(); // _ZN11S7368C70_nt9mf7368c70Ev
};
//SIG(-1 S7368C70_nt) C1{ m FL[2]}


void  S7368C70_nt ::mf7368c70(){}

//skip512 S7368C70_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C69_nt  {
  ::S7368C70_nt s7368c69f0;
  void  mf7368c69(); // _ZN11S7368C69_nt9mf7368c69Ev
};
//SIG(-1 S7368C69_nt) C1{ m FC2{ m FL[2]}}


void  S7368C69_nt ::mf7368c69(){}

//skip512 S7368C69_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C68  : S7368C18_nt {
  int s7368c68f0;
  ::S7368C9_nt s7368c68f1;
  void *s7368c68f2;
  ::S7368C69_nt s7368c68f3;
  char s7368c68f4;
  virtual  ~S7368C68(); // _ZN8S7368C68D1Ev
  S7368C68(); // tgen
};
//SIG(-1 S7368C68) C1{ BC2{ vd m Fp} vd Fi FC3{ m Fp Fi FC4{ m}} Fp FC5{ m FC6{ m FL[2]}} Fc}


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

static void Test_S7368C68()
{
  extern Class_Descriptor cd_S7368C68;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S7368C68, buf);
    S7368C68 *dp, &lv = *(dp=new (buf) S7368C68());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S7368C68)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C68)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S7368C68");
    check_field_offset(lv, s7368c68f0, ABISELECT(16,8), "S7368C68.s7368c68f0");
    check_field_offset(lv, s7368c68f1, ABISELECT(24,12), "S7368C68.s7368c68f1");
    check_field_offset(lv, s7368c68f2, ABISELECT(40,24), "S7368C68.s7368c68f2");
    check_field_offset(lv, s7368c68f3, ABISELECT(48,28), "S7368C68.s7368c68f3");
    check_field_offset(lv, s7368c68f4, ABISELECT(64,44), "S7368C68.s7368c68f4");
    test_class_info(&lv, &cd_S7368C68);
    dp->~S7368C68();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C68(Test_S7368C68, "S7368C68", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S7368C68C1Ev();
extern void _ZN8S7368C68D1Ev();
Name_Map name_map_S7368C68[] = {
  NSPAIR(_ZN8S7368C68C1Ev),
  NSPAIR(_ZN8S7368C68D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S7368C68[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C68[];
extern void _ZN8S7368C68D1Ev();
extern void _ZN8S7368C68D0Ev();
static  VTBL_ENTRY vtc_S7368C68[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C68[0]),
  (VTBL_ENTRY)&_ZN8S7368C68D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C68D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C68[];
extern  VTBL_ENTRY _ZTV8S7368C68[];
Class_Descriptor cd_S7368C68 = {  "S7368C68", // class name
  bases_S7368C68, 1,
  &(vtc_S7368C68[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S7368C68),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C68),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C72_nt  {
  int s7368c72f0[2];
  void  mf7368c72(); // _ZN11S7368C72_nt9mf7368c72Ev
  virtual  ~S7368C72_nt(); // _ZN11S7368C72_ntD1Ev
  S7368C72_nt(); // tgen
};
//SIG(-1 S7368C72_nt) C1{ vd m Fi[2]}


void  S7368C72_nt ::mf7368c72(){}
 S7368C72_nt ::~S7368C72_nt(){ note_dtor("S7368C72_nt", this);}
S7368C72_nt ::S7368C72_nt(){ note_ctor("S7368C72_nt", this);} // tgen

//skip512 S7368C72_nt

#else // __cplusplus

extern void _ZN11S7368C72_ntC1Ev();
extern void _ZN11S7368C72_ntD1Ev();
Name_Map name_map_S7368C72_nt[] = {
  NSPAIR(_ZN11S7368C72_ntC1Ev),
  NSPAIR(_ZN11S7368C72_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7368C72_nt[];
extern void _ZN11S7368C72_ntD1Ev();
extern void _ZN11S7368C72_ntD0Ev();
static  VTBL_ENTRY vtc_S7368C72_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7368C72_nt[0]),
  (VTBL_ENTRY)&_ZN11S7368C72_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S7368C72_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S7368C72_nt[];
VTBL_ENTRY *P__ZTI11S7368C72_nt = _ZTI11S7368C72_nt; 
extern  VTBL_ENTRY _ZTV11S7368C72_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C71  : S7368C18_nt {
  ::S7368C72_nt s7368c71f0;
  int s7368c71f1;
  virtual  ~S7368C71(); // _ZN8S7368C71D1Ev
  S7368C71(); // tgen
};
//SIG(-1 S7368C71) C1{ BC2{ vd m Fp} vd FC3{ vd m Fi[2]} Fi}


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

static void Test_S7368C71()
{
  extern Class_Descriptor cd_S7368C71;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7368C71, buf);
    S7368C71 *dp, &lv = *(dp=new (buf) S7368C71());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7368C71)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C71)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S7368C71");
    check_field_offset(lv, s7368c71f0, ABISELECT(16,8), "S7368C71.s7368c71f0");
    check_field_offset(lv, s7368c71f1, ABISELECT(32,20), "S7368C71.s7368c71f1");
    test_class_info(&lv, &cd_S7368C71);
    dp->~S7368C71();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C71(Test_S7368C71, "S7368C71", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S7368C71C1Ev();
extern void _ZN8S7368C71D1Ev();
Name_Map name_map_S7368C71[] = {
  NSPAIR(_ZN8S7368C71C1Ev),
  NSPAIR(_ZN8S7368C71D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S7368C71[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C71[];
extern void _ZN8S7368C71D1Ev();
extern void _ZN8S7368C71D0Ev();
static  VTBL_ENTRY vtc_S7368C71[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C71[0]),
  (VTBL_ENTRY)&_ZN8S7368C71D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C71D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C71[];
extern  VTBL_ENTRY _ZTV8S7368C71[];
Class_Descriptor cd_S7368C71 = {  "S7368C71", // class name
  bases_S7368C71, 1,
  &(vtc_S7368C71[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S7368C71),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C71),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C73  : S7368C18_nt {
  int s7368c73f0[2];
  virtual  ~S7368C73(); // _ZN8S7368C73D1Ev
  S7368C73(); // tgen
};
//SIG(-1 S7368C73) C1{ BC2{ vd m Fp} vd Fi[2]}


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

static void Test_S7368C73()
{
  extern Class_Descriptor cd_S7368C73;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7368C73, buf);
    S7368C73 *dp, &lv = *(dp=new (buf) S7368C73());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C73)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C73)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S7368C73");
    check_field_offset(lv, s7368c73f0, ABISELECT(16,8), "S7368C73.s7368c73f0");
    test_class_info(&lv, &cd_S7368C73);
    dp->~S7368C73();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C73(Test_S7368C73, "S7368C73", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7368C73C1Ev();
extern void _ZN8S7368C73D1Ev();
Name_Map name_map_S7368C73[] = {
  NSPAIR(_ZN8S7368C73C1Ev),
  NSPAIR(_ZN8S7368C73D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S7368C73[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C73[];
extern void _ZN8S7368C73D1Ev();
extern void _ZN8S7368C73D0Ev();
static  VTBL_ENTRY vtc_S7368C73[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C73[0]),
  (VTBL_ENTRY)&_ZN8S7368C73D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C73D0Ev,
};
extern VTBL_ENTRY _ZTI8S7368C73[];
extern  VTBL_ENTRY _ZTV8S7368C73[];
Class_Descriptor cd_S7368C73 = {  "S7368C73", // class name
  bases_S7368C73, 1,
  &(vtc_S7368C73[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7368C73),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7368C73),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  S7368C67  : virtual S7368C3 {
  ::S7368C68 s7368c67f0;
  ::S7368C71 s7368c67f1;
  char s7368c67f2;
  ::S7368C73 s7368c67f3;
  virtual  ~S7368C67(); // _ZN8S7368C67D2Ev
  S7368C67(); // tgen
};
//SIG(-1 S7368C67) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd FC13{ BC14{ vd m Fp} vd Fi FC8 Fp FC15{ m FC16{ m FL[2]}} Fc} FC17{ BC14 vd FC18{ vd m Fi[2]} Fi} Fc FC19{ BC14 vd Fi[2]}}


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

static void Test_S7368C67()
{
  extern Class_Descriptor cd_S7368C67;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(82,108)];
    init_test(&cd_S7368C67, buf);
    S7368C67 *dp, &lv = *(dp=new (buf) S7368C67());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(648,428), "sizeof(S7368C67)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C67)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(152,96), "S7368C67");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(152,96), "S7368C67");
    check_field_offset(lv, s7368c67f0, ABISELECT(8,4), "S7368C67.s7368c67f0");
    check_field_offset(lv, s7368c67f1, ABISELECT(80,52), "S7368C67.s7368c67f1");
    check_field_offset(lv, s7368c67f2, ABISELECT(120,76), "S7368C67.s7368c67f2");
    check_field_offset(lv, s7368c67f3, ABISELECT(128,80), "S7368C67.s7368c67f3");
    test_class_info(&lv, &cd_S7368C67);
    dp->~S7368C67();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C67(Test_S7368C67, "S7368C67", ABISELECT(648,428));

#else // __cplusplus

extern void _ZN8S7368C67C1Ev();
extern void _ZN8S7368C67D2Ev();
Name_Map name_map_S7368C67[] = {
  NSPAIR(_ZN8S7368C67C1Ev),
  NSPAIR(_ZN8S7368C67D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C67[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(152,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(152,96), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C67[];
extern void _ZN8S7368C67D1Ev();
extern void _ZN8S7368C67D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C67D1Ev,_ZTv0_n12_N8S7368C67D1Ev)();
extern void ABISELECT(_ZThn152_N8S7368C67D1Ev,_ZThn96_N8S7368C67D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C67D0Ev,_ZTv0_n12_N8S7368C67D0Ev)();
extern void ABISELECT(_ZThn152_N8S7368C67D0Ev,_ZThn96_N8S7368C67D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C67[] = {
  ABISELECT(152,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C67[0]),
  (VTBL_ENTRY)&_ZN8S7368C67D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C67D0Ev,
  ABISELECT(-152,-96),
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI8S7368C67[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C67D1Ev,_ZTv0_n12_N8S7368C67D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C67D0Ev,_ZTv0_n12_N8S7368C67D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C67[];
static  VTT_ENTRY vtt_S7368C67[] = {
  {&(_ZTV8S7368C67[3]),  3,10},
  {&(_ZTV8S7368C67[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C67[];
extern  VTBL_ENTRY _ZTV8S7368C67[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C67[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C67D0Ev,_ZTv0_n12_N8S7368C67D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7368C67D0Ev,_ZThn96_N8S7368C67D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C67D1Ev,_ZTv0_n12_N8S7368C67D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S7368C67D1Ev,_ZThn96_N8S7368C67D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C67 = {  "S7368C67", // class name
  bases_S7368C67, 2,
  &(vtc_S7368C67[0]), // expected_vtbl_contents
  &(vtt_S7368C67[0]), // expected_vtt_contents
  ABISELECT(648,428), // object size
  NSPAIRA(_ZTI8S7368C67),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C67),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C67),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C74  : virtual S7368C3 {
  ::S7368C7 s7368c74f0;
  ::S7368C11 s7368c74f1;
  virtual  ~S7368C74(); // _ZN8S7368C74D2Ev
  S7368C74(); // tgen
};
//SIG(-1 S7368C74) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd FC6 FC10}


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

static void Test_S7368C74()
{
  extern Class_Descriptor cd_S7368C74;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,125)];
    init_test(&cd_S7368C74, buf);
    S7368C74 *dp, &lv = *(dp=new (buf) S7368C74());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,496), "sizeof(S7368C74)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C74)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(232,164), "S7368C74");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(232,164), "S7368C74");
    check_field_offset(lv, s7368c74f0, ABISELECT(8,4), "S7368C74.s7368c74f0");
    check_field_offset(lv, s7368c74f1, ABISELECT(200,140), "S7368C74.s7368c74f1");
    test_class_info(&lv, &cd_S7368C74);
    dp->~S7368C74();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C74(Test_S7368C74, "S7368C74", ABISELECT(728,496));

#else // __cplusplus

extern void _ZN8S7368C74C1Ev();
extern void _ZN8S7368C74D2Ev();
Name_Map name_map_S7368C74[] = {
  NSPAIR(_ZN8S7368C74C1Ev),
  NSPAIR(_ZN8S7368C74D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C74[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(232,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(232,164), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C74[];
extern void _ZN8S7368C74D1Ev();
extern void _ZN8S7368C74D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C74D1Ev,_ZTv0_n12_N8S7368C74D1Ev)();
extern void ABISELECT(_ZThn232_N8S7368C74D1Ev,_ZThn164_N8S7368C74D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C74D0Ev,_ZTv0_n12_N8S7368C74D0Ev)();
extern void ABISELECT(_ZThn232_N8S7368C74D0Ev,_ZThn164_N8S7368C74D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C74[] = {
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C74[0]),
  (VTBL_ENTRY)&_ZN8S7368C74D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C74D0Ev,
  ABISELECT(-232,-164),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S7368C74[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C74D1Ev,_ZTv0_n12_N8S7368C74D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C74D0Ev,_ZTv0_n12_N8S7368C74D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C74[];
static  VTT_ENTRY vtt_S7368C74[] = {
  {&(_ZTV8S7368C74[3]),  3,10},
  {&(_ZTV8S7368C74[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C74[];
extern  VTBL_ENTRY _ZTV8S7368C74[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C74[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C74D0Ev,_ZTv0_n12_N8S7368C74D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7368C74D0Ev,_ZThn164_N8S7368C74D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C74D1Ev,_ZTv0_n12_N8S7368C74D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7368C74D1Ev,_ZThn164_N8S7368C74D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C74 = {  "S7368C74", // class name
  bases_S7368C74, 2,
  &(vtc_S7368C74[0]), // expected_vtbl_contents
  &(vtt_S7368C74[0]), // expected_vtt_contents
  ABISELECT(728,496), // object size
  NSPAIRA(_ZTI8S7368C74),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C74),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C74),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C75  : virtual S7368C3 {
  virtual  ~S7368C75(); // _ZN8S7368C75D2Ev
  S7368C75(); // tgen
};
//SIG(-1 S7368C75) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd}


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

static void Test_S7368C75()
{
  extern Class_Descriptor cd_S7368C75;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(64,85)];
    init_test(&cd_S7368C75, buf);
    S7368C75 *dp, &lv = *(dp=new (buf) S7368C75());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(504,336), "sizeof(S7368C75)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C75)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(8,4), "S7368C75");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(8,4), "S7368C75");
    test_class_info(&lv, &cd_S7368C75);
    dp->~S7368C75();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C75(Test_S7368C75, "S7368C75", ABISELECT(504,336));

#else // __cplusplus

extern void _ZN8S7368C75C1Ev();
extern void _ZN8S7368C75D2Ev();
Name_Map name_map_S7368C75[] = {
  NSPAIR(_ZN8S7368C75C1Ev),
  NSPAIR(_ZN8S7368C75D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C75[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_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_S7368C3,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C75[];
extern void _ZN8S7368C75D1Ev();
extern void _ZN8S7368C75D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C75D1Ev,_ZTv0_n12_N8S7368C75D1Ev)();
extern void ABISELECT(_ZThn8_N8S7368C75D1Ev,_ZThn4_N8S7368C75D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C75D0Ev,_ZTv0_n12_N8S7368C75D0Ev)();
extern void ABISELECT(_ZThn8_N8S7368C75D0Ev,_ZThn4_N8S7368C75D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C75[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C75[0]),
  (VTBL_ENTRY)&_ZN8S7368C75D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C75D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7368C75[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C75D1Ev,_ZTv0_n12_N8S7368C75D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C75D0Ev,_ZTv0_n12_N8S7368C75D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C75[];
static  VTT_ENTRY vtt_S7368C75[] = {
  {&(_ZTV8S7368C75[3]),  3,10},
  {&(_ZTV8S7368C75[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C75[];
extern  VTBL_ENTRY _ZTV8S7368C75[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C75[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C75D0Ev,_ZTv0_n12_N8S7368C75D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7368C75D0Ev,_ZThn4_N8S7368C75D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C75D1Ev,_ZTv0_n12_N8S7368C75D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7368C75D1Ev,_ZThn4_N8S7368C75D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C75 = {  "S7368C75", // class name
  bases_S7368C75, 2,
  &(vtc_S7368C75[0]), // expected_vtbl_contents
  &(vtt_S7368C75[0]), // expected_vtt_contents
  ABISELECT(504,336), // object size
  NSPAIRA(_ZTI8S7368C75),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C75),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C75),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C78  {
  void  mf7368c78(); // _ZN8S7368C789mf7368c78Ev
};
//SIG(-1 S7368C78) C1{ m}


void  S7368C78 ::mf7368c78(){}

static void Test_S7368C78()
{
  {
    init_simple_test("S7368C78");
    S7368C78 lv;
    check2(sizeof(lv), 1, "sizeof(S7368C78)");
    check2(__alignof__(lv), 1, "__alignof__(S7368C78)");
  }
}
static Arrange_To_Call_Me vS7368C78(Test_S7368C78, "S7368C78", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7368C78[];
VTBL_ENTRY *P__ZTI8S7368C78 = _ZTI8S7368C78; 
Class_Descriptor cd_S7368C78 = {  "S7368C78", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S7368C78),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  S7368C77  {
  void *s7368c77f0;
  int s7368c77f1[2];
  ::S7368C78 s7368c77f2;
  void  mf7368c77(); // _ZN8S7368C779mf7368c77Ev
};
//SIG(-1 S7368C77) C1{ m Fp Fi[2] FC2{ m}}


void  S7368C77 ::mf7368c77(){}

static void Test_S7368C77()
{
  {
    init_simple_test("S7368C77");
    S7368C77 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7368C77)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C77)");
    check_field_offset(lv, s7368c77f0, 0, "S7368C77.s7368c77f0");
    check_field_offset(lv, s7368c77f1, ABISELECT(8,4), "S7368C77.s7368c77f1");
    check_field_offset(lv, s7368c77f2, ABISELECT(16,12), "S7368C77.s7368c77f2");
  }
}
static Arrange_To_Call_Me vS7368C77(Test_S7368C77, "S7368C77", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C76  : virtual S7368C3 {
  ::S7368C32 s7368c76f0;
  ::S7368C77 s7368c76f1;
  int s7368c76f2;
  ::S7368C32 s7368c76f3;
  virtual  ~S7368C76(); // _ZN8S7368C76D2Ev
  S7368C76(); // tgen
};
//SIG(-1 S7368C76) C1{ VBC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd Fp[10] FC6{ BC7{ vd m Fc} vd Fi FC8{ m Fp Fi FC9{ m}} FC10{ BC7 vd FL[2]} FC8 FC11{ BC7 vd FC8 FC8 FC8 FC4 FC12{ m Fp Fi[2] FC9}}} FC6} vd FC13{ vd m FC14{ BC7 vd FL} FC6} FC15{ m Fp Fi[2] FC16{ m}} Fi FC13}


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

static void Test_S7368C76()
{
  extern Class_Descriptor cd_S7368C76;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(124,168)];
    init_test(&cd_S7368C76, buf);
    S7368C76 *dp, &lv = *(dp=new (buf) S7368C76());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(984,668), "sizeof(S7368C76)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C76)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(488,336), "S7368C76");
    check_base_class_offset(lv, (S7368C3*), ABISELECT(488,336), "S7368C76");
    check_field_offset(lv, s7368c76f0, ABISELECT(8,4), "S7368C76.s7368c76f0");
    check_field_offset(lv, s7368c76f1, ABISELECT(232,160), "S7368C76.s7368c76f1");
    check_field_offset(lv, s7368c76f2, ABISELECT(256,176), "S7368C76.s7368c76f2");
    check_field_offset(lv, s7368c76f3, ABISELECT(264,180), "S7368C76.s7368c76f3");
    test_class_info(&lv, &cd_S7368C76);
    dp->~S7368C76();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C76(Test_S7368C76, "S7368C76", ABISELECT(984,668));

#else // __cplusplus

extern void _ZN8S7368C76C1Ev();
extern void _ZN8S7368C76D2Ev();
Name_Map name_map_S7368C76[] = {
  NSPAIR(_ZN8S7368C76C1Ev),
  NSPAIR(_ZN8S7368C76D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
static Base_Class bases_S7368C76[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(488,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(488,336), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7368C76[];
extern void _ZN8S7368C76D1Ev();
extern void _ZN8S7368C76D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7368C76D1Ev,_ZTv0_n12_N8S7368C76D1Ev)();
extern void ABISELECT(_ZThn488_N8S7368C76D1Ev,_ZThn336_N8S7368C76D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C76D0Ev,_ZTv0_n12_N8S7368C76D0Ev)();
extern void ABISELECT(_ZThn488_N8S7368C76D0Ev,_ZThn336_N8S7368C76D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C76[] = {
  ABISELECT(488,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C76[0]),
  (VTBL_ENTRY)&_ZN8S7368C76D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C76D0Ev,
  ABISELECT(-488,-336),
  ABISELECT(-488,-336),
  (VTBL_ENTRY)&(_ZTI8S7368C76[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C76D1Ev,_ZTv0_n12_N8S7368C76D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C76D0Ev,_ZTv0_n12_N8S7368C76D0Ev),
};
extern VTBL_ENTRY _ZTV8S7368C76[];
static  VTT_ENTRY vtt_S7368C76[] = {
  {&(_ZTV8S7368C76[3]),  3,10},
  {&(_ZTV8S7368C76[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S7368C76[];
extern  VTBL_ENTRY _ZTV8S7368C76[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C76[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C76D0Ev,_ZTv0_n12_N8S7368C76D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S7368C76D0Ev,_ZThn336_N8S7368C76D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C76D1Ev,_ZTv0_n12_N8S7368C76D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S7368C76D1Ev,_ZThn336_N8S7368C76D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C76 = {  "S7368C76", // class name
  bases_S7368C76, 2,
  &(vtc_S7368C76[0]), // expected_vtbl_contents
  &(vtt_S7368C76[0]), // expected_vtt_contents
  ABISELECT(984,668), // object size
  NSPAIRA(_ZTI8S7368C76),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7368C76),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7368C76),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7368C1  : S7368C2 , S7368C39 , S7368C52 , S7368C61 , S7368C62 , S7368C67 , S7368C74 , S7368C75 , S7368C76 {
  virtual  ~S7368C1(); // _ZN7S7368C1D2Ev
  S7368C1(); // tgen
};
//SIG(1 S7368C1) C1{ BC2{ VBC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd Fp[10] FC7{ BC8{ vd m Fc} vd Fi FC9{ m Fp Fi FC10{ m}} FC11{ BC8 vd FL[2]} FC9 FC12{ BC8 vd FC9 FC9 FC9 FC5 FC13{ m Fp Fi[2] FC10}}} FC7} vd FC14{ BC15{ vd m Fp} vd FC13 Fp Fi} FC16{ m Fp Fi[2] FC17{ m}} Fi FC16 FC16 FC18{ BC8 vd FC11 FC11} FC19{ vd m Fi FC20{ vd m FC21{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC22{ m FC9 FC9}} FC23{ vd m FC24{ BC8 vd FL} FC7} FC25{ BC8 vd FC24 Fi FC26{ vd m FC9 FC11} FC26 Fi FC9 FC9 Fi FC26 FC26} FC27{ BC8 vd Fi[2] FC11 FC9 FC28{ BC8 vd FC9 FC11} FC29{ BC8 vd FC9 FC9 Fi}}} FC20 FC9 FC11} BC30{ VBC3 vd FC31{ vd m FC9 FC11 Fi[2]} FC31 FC32{ vd m FC33{ m Fp Fi[2] FC17} FC18 FC13} FC34{ vd m FC33 FC18} FC34 FC35{ vd m FC9} FC36{ vd m FC9 FC9 FC9 FC11 FC18 FC9 FC5 FC9 FC13} FC37{ vd m FC38{ m Fp Fi[2] FC39{ m}}} Fi FC25 FC23} BC40{ VBC3 vd FC41{ vd m FC9 FC9 FC11 FC11 Fi Fc FC9} FC42{ vd m FC43{ vd m Fi FC9 FC7 FC7 FL[2] Fl FC9 Fl FC9 FC38 FC13 FC13} FC13 Fi FC44{ m Fp Fi[2] FC39}} FC33 Fi FC45{ BC15 vd Fp FC9} Fi} BC46{ VBC3 vd} BC47{ VBC3 vd FC48{ vd m FC9 Fi FC11} FC49{ vd m FC11 FC9 Fi FC9 FC44 Fi} FC49 Fi[2]} BC50{ VBC3 vd FC51{ BC15 vd Fi FC9 Fp FC52{ m FC53{ m FL[2]}} Fc} FC54{ BC15 vd FC55{ vd m Fi[2]} Fi} Fc FC56{ BC15 vd Fi[2]}} BC57{ VBC3 vd FC7 FC11} BC58{ VBC3 vd} BC59{ VBC3 vd FC23 FC60{ m Fp Fi[2] FC61{ m}} Fi FC23} vd}


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

static void Test_S7368C1()
{
  extern Class_Descriptor cd_S7368C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(647,879)];
    init_test(&cd_S7368C1, buf);
    S7368C1 *dp, &lv = *(dp=new (buf) S7368C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5168,3512), "sizeof(S7368C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7368C1)");
    check_base_class_offset(lv, (S7368C4_nt*)(S7368C3*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C2*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C39*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C52*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C61*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C62*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C67*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C74*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C75*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C3*)(S7368C76*), ABISELECT(4672,3180), "S7368C1");
    check_base_class_offset(lv, (S7368C2*), 0, "S7368C1");
    check_base_class_offset(lv, (S7368C39*), ABISELECT(1296,856), "S7368C1");
    check_base_class_offset(lv, (S7368C52*), ABISELECT(2648,1792), "S7368C1");
    check_base_class_offset(lv, (S7368C61*), ABISELECT(3480,2368), "S7368C1");
    check_base_class_offset(lv, (S7368C62*), ABISELECT(3488,2372), "S7368C1");
    check_base_class_offset(lv, (S7368C67*), ABISELECT(3792,2580), "S7368C1");
    check_base_class_offset(lv, (S7368C74*), ABISELECT(3944,2676), "S7368C1");
    check_base_class_offset(lv, (S7368C75*), ABISELECT(4176,2840), "S7368C1");
    check_base_class_offset(lv, (S7368C76*), ABISELECT(4184,2844), "S7368C1");
    test_class_info(&lv, &cd_S7368C1);
    dp->~S7368C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7368C1(Test_S7368C1, "S7368C1", ABISELECT(5168,3512));

#else // __cplusplus

extern void _ZN7S7368C1C1Ev();
extern void _ZN7S7368C1D2Ev();
Name_Map name_map_S7368C1[] = {
  NSPAIR(_ZN7S7368C1C1Ev),
  NSPAIR(_ZN7S7368C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C4_nt;
extern VTBL_ENTRY _ZTI10S7368C4_nt[];
extern  VTBL_ENTRY _ZTV10S7368C4_nt[];
extern Class_Descriptor cd_S7368C3;
extern VTBL_ENTRY _ZTI7S7368C3[];
extern  VTBL_ENTRY _ZTV7S7368C3[];
extern Class_Descriptor cd_S7368C2;
extern VTBL_ENTRY _ZTI7S7368C2[];
extern  VTBL_ENTRY _ZTV7S7368C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7368C2[];
extern Class_Descriptor cd_S7368C39;
extern VTBL_ENTRY _ZTI8S7368C39[];
extern  VTBL_ENTRY _ZTV8S7368C39[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C39[];
extern Class_Descriptor cd_S7368C52;
extern VTBL_ENTRY _ZTI8S7368C52[];
extern  VTBL_ENTRY _ZTV8S7368C52[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C52[];
extern Class_Descriptor cd_S7368C61;
extern VTBL_ENTRY _ZTI8S7368C61[];
extern  VTBL_ENTRY _ZTV8S7368C61[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C61[];
extern Class_Descriptor cd_S7368C62;
extern VTBL_ENTRY _ZTI8S7368C62[];
extern  VTBL_ENTRY _ZTV8S7368C62[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C62[];
extern Class_Descriptor cd_S7368C67;
extern VTBL_ENTRY _ZTI8S7368C67[];
extern  VTBL_ENTRY _ZTV8S7368C67[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C67[];
extern Class_Descriptor cd_S7368C74;
extern VTBL_ENTRY _ZTI8S7368C74[];
extern  VTBL_ENTRY _ZTV8S7368C74[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C74[];
extern Class_Descriptor cd_S7368C75;
extern VTBL_ENTRY _ZTI8S7368C75[];
extern  VTBL_ENTRY _ZTV8S7368C75[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C75[];
extern Class_Descriptor cd_S7368C76;
extern VTBL_ENTRY _ZTI8S7368C76[];
extern  VTBL_ENTRY _ZTV8S7368C76[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7368C76[];
static Base_Class bases_S7368C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C4_nt,    ABISELECT(4672,3180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7368C3,    ABISELECT(4672,3180), //bcp->offset
    45, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7368C2,    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_S7368C39,    ABISELECT(1296,856), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C52,    ABISELECT(2648,1792), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C61,    ABISELECT(3480,2368), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C62,    ABISELECT(3488,2372), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C67,    ABISELECT(3792,2580), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C74,    ABISELECT(3944,2676), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C75,    ABISELECT(4176,2840), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C76,    ABISELECT(4184,2844), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7368C1[];
extern void _ZN7S7368C1D1Ev();
extern void _ZN7S7368C1D0Ev();
extern void ABISELECT(_ZThn1296_N7S7368C1D1Ev,_ZThn856_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn1296_N7S7368C1D0Ev,_ZThn856_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn2648_N7S7368C1D1Ev,_ZThn1792_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn2648_N7S7368C1D0Ev,_ZThn1792_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn3480_N7S7368C1D1Ev,_ZThn2368_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn3480_N7S7368C1D0Ev,_ZThn2368_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn3488_N7S7368C1D1Ev,_ZThn2372_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn3488_N7S7368C1D0Ev,_ZThn2372_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn3792_N7S7368C1D1Ev,_ZThn2580_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn3792_N7S7368C1D0Ev,_ZThn2580_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn3944_N7S7368C1D1Ev,_ZThn2676_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn3944_N7S7368C1D0Ev,_ZThn2676_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn4176_N7S7368C1D1Ev,_ZThn2840_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn4176_N7S7368C1D0Ev,_ZThn2840_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn4184_N7S7368C1D1Ev,_ZThn2844_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn4184_N7S7368C1D0Ev,_ZThn2844_N7S7368C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7368C1D1Ev,_ZTv0_n12_N7S7368C1D1Ev)();
extern void ABISELECT(_ZThn4672_N7S7368C1D1Ev,_ZThn3180_N7S7368C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7368C1D0Ev,_ZTv0_n12_N7S7368C1D0Ev)();
extern void ABISELECT(_ZThn4672_N7S7368C1D0Ev,_ZThn3180_N7S7368C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7368C1[] = {
  ABISELECT(4672,3180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&_ZN7S7368C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7368C1D0Ev,
  ABISELECT(3376,2324),
  ABISELECT(-1296,-856),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N7S7368C1D1Ev,_ZThn856_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N7S7368C1D0Ev,_ZThn856_N7S7368C1D0Ev),
  ABISELECT(2024,1388),
  ABISELECT(-2648,-1792),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2648_N7S7368C1D1Ev,_ZThn1792_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2648_N7S7368C1D0Ev,_ZThn1792_N7S7368C1D0Ev),
  ABISELECT(1192,812),
  ABISELECT(-3480,-2368),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3480_N7S7368C1D1Ev,_ZThn2368_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3480_N7S7368C1D0Ev,_ZThn2368_N7S7368C1D0Ev),
  ABISELECT(1184,808),
  ABISELECT(-3488,-2372),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3488_N7S7368C1D1Ev,_ZThn2372_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3488_N7S7368C1D0Ev,_ZThn2372_N7S7368C1D0Ev),
  ABISELECT(880,600),
  ABISELECT(-3792,-2580),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3792_N7S7368C1D1Ev,_ZThn2580_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3792_N7S7368C1D0Ev,_ZThn2580_N7S7368C1D0Ev),
  ABISELECT(728,504),
  ABISELECT(-3944,-2676),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3944_N7S7368C1D1Ev,_ZThn2676_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3944_N7S7368C1D0Ev,_ZThn2676_N7S7368C1D0Ev),
  ABISELECT(496,340),
  ABISELECT(-4176,-2840),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4176_N7S7368C1D1Ev,_ZThn2840_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4176_N7S7368C1D0Ev,_ZThn2840_N7S7368C1D0Ev),
  ABISELECT(488,336),
  ABISELECT(-4184,-2844),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4184_N7S7368C1D1Ev,_ZThn2844_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4184_N7S7368C1D0Ev,_ZThn2844_N7S7368C1D0Ev),
  ABISELECT(-4672,-3180),
  ABISELECT(-4672,-3180),
  (VTBL_ENTRY)&(_ZTI7S7368C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7368C1D1Ev,_ZTv0_n12_N7S7368C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7368C1D0Ev,_ZTv0_n12_N7S7368C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7368C1[];
extern void _ZN7S7368C2D1Ev();
extern void _ZN7S7368C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7368C2__7S7368C1[] = {
  ABISELECT(4672,3180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7368C2[0]),
  (VTBL_ENTRY)&_ZN7S7368C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7368C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7368C2D1Ev,_ZTv0_n12_N7S7368C2D1Ev)();
extern void ABISELECT(_ZThn4672_N7S7368C2D1Ev,_ZThn3180_N7S7368C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7368C2D0Ev,_ZTv0_n12_N7S7368C2D0Ev)();
extern void ABISELECT(_ZThn4672_N7S7368C2D0Ev,_ZThn3180_N7S7368C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__7S7368C2__7S7368C1[] = {
  ABISELECT(-4672,-3180),
  ABISELECT(-4672,-3180),
  (VTBL_ENTRY)&(_ZTI7S7368C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7368C2D1Ev,_ZTv0_n12_N7S7368C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7368C2D0Ev,_ZTv0_n12_N7S7368C2D0Ev),
};
extern void _ZN8S7368C39D1Ev();
extern void _ZN8S7368C39D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C39__7S7368C1[] = {
  ABISELECT(3376,2324),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C39[0]),
  (VTBL_ENTRY)&_ZN8S7368C39D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C39D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C39D1Ev,_ZTv0_n12_N8S7368C39D1Ev)();
extern void ABISELECT(_ZThn3376_N8S7368C39D1Ev,_ZThn2324_N8S7368C39D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C39D0Ev,_ZTv0_n12_N8S7368C39D0Ev)();
extern void ABISELECT(_ZThn3376_N8S7368C39D0Ev,_ZThn2324_N8S7368C39D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C39__7S7368C1[] = {
  ABISELECT(-3376,-2324),
  ABISELECT(-3376,-2324),
  (VTBL_ENTRY)&(_ZTI8S7368C39[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C39D1Ev,_ZTv0_n12_N8S7368C39D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C39D0Ev,_ZTv0_n12_N8S7368C39D0Ev),
};
extern void _ZN8S7368C52D1Ev();
extern void _ZN8S7368C52D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C52__7S7368C1[] = {
  ABISELECT(2024,1388),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C52[0]),
  (VTBL_ENTRY)&_ZN8S7368C52D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C52D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C52D1Ev,_ZTv0_n12_N8S7368C52D1Ev)();
extern void ABISELECT(_ZThn2024_N8S7368C52D1Ev,_ZThn1388_N8S7368C52D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C52D0Ev,_ZTv0_n12_N8S7368C52D0Ev)();
extern void ABISELECT(_ZThn2024_N8S7368C52D0Ev,_ZThn1388_N8S7368C52D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C52__7S7368C1[] = {
  ABISELECT(-2024,-1388),
  ABISELECT(-2024,-1388),
  (VTBL_ENTRY)&(_ZTI8S7368C52[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C52D1Ev,_ZTv0_n12_N8S7368C52D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C52D0Ev,_ZTv0_n12_N8S7368C52D0Ev),
};
extern void _ZN8S7368C61D1Ev();
extern void _ZN8S7368C61D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C61__7S7368C1[] = {
  ABISELECT(1192,812),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C61[0]),
  (VTBL_ENTRY)&_ZN8S7368C61D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C61D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C61D1Ev,_ZTv0_n12_N8S7368C61D1Ev)();
extern void ABISELECT(_ZThn1192_N8S7368C61D1Ev,_ZThn812_N8S7368C61D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C61D0Ev,_ZTv0_n12_N8S7368C61D0Ev)();
extern void ABISELECT(_ZThn1192_N8S7368C61D0Ev,_ZThn812_N8S7368C61D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C61__7S7368C1[] = {
  ABISELECT(-1192,-812),
  ABISELECT(-1192,-812),
  (VTBL_ENTRY)&(_ZTI8S7368C61[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C61D1Ev,_ZTv0_n12_N8S7368C61D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C61D0Ev,_ZTv0_n12_N8S7368C61D0Ev),
};
extern void _ZN8S7368C62D1Ev();
extern void _ZN8S7368C62D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C62__7S7368C1[] = {
  ABISELECT(1184,808),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C62[0]),
  (VTBL_ENTRY)&_ZN8S7368C62D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C62D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C62D1Ev,_ZTv0_n12_N8S7368C62D1Ev)();
extern void ABISELECT(_ZThn1184_N8S7368C62D1Ev,_ZThn808_N8S7368C62D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C62D0Ev,_ZTv0_n12_N8S7368C62D0Ev)();
extern void ABISELECT(_ZThn1184_N8S7368C62D0Ev,_ZThn808_N8S7368C62D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C62__7S7368C1[] = {
  ABISELECT(-1184,-808),
  ABISELECT(-1184,-808),
  (VTBL_ENTRY)&(_ZTI8S7368C62[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C62D1Ev,_ZTv0_n12_N8S7368C62D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C62D0Ev,_ZTv0_n12_N8S7368C62D0Ev),
};
extern void _ZN8S7368C67D1Ev();
extern void _ZN8S7368C67D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C67__7S7368C1[] = {
  ABISELECT(880,600),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C67[0]),
  (VTBL_ENTRY)&_ZN8S7368C67D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C67D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C67D1Ev,_ZTv0_n12_N8S7368C67D1Ev)();
extern void ABISELECT(_ZThn880_N8S7368C67D1Ev,_ZThn600_N8S7368C67D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C67D0Ev,_ZTv0_n12_N8S7368C67D0Ev)();
extern void ABISELECT(_ZThn880_N8S7368C67D0Ev,_ZThn600_N8S7368C67D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C67__7S7368C1[] = {
  ABISELECT(-880,-600),
  ABISELECT(-880,-600),
  (VTBL_ENTRY)&(_ZTI8S7368C67[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C67D1Ev,_ZTv0_n12_N8S7368C67D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C67D0Ev,_ZTv0_n12_N8S7368C67D0Ev),
};
extern void _ZN8S7368C74D1Ev();
extern void _ZN8S7368C74D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C74__7S7368C1[] = {
  ABISELECT(728,504),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C74[0]),
  (VTBL_ENTRY)&_ZN8S7368C74D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C74D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C74D1Ev,_ZTv0_n12_N8S7368C74D1Ev)();
extern void ABISELECT(_ZThn728_N8S7368C74D1Ev,_ZThn504_N8S7368C74D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C74D0Ev,_ZTv0_n12_N8S7368C74D0Ev)();
extern void ABISELECT(_ZThn728_N8S7368C74D0Ev,_ZThn504_N8S7368C74D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C74__7S7368C1[] = {
  ABISELECT(-728,-504),
  ABISELECT(-728,-504),
  (VTBL_ENTRY)&(_ZTI8S7368C74[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C74D1Ev,_ZTv0_n12_N8S7368C74D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C74D0Ev,_ZTv0_n12_N8S7368C74D0Ev),
};
extern void _ZN8S7368C75D1Ev();
extern void _ZN8S7368C75D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C75__7S7368C1[] = {
  ABISELECT(496,340),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C75[0]),
  (VTBL_ENTRY)&_ZN8S7368C75D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C75D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C75D1Ev,_ZTv0_n12_N8S7368C75D1Ev)();
extern void ABISELECT(_ZThn496_N8S7368C75D1Ev,_ZThn340_N8S7368C75D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C75D0Ev,_ZTv0_n12_N8S7368C75D0Ev)();
extern void ABISELECT(_ZThn496_N8S7368C75D0Ev,_ZThn340_N8S7368C75D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C75__7S7368C1[] = {
  ABISELECT(-496,-340),
  ABISELECT(-496,-340),
  (VTBL_ENTRY)&(_ZTI8S7368C75[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C75D1Ev,_ZTv0_n12_N8S7368C75D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C75D0Ev,_ZTv0_n12_N8S7368C75D0Ev),
};
extern void _ZN8S7368C76D1Ev();
extern void _ZN8S7368C76D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7368C76__7S7368C1[] = {
  ABISELECT(488,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S7368C76[0]),
  (VTBL_ENTRY)&_ZN8S7368C76D1Ev,
  (VTBL_ENTRY)&_ZN8S7368C76D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7368C76D1Ev,_ZTv0_n12_N8S7368C76D1Ev)();
extern void ABISELECT(_ZThn488_N8S7368C76D1Ev,_ZThn336_N8S7368C76D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7368C76D0Ev,_ZTv0_n12_N8S7368C76D0Ev)();
extern void ABISELECT(_ZThn488_N8S7368C76D0Ev,_ZThn336_N8S7368C76D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C3__8S7368C76__7S7368C1[] = {
  ABISELECT(-488,-336),
  ABISELECT(-488,-336),
  (VTBL_ENTRY)&(_ZTI8S7368C76[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C76D1Ev,_ZTv0_n12_N8S7368C76D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7368C76D0Ev,_ZTv0_n12_N8S7368C76D0Ev),
};
static  VTT_ENTRY vtt_S7368C1[] = {
  {&(_ZTV7S7368C1[3]),  3,50},
  {&(_tg__ZTV7S7368C2__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__7S7368C2__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C39__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C39__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C52__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C52__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C61__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C61__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C62__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C62__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C67__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C67__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C74__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C74__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C75__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C75__7S7368C1[3]),  3,5},
  {&(_tg__ZTV8S7368C76__7S7368C1[3]),  3,5},
  {&(_tg__ZTV7S7368C3__8S7368C76__7S7368C1[3]),  3,5},
  {&(_ZTV7S7368C1[48]),  48,50},
  {&(_ZTV7S7368C1[8]),  8,50},
  {&(_ZTV7S7368C1[13]),  13,50},
  {&(_ZTV7S7368C1[18]),  18,50},
  {&(_ZTV7S7368C1[23]),  23,50},
  {&(_ZTV7S7368C1[28]),  28,50},
  {&(_ZTV7S7368C1[33]),  33,50},
  {&(_ZTV7S7368C1[38]),  38,50},
  {&(_ZTV7S7368C1[43]),  43,50},
};
extern VTBL_ENTRY _ZTI7S7368C1[];
extern  VTBL_ENTRY _ZTV7S7368C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7368C1[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C76D0Ev,_ZTv0_n12_N8S7368C76D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S7368C76D0Ev,_ZThn336_N8S7368C76D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C76D1Ev,_ZTv0_n12_N8S7368C76D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S7368C76D1Ev,_ZThn336_N8S7368C76D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C75D0Ev,_ZTv0_n12_N8S7368C75D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S7368C75D0Ev,_ZThn340_N8S7368C75D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C75D1Ev,_ZTv0_n12_N8S7368C75D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S7368C75D1Ev,_ZThn340_N8S7368C75D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C74D0Ev,_ZTv0_n12_N8S7368C74D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S7368C74D0Ev,_ZThn504_N8S7368C74D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C74D1Ev,_ZTv0_n12_N8S7368C74D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S7368C74D1Ev,_ZThn504_N8S7368C74D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C67D0Ev,_ZTv0_n12_N8S7368C67D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S7368C67D0Ev,_ZThn600_N8S7368C67D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C67D1Ev,_ZTv0_n12_N8S7368C67D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S7368C67D1Ev,_ZThn600_N8S7368C67D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C62D0Ev,_ZTv0_n12_N8S7368C62D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N8S7368C62D0Ev,_ZThn808_N8S7368C62D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C62D1Ev,_ZTv0_n12_N8S7368C62D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1184_N8S7368C62D1Ev,_ZThn808_N8S7368C62D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C61D0Ev,_ZTv0_n12_N8S7368C61D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1192_N8S7368C61D0Ev,_ZThn812_N8S7368C61D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C61D1Ev,_ZTv0_n12_N8S7368C61D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1192_N8S7368C61D1Ev,_ZThn812_N8S7368C61D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C52D0Ev,_ZTv0_n12_N8S7368C52D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N8S7368C52D0Ev,_ZThn1388_N8S7368C52D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C52D1Ev,_ZTv0_n12_N8S7368C52D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N8S7368C52D1Ev,_ZThn1388_N8S7368C52D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C39D0Ev,_ZTv0_n12_N8S7368C39D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3376_N8S7368C39D0Ev,_ZThn2324_N8S7368C39D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7368C39D1Ev,_ZTv0_n12_N8S7368C39D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3376_N8S7368C39D1Ev,_ZThn2324_N8S7368C39D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7368C2D0Ev,_ZTv0_n12_N7S7368C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N7S7368C2D0Ev,_ZThn3180_N7S7368C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7368C2D1Ev,_ZTv0_n12_N7S7368C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N7S7368C2D1Ev,_ZThn3180_N7S7368C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7368C1D0Ev,_ZTv0_n12_N7S7368C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N7S7368C1D0Ev,_ZThn3180_N7S7368C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7368C1D1Ev,_ZTv0_n12_N7S7368C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N7S7368C1D1Ev,_ZThn3180_N7S7368C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7368C1 = {  "S7368C1", // class name
  bases_S7368C1, 11,
  &(vtc_S7368C1[0]), // expected_vtbl_contents
  &(vtt_S7368C1[0]), // expected_vtt_contents
  ABISELECT(5168,3512), // object size
  NSPAIRA(_ZTI7S7368C1),ABISELECT(168,88), //typeinfo_var
  NSPAIRA(_ZTV7S7368C1),50, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7368C1),28, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10256C2_nt  {
  virtual  ~S10256C2_nt(); // _ZN11S10256C2_ntD1Ev
  virtual void  v81(); // _ZN11S10256C2_nt3v81Ev
  virtual void  v82(); // _ZN11S10256C2_nt3v82Ev
  virtual void  v83(); // _ZN11S10256C2_nt3v83Ev
  virtual void  v84(); // _ZN11S10256C2_nt3v84Ev
  virtual void  v85(); // _ZN11S10256C2_nt3v85Ev
  virtual void  v86(); // _ZN11S10256C2_nt3v86Ev
  virtual void  v87(); // _ZN11S10256C2_nt3v87Ev
  virtual void  v88(); // _ZN11S10256C2_nt3v88Ev
  virtual void  v89(); // _ZN11S10256C2_nt3v89Ev
  virtual void  v90(); // _ZN11S10256C2_nt3v90Ev
  virtual void  v91(); // _ZN11S10256C2_nt3v91Ev
  virtual void  v92(); // _ZN11S10256C2_nt3v92Ev
  virtual void  v93(); // _ZN11S10256C2_nt3v93Ev
  virtual void  v94(); // _ZN11S10256C2_nt3v94Ev
  virtual void  v95(); // _ZN11S10256C2_nt3v95Ev
  virtual void  v96(); // _ZN11S10256C2_nt3v96Ev
  virtual void  v97(); // _ZN11S10256C2_nt3v97Ev
  virtual void  v98(); // _ZN11S10256C2_nt3v98Ev
  virtual void  v99(); // _ZN11S10256C2_nt3v99Ev
  virtual void  v100(); // _ZN11S10256C2_nt4v100Ev
  virtual void  v101(); // _ZN11S10256C2_nt4v101Ev
  virtual void  v102(); // _ZN11S10256C2_nt4v102Ev
  virtual void  v103(); // _ZN11S10256C2_nt4v103Ev
  virtual void  v104(); // _ZN11S10256C2_nt4v104Ev
  virtual void  v105(); // _ZN11S10256C2_nt4v105Ev
  virtual void  v106(); // _ZN11S10256C2_nt4v106Ev
  virtual void  v107(); // _ZN11S10256C2_nt4v107Ev
  virtual void  v108(); // _ZN11S10256C2_nt4v108Ev
  virtual void  v109(); // _ZN11S10256C2_nt4v109Ev
  virtual void  v110(); // _ZN11S10256C2_nt4v110Ev
  virtual void  v111(); // _ZN11S10256C2_nt4v111Ev
  virtual void  v112(); // _ZN11S10256C2_nt4v112Ev
  virtual void  v113(); // _ZN11S10256C2_nt4v113Ev
  virtual void  v114(); // _ZN11S10256C2_nt4v114Ev
  virtual void  v115(); // _ZN11S10256C2_nt4v115Ev
  virtual void  v116(); // _ZN11S10256C2_nt4v116Ev
  virtual void  v117(); // _ZN11S10256C2_nt4v117Ev
  virtual void  v118(); // _ZN11S10256C2_nt4v118Ev
  virtual void  v119(); // _ZN11S10256C2_nt4v119Ev
  virtual void  v120(); // _ZN11S10256C2_nt4v120Ev
  virtual void  v121(); // _ZN11S10256C2_nt4v121Ev
  virtual void  v122(); // _ZN11S10256C2_nt4v122Ev
  virtual void  v123(); // _ZN11S10256C2_nt4v123Ev
  virtual void  v124(); // _ZN11S10256C2_nt4v124Ev
  virtual void  v125(); // _ZN11S10256C2_nt4v125Ev
  virtual void  v126(); // _ZN11S10256C2_nt4v126Ev
  virtual void  v127(); // _ZN11S10256C2_nt4v127Ev
  virtual void  v128(); // _ZN11S10256C2_nt4v128Ev
  virtual void  v129(); // _ZN11S10256C2_nt4v129Ev
  virtual void  v130(); // _ZN11S10256C2_nt4v130Ev
  virtual void  v131(); // _ZN11S10256C2_nt4v131Ev
  virtual void  v132(); // _ZN11S10256C2_nt4v132Ev
  virtual void  v133(); // _ZN11S10256C2_nt4v133Ev
  virtual void  v134(); // _ZN11S10256C2_nt4v134Ev
  virtual void  v135(); // _ZN11S10256C2_nt4v135Ev
  virtual void  v136(); // _ZN11S10256C2_nt4v136Ev
  virtual void  v137(); // _ZN11S10256C2_nt4v137Ev
  virtual void  v138(); // _ZN11S10256C2_nt4v138Ev
  virtual void  v139(); // _ZN11S10256C2_nt4v139Ev
  virtual void  v140(); // _ZN11S10256C2_nt4v140Ev
  virtual void  v141(); // _ZN11S10256C2_nt4v141Ev
  virtual void  v142(); // _ZN11S10256C2_nt4v142Ev
  virtual void  v143(); // _ZN11S10256C2_nt4v143Ev
  virtual void  v144(); // _ZN11S10256C2_nt4v144Ev
  virtual void  v145(); // _ZN11S10256C2_nt4v145Ev
  virtual void  v146(); // _ZN11S10256C2_nt4v146Ev
  virtual void  v147(); // _ZN11S10256C2_nt4v147Ev
  virtual void  v148(); // _ZN11S10256C2_nt4v148Ev
  virtual void  v149(); // _ZN11S10256C2_nt4v149Ev
  virtual void  v150(); // _ZN11S10256C2_nt4v150Ev
  virtual void  v151(); // _ZN11S10256C2_nt4v151Ev
  virtual void  v152(); // _ZN11S10256C2_nt4v152Ev
  virtual void  v153(); // _ZN11S10256C2_nt4v153Ev
  virtual void  v154(); // _ZN11S10256C2_nt4v154Ev
  virtual void  v155(); // _ZN11S10256C2_nt4v155Ev
  virtual void  v156(); // _ZN11S10256C2_nt4v156Ev
  virtual void  v157(); // _ZN11S10256C2_nt4v157Ev
  virtual void  v158(); // _ZN11S10256C2_nt4v158Ev
  virtual void  v159(); // _ZN11S10256C2_nt4v159Ev
  virtual void  v160(); // _ZN11S10256C2_nt4v160Ev
  S10256C2_nt(); // tgen
};
//SIG(-1 S10256C2_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 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80}


 S10256C2_nt ::~S10256C2_nt(){ note_dtor("S10256C2_nt", this);}
void  S10256C2_nt ::v81(){vfunc_called(this, "_ZN11S10256C2_nt3v81Ev");}
void  S10256C2_nt ::v82(){vfunc_called(this, "_ZN11S10256C2_nt3v82Ev");}
void  S10256C2_nt ::v83(){vfunc_called(this, "_ZN11S10256C2_nt3v83Ev");}
void  S10256C2_nt ::v84(){vfunc_called(this, "_ZN11S10256C2_nt3v84Ev");}
void  S10256C2_nt ::v85(){vfunc_called(this, "_ZN11S10256C2_nt3v85Ev");}
void  S10256C2_nt ::v86(){vfunc_called(this, "_ZN11S10256C2_nt3v86Ev");}
void  S10256C2_nt ::v87(){vfunc_called(this, "_ZN11S10256C2_nt3v87Ev");}
void  S10256C2_nt ::v88(){vfunc_called(this, "_ZN11S10256C2_nt3v88Ev");}
void  S10256C2_nt ::v89(){vfunc_called(this, "_ZN11S10256C2_nt3v89Ev");}
void  S10256C2_nt ::v90(){vfunc_called(this, "_ZN11S10256C2_nt3v90Ev");}
void  S10256C2_nt ::v91(){vfunc_called(this, "_ZN11S10256C2_nt3v91Ev");}
void  S10256C2_nt ::v92(){vfunc_called(this, "_ZN11S10256C2_nt3v92Ev");}
void  S10256C2_nt ::v93(){vfunc_called(this, "_ZN11S10256C2_nt3v93Ev");}
void  S10256C2_nt ::v94(){vfunc_called(this, "_ZN11S10256C2_nt3v94Ev");}
void  S10256C2_nt ::v95(){vfunc_called(this, "_ZN11S10256C2_nt3v95Ev");}
void  S10256C2_nt ::v96(){vfunc_called(this, "_ZN11S10256C2_nt3v96Ev");}
void  S10256C2_nt ::v97(){vfunc_called(this, "_ZN11S10256C2_nt3v97Ev");}
void  S10256C2_nt ::v98(){vfunc_called(this, "_ZN11S10256C2_nt3v98Ev");}
void  S10256C2_nt ::v99(){vfunc_called(this, "_ZN11S10256C2_nt3v99Ev");}
void  S10256C2_nt ::v100(){vfunc_called(this, "_ZN11S10256C2_nt4v100Ev");}
void  S10256C2_nt ::v101(){vfunc_called(this, "_ZN11S10256C2_nt4v101Ev");}
void  S10256C2_nt ::v102(){vfunc_called(this, "_ZN11S10256C2_nt4v102Ev");}
void  S10256C2_nt ::v103(){vfunc_called(this, "_ZN11S10256C2_nt4v103Ev");}
void  S10256C2_nt ::v104(){vfunc_called(this, "_ZN11S10256C2_nt4v104Ev");}
void  S10256C2_nt ::v105(){vfunc_called(this, "_ZN11S10256C2_nt4v105Ev");}
void  S10256C2_nt ::v106(){vfunc_called(this, "_ZN11S10256C2_nt4v106Ev");}
void  S10256C2_nt ::v107(){vfunc_called(this, "_ZN11S10256C2_nt4v107Ev");}
void  S10256C2_nt ::v108(){vfunc_called(this, "_ZN11S10256C2_nt4v108Ev");}
void  S10256C2_nt ::v109(){vfunc_called(this, "_ZN11S10256C2_nt4v109Ev");}
void  S10256C2_nt ::v110(){vfunc_called(this, "_ZN11S10256C2_nt4v110Ev");}
void  S10256C2_nt ::v111(){vfunc_called(this, "_ZN11S10256C2_nt4v111Ev");}
void  S10256C2_nt ::v112(){vfunc_called(this, "_ZN11S10256C2_nt4v112Ev");}
void  S10256C2_nt ::v113(){vfunc_called(this, "_ZN11S10256C2_nt4v113Ev");}
void  S10256C2_nt ::v114(){vfunc_called(this, "_ZN11S10256C2_nt4v114Ev");}
void  S10256C2_nt ::v115(){vfunc_called(this, "_ZN11S10256C2_nt4v115Ev");}
void  S10256C2_nt ::v116(){vfunc_called(this, "_ZN11S10256C2_nt4v116Ev");}
void  S10256C2_nt ::v117(){vfunc_called(this, "_ZN11S10256C2_nt4v117Ev");}
void  S10256C2_nt ::v118(){vfunc_called(this, "_ZN11S10256C2_nt4v118Ev");}
void  S10256C2_nt ::v119(){vfunc_called(this, "_ZN11S10256C2_nt4v119Ev");}
void  S10256C2_nt ::v120(){vfunc_called(this, "_ZN11S10256C2_nt4v120Ev");}
void  S10256C2_nt ::v121(){vfunc_called(this, "_ZN11S10256C2_nt4v121Ev");}
void  S10256C2_nt ::v122(){vfunc_called(this, "_ZN11S10256C2_nt4v122Ev");}
void  S10256C2_nt ::v123(){vfunc_called(this, "_ZN11S10256C2_nt4v123Ev");}
void  S10256C2_nt ::v124(){vfunc_called(this, "_ZN11S10256C2_nt4v124Ev");}
void  S10256C2_nt ::v125(){vfunc_called(this, "_ZN11S10256C2_nt4v125Ev");}
void  S10256C2_nt ::v126(){vfunc_called(this, "_ZN11S10256C2_nt4v126Ev");}
void  S10256C2_nt ::v127(){vfunc_called(this, "_ZN11S10256C2_nt4v127Ev");}
void  S10256C2_nt ::v128(){vfunc_called(this, "_ZN11S10256C2_nt4v128Ev");}
void  S10256C2_nt ::v129(){vfunc_called(this, "_ZN11S10256C2_nt4v129Ev");}
void  S10256C2_nt ::v130(){vfunc_called(this, "_ZN11S10256C2_nt4v130Ev");}
void  S10256C2_nt ::v131(){vfunc_called(this, "_ZN11S10256C2_nt4v131Ev");}
void  S10256C2_nt ::v132(){vfunc_called(this, "_ZN11S10256C2_nt4v132Ev");}
void  S10256C2_nt ::v133(){vfunc_called(this, "_ZN11S10256C2_nt4v133Ev");}
void  S10256C2_nt ::v134(){vfunc_called(this, "_ZN11S10256C2_nt4v134Ev");}
void  S10256C2_nt ::v135(){vfunc_called(this, "_ZN11S10256C2_nt4v135Ev");}
void  S10256C2_nt ::v136(){vfunc_called(this, "_ZN11S10256C2_nt4v136Ev");}
void  S10256C2_nt ::v137(){vfunc_called(this, "_ZN11S10256C2_nt4v137Ev");}
void  S10256C2_nt ::v138(){vfunc_called(this, "_ZN11S10256C2_nt4v138Ev");}
void  S10256C2_nt ::v139(){vfunc_called(this, "_ZN11S10256C2_nt4v139Ev");}
void  S10256C2_nt ::v140(){vfunc_called(this, "_ZN11S10256C2_nt4v140Ev");}
void  S10256C2_nt ::v141(){vfunc_called(this, "_ZN11S10256C2_nt4v141Ev");}
void  S10256C2_nt ::v142(){vfunc_called(this, "_ZN11S10256C2_nt4v142Ev");}
void  S10256C2_nt ::v143(){vfunc_called(this, "_ZN11S10256C2_nt4v143Ev");}
void  S10256C2_nt ::v144(){vfunc_called(this, "_ZN11S10256C2_nt4v144Ev");}
void  S10256C2_nt ::v145(){vfunc_called(this, "_ZN11S10256C2_nt4v145Ev");}
void  S10256C2_nt ::v146(){vfunc_called(this, "_ZN11S10256C2_nt4v146Ev");}
void  S10256C2_nt ::v147(){vfunc_called(this, "_ZN11S10256C2_nt4v147Ev");}
void  S10256C2_nt ::v148(){vfunc_called(this, "_ZN11S10256C2_nt4v148Ev");}
void  S10256C2_nt ::v149(){vfunc_called(this, "_ZN11S10256C2_nt4v149Ev");}
void  S10256C2_nt ::v150(){vfunc_called(this, "_ZN11S10256C2_nt4v150Ev");}
void  S10256C2_nt ::v151(){vfunc_called(this, "_ZN11S10256C2_nt4v151Ev");}
void  S10256C2_nt ::v152(){vfunc_called(this, "_ZN11S10256C2_nt4v152Ev");}
void  S10256C2_nt ::v153(){vfunc_called(this, "_ZN11S10256C2_nt4v153Ev");}
void  S10256C2_nt ::v154(){vfunc_called(this, "_ZN11S10256C2_nt4v154Ev");}
void  S10256C2_nt ::v155(){vfunc_called(this, "_ZN11S10256C2_nt4v155Ev");}
void  S10256C2_nt ::v156(){vfunc_called(this, "_ZN11S10256C2_nt4v156Ev");}
void  S10256C2_nt ::v157(){vfunc_called(this, "_ZN11S10256C2_nt4v157Ev");}
void  S10256C2_nt ::v158(){vfunc_called(this, "_ZN11S10256C2_nt4v158Ev");}
void  S10256C2_nt ::v159(){vfunc_called(this, "_ZN11S10256C2_nt4v159Ev");}
void  S10256C2_nt ::v160(){vfunc_called(this, "_ZN11S10256C2_nt4v160Ev");}
S10256C2_nt ::S10256C2_nt(){ note_ctor("S10256C2_nt", this);} // tgen

//skip512 S10256C2_nt

#else // __cplusplus

extern void _ZN11S10256C2_ntC1Ev();
extern void _ZN11S10256C2_ntD1Ev();
Name_Map name_map_S10256C2_nt[] = {
  NSPAIR(_ZN11S10256C2_ntC1Ev),
  NSPAIR(_ZN11S10256C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10256C2_nt[];
extern void _ZN11S10256C2_ntD1Ev();
extern void _ZN11S10256C2_ntD0Ev();
extern void _ZN11S10256C2_nt3v81Ev();
extern void _ZN11S10256C2_nt3v82Ev();
extern void _ZN11S10256C2_nt3v83Ev();
extern void _ZN11S10256C2_nt3v84Ev();
extern void _ZN11S10256C2_nt3v85Ev();
extern void _ZN11S10256C2_nt3v86Ev();
extern void _ZN11S10256C2_nt3v87Ev();
extern void _ZN11S10256C2_nt3v88Ev();
extern void _ZN11S10256C2_nt3v89Ev();
extern void _ZN11S10256C2_nt3v90Ev();
extern void _ZN11S10256C2_nt3v91Ev();
extern void _ZN11S10256C2_nt3v92Ev();
extern void _ZN11S10256C2_nt3v93Ev();
extern void _ZN11S10256C2_nt3v94Ev();
extern void _ZN11S10256C2_nt3v95Ev();
extern void _ZN11S10256C2_nt3v96Ev();
extern void _ZN11S10256C2_nt3v97Ev();
extern void _ZN11S10256C2_nt3v98Ev();
extern void _ZN11S10256C2_nt3v99Ev();
extern void _ZN11S10256C2_nt4v100Ev();
extern void _ZN11S10256C2_nt4v101Ev();
extern void _ZN11S10256C2_nt4v102Ev();
extern void _ZN11S10256C2_nt4v103Ev();
extern void _ZN11S10256C2_nt4v104Ev();
extern void _ZN11S10256C2_nt4v105Ev();
extern void _ZN11S10256C2_nt4v106Ev();
extern void _ZN11S10256C2_nt4v107Ev();
extern void _ZN11S10256C2_nt4v108Ev();
extern void _ZN11S10256C2_nt4v109Ev();
extern void _ZN11S10256C2_nt4v110Ev();
extern void _ZN11S10256C2_nt4v111Ev();
extern void _ZN11S10256C2_nt4v112Ev();
extern void _ZN11S10256C2_nt4v113Ev();
extern void _ZN11S10256C2_nt4v114Ev();
extern void _ZN11S10256C2_nt4v115Ev();
extern void _ZN11S10256C2_nt4v116Ev();
extern void _ZN11S10256C2_nt4v117Ev();
extern void _ZN11S10256C2_nt4v118Ev();
extern void _ZN11S10256C2_nt4v119Ev();
extern void _ZN11S10256C2_nt4v120Ev();
extern void _ZN11S10256C2_nt4v121Ev();
extern void _ZN11S10256C2_nt4v122Ev();
extern void _ZN11S10256C2_nt4v123Ev();
extern void _ZN11S10256C2_nt4v124Ev();
extern void _ZN11S10256C2_nt4v125Ev();
extern void _ZN11S10256C2_nt4v126Ev();
extern void _ZN11S10256C2_nt4v127Ev();
extern void _ZN11S10256C2_nt4v128Ev();
extern void _ZN11S10256C2_nt4v129Ev();
extern void _ZN11S10256C2_nt4v130Ev();
extern void _ZN11S10256C2_nt4v131Ev();
extern void _ZN11S10256C2_nt4v132Ev();
extern void _ZN11S10256C2_nt4v133Ev();
extern void _ZN11S10256C2_nt4v134Ev();
extern void _ZN11S10256C2_nt4v135Ev();
extern void _ZN11S10256C2_nt4v136Ev();
extern void _ZN11S10256C2_nt4v137Ev();
extern void _ZN11S10256C2_nt4v138Ev();
extern void _ZN11S10256C2_nt4v139Ev();
extern void _ZN11S10256C2_nt4v140Ev();
extern void _ZN11S10256C2_nt4v141Ev();
extern void _ZN11S10256C2_nt4v142Ev();
extern void _ZN11S10256C2_nt4v143Ev();
extern void _ZN11S10256C2_nt4v144Ev();
extern void _ZN11S10256C2_nt4v145Ev();
extern void _ZN11S10256C2_nt4v146Ev();
extern void _ZN11S10256C2_nt4v147Ev();
extern void _ZN11S10256C2_nt4v148Ev();
extern void _ZN11S10256C2_nt4v149Ev();
extern void _ZN11S10256C2_nt4v150Ev();
extern void _ZN11S10256C2_nt4v151Ev();
extern void _ZN11S10256C2_nt4v152Ev();
extern void _ZN11S10256C2_nt4v153Ev();
extern void _ZN11S10256C2_nt4v154Ev();
extern void _ZN11S10256C2_nt4v155Ev();
extern void _ZN11S10256C2_nt4v156Ev();
extern void _ZN11S10256C2_nt4v157Ev();
extern void _ZN11S10256C2_nt4v158Ev();
extern void _ZN11S10256C2_nt4v159Ev();
extern void _ZN11S10256C2_nt4v160Ev();
static  VTBL_ENTRY vtc_S10256C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10256C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10256C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v160Ev,
};
extern VTBL_ENTRY _ZTI11S10256C2_nt[];
VTBL_ENTRY *P__ZTI11S10256C2_nt = _ZTI11S10256C2_nt; 
extern  VTBL_ENTRY _ZTV11S10256C2_nt[];
Class_Descriptor cd_S10256C2_nt = {  "S10256C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10256C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10256C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10256C2_nt),84, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10256C3_nt  {
  void *s10256c3f0;
  int s10256c3f1;
  ::S7368C78 s10256c3f2;
  ::S7368C51 s10256c3f3;
  void  mf10256c3(); // _ZN11S10256C3_nt9mf10256c3Ev
};
//SIG(-1 S10256C3_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S10256C3_nt ::mf10256c3(){}

//skip512 S10256C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S10256C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10256C6_nt  {
  ::S10256C7_nt s10256c6f0;
  void  mf10256c6(); // _ZN11S10256C6_nt9mf10256c6Ev
};
//SIG(-1 S10256C6_nt) C1{ m FC2{ Fl[4]}}


void  S10256C6_nt ::mf10256c6(){}

//skip512 S10256C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10256C12_nt  {
  int s10256c12f0[4];
  void *s10256c12f1;
  char s10256c12f2;
  int s10256c12f3[2];
  void *s10256c12f4[2];
  void  mf10256c12(); // _ZN12S10256C12_nt10mf10256c12Ev
};
//SIG(-1 S10256C12_nt) C1{ m Fi[4] Fp Fc Fi[2] Fp[2]}


void  S10256C12_nt ::mf10256c12(){}

//skip512 S10256C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10256C13_nt  {
  int s10256c13f0;
};
//SIG(-1 S10256C13_nt) C1{ Fi}



//skip512 S10256C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10256C11  {
  ::S10256C12_nt s10256c11f0;
  int s10256c11f1[5];
  __tsi64 s10256c11f2[2];
  ::S10256C13_nt s10256c11f3;
  int s10256c11f4;
  char s10256c11f5;
  int s10256c11f6;
  char s10256c11f7;
  void  mf10256c11(); // _ZN9S10256C1110mf10256c11Ev
};
//SIG(-1 S10256C11) C1{ m FC2{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC3{ Fi} Fi Fc Fi Fc}


void  S10256C11 ::mf10256c11(){}

static void Test_S10256C11()
{
  {
    init_simple_test("S10256C11");
    S10256C11 lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S10256C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10256C11)");
    check_field_offset(lv, s10256c11f0, 0, "S10256C11.s10256c11f0");
    check_field_offset(lv, s10256c11f1, ABISELECT(56,40), "S10256C11.s10256c11f1");
    check_field_offset(lv, s10256c11f2, ABISELECT(80,60), "S10256C11.s10256c11f2");
    check_field_offset(lv, s10256c11f3, ABISELECT(96,76), "S10256C11.s10256c11f3");
    check_field_offset(lv, s10256c11f4, ABISELECT(100,80), "S10256C11.s10256c11f4");
    check_field_offset(lv, s10256c11f5, ABISELECT(104,84), "S10256C11.s10256c11f5");
    check_field_offset(lv, s10256c11f6, ABISELECT(108,88), "S10256C11.s10256c11f6");
    check_field_offset(lv, s10256c11f7, ABISELECT(112,92), "S10256C11.s10256c11f7");
  }
}
static Arrange_To_Call_Me vS10256C11(Test_S10256C11, "S10256C11", ABISELECT(120,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10256C1  : S10256C2_nt {
  void *s10256c1f0;
  ::S10256C3_nt s10256c1f1;
  ::S10256C6_nt s10256c1f2;
  ::S10256C3_nt s10256c1f3;
  ::S10256C6_nt s10256c1f4;
  ::S10256C3_nt s10256c1f5;
  void *s10256c1f6[10];
  ::S10256C3_nt s10256c1f7;
  ::S10256C6_nt s10256c1f8;
  ::S10256C11 s10256c1f9;
  ::S10256C6_nt s10256c1f10;
  ::S10256C3_nt s10256c1f11;
  void *s10256c1f12;
  virtual  ~S10256C1(); // _ZN8S10256C1D1Ev
  virtual void  v1(); // _ZN8S10256C12v1Ev
  virtual void  v2(); // _ZN8S10256C12v2Ev
  virtual void  v3(); // _ZN8S10256C12v3Ev
  virtual void  v4(); // _ZN8S10256C12v4Ev
  virtual void  v5(); // _ZN8S10256C12v5Ev
  virtual void  v6(); // _ZN8S10256C12v6Ev
  virtual void  v7(); // _ZN8S10256C12v7Ev
  virtual void  v8(); // _ZN8S10256C12v8Ev
  virtual void  v9(); // _ZN8S10256C12v9Ev
  virtual void  v10(); // _ZN8S10256C13v10Ev
  virtual void  v11(); // _ZN8S10256C13v11Ev
  virtual void  v12(); // _ZN8S10256C13v12Ev
  virtual void  v13(); // _ZN8S10256C13v13Ev
  virtual void  v14(); // _ZN8S10256C13v14Ev
  virtual void  v15(); // _ZN8S10256C13v15Ev
  virtual void  v16(); // _ZN8S10256C13v16Ev
  virtual void  v17(); // _ZN8S10256C13v17Ev
  virtual void  v18(); // _ZN8S10256C13v18Ev
  virtual void  v19(); // _ZN8S10256C13v19Ev
  virtual void  v20(); // _ZN8S10256C13v20Ev
  virtual void  v21(); // _ZN8S10256C13v21Ev
  virtual void  v22(); // _ZN8S10256C13v22Ev
  virtual void  v23(); // _ZN8S10256C13v23Ev
  virtual void  v24(); // _ZN8S10256C13v24Ev
  virtual void  v25(); // _ZN8S10256C13v25Ev
  virtual void  v26(); // _ZN8S10256C13v26Ev
  virtual void  v27(); // _ZN8S10256C13v27Ev
  virtual void  v28(); // _ZN8S10256C13v28Ev
  virtual void  v29(); // _ZN8S10256C13v29Ev
  virtual void  v30(); // _ZN8S10256C13v30Ev
  virtual void  v31(); // _ZN8S10256C13v31Ev
  virtual void  v32(); // _ZN8S10256C13v32Ev
  virtual void  v33(); // _ZN8S10256C13v33Ev
  virtual void  v34(); // _ZN8S10256C13v34Ev
  virtual void  v35(); // _ZN8S10256C13v35Ev
  virtual void  v36(); // _ZN8S10256C13v36Ev
  virtual void  v37(); // _ZN8S10256C13v37Ev
  virtual void  v38(); // _ZN8S10256C13v38Ev
  virtual void  v39(); // _ZN8S10256C13v39Ev
  virtual void  v40(); // _ZN8S10256C13v40Ev
  virtual void  v41(); // _ZN8S10256C13v41Ev
  virtual void  v42(); // _ZN8S10256C13v42Ev
  virtual void  v43(); // _ZN8S10256C13v43Ev
  virtual void  v44(); // _ZN8S10256C13v44Ev
  virtual void  v45(); // _ZN8S10256C13v45Ev
  virtual void  v46(); // _ZN8S10256C13v46Ev
  virtual void  v47(); // _ZN8S10256C13v47Ev
  virtual void  v48(); // _ZN8S10256C13v48Ev
  virtual void  v49(); // _ZN8S10256C13v49Ev
  virtual void  v50(); // _ZN8S10256C13v50Ev
  virtual void  v51(); // _ZN8S10256C13v51Ev
  virtual void  v52(); // _ZN8S10256C13v52Ev
  virtual void  v53(); // _ZN8S10256C13v53Ev
  virtual void  v54(); // _ZN8S10256C13v54Ev
  virtual void  v55(); // _ZN8S10256C13v55Ev
  virtual void  v56(); // _ZN8S10256C13v56Ev
  virtual void  v57(); // _ZN8S10256C13v57Ev
  virtual void  v58(); // _ZN8S10256C13v58Ev
  virtual void  v59(); // _ZN8S10256C13v59Ev
  virtual void  v60(); // _ZN8S10256C13v60Ev
  virtual void  v61(); // _ZN8S10256C13v61Ev
  virtual void  v62(); // _ZN8S10256C13v62Ev
  virtual void  v63(); // _ZN8S10256C13v63Ev
  virtual void  v64(); // _ZN8S10256C13v64Ev
  virtual void  v65(); // _ZN8S10256C13v65Ev
  virtual void  v66(); // _ZN8S10256C13v66Ev
  virtual void  v67(); // _ZN8S10256C13v67Ev
  virtual void  v68(); // _ZN8S10256C13v68Ev
  virtual void  v69(); // _ZN8S10256C13v69Ev
  virtual void  v70(); // _ZN8S10256C13v70Ev
  virtual void  v71(); // _ZN8S10256C13v71Ev
  virtual void  v72(); // _ZN8S10256C13v72Ev
  virtual void  v73(); // _ZN8S10256C13v73Ev
  virtual void  v74(); // _ZN8S10256C13v74Ev
  virtual void  v75(); // _ZN8S10256C13v75Ev
  virtual void  v76(); // _ZN8S10256C13v76Ev
  virtual void  v77(); // _ZN8S10256C13v77Ev
  virtual void  v78(); // _ZN8S10256C13v78Ev
  virtual void  v79(); // _ZN8S10256C13v79Ev
  virtual void  v80(); // _ZN8S10256C13v80Ev
  S10256C1(); // tgen
};
//SIG(1 S10256C1) C1{ BC2{ vd v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC3{ m Fp Fi FC4{ m} FC5{ m}} FC6{ m FC7{ Fl[4]}} FC3 FC6 FC3 Fp[10] FC3 FC6 FC8{ m FC9{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC10{ Fi} Fi Fc Fi Fc} FC6 FC3 Fp}


 S10256C1 ::~S10256C1(){ note_dtor("S10256C1", this);}
void  S10256C1 ::v1(){vfunc_called(this, "_ZN8S10256C12v1Ev");}
void  S10256C1 ::v2(){vfunc_called(this, "_ZN8S10256C12v2Ev");}
void  S10256C1 ::v3(){vfunc_called(this, "_ZN8S10256C12v3Ev");}
void  S10256C1 ::v4(){vfunc_called(this, "_ZN8S10256C12v4Ev");}
void  S10256C1 ::v5(){vfunc_called(this, "_ZN8S10256C12v5Ev");}
void  S10256C1 ::v6(){vfunc_called(this, "_ZN8S10256C12v6Ev");}
void  S10256C1 ::v7(){vfunc_called(this, "_ZN8S10256C12v7Ev");}
void  S10256C1 ::v8(){vfunc_called(this, "_ZN8S10256C12v8Ev");}
void  S10256C1 ::v9(){vfunc_called(this, "_ZN8S10256C12v9Ev");}
void  S10256C1 ::v10(){vfunc_called(this, "_ZN8S10256C13v10Ev");}
void  S10256C1 ::v11(){vfunc_called(this, "_ZN8S10256C13v11Ev");}
void  S10256C1 ::v12(){vfunc_called(this, "_ZN8S10256C13v12Ev");}
void  S10256C1 ::v13(){vfunc_called(this, "_ZN8S10256C13v13Ev");}
void  S10256C1 ::v14(){vfunc_called(this, "_ZN8S10256C13v14Ev");}
void  S10256C1 ::v15(){vfunc_called(this, "_ZN8S10256C13v15Ev");}
void  S10256C1 ::v16(){vfunc_called(this, "_ZN8S10256C13v16Ev");}
void  S10256C1 ::v17(){vfunc_called(this, "_ZN8S10256C13v17Ev");}
void  S10256C1 ::v18(){vfunc_called(this, "_ZN8S10256C13v18Ev");}
void  S10256C1 ::v19(){vfunc_called(this, "_ZN8S10256C13v19Ev");}
void  S10256C1 ::v20(){vfunc_called(this, "_ZN8S10256C13v20Ev");}
void  S10256C1 ::v21(){vfunc_called(this, "_ZN8S10256C13v21Ev");}
void  S10256C1 ::v22(){vfunc_called(this, "_ZN8S10256C13v22Ev");}
void  S10256C1 ::v23(){vfunc_called(this, "_ZN8S10256C13v23Ev");}
void  S10256C1 ::v24(){vfunc_called(this, "_ZN8S10256C13v24Ev");}
void  S10256C1 ::v25(){vfunc_called(this, "_ZN8S10256C13v25Ev");}
void  S10256C1 ::v26(){vfunc_called(this, "_ZN8S10256C13v26Ev");}
void  S10256C1 ::v27(){vfunc_called(this, "_ZN8S10256C13v27Ev");}
void  S10256C1 ::v28(){vfunc_called(this, "_ZN8S10256C13v28Ev");}
void  S10256C1 ::v29(){vfunc_called(this, "_ZN8S10256C13v29Ev");}
void  S10256C1 ::v30(){vfunc_called(this, "_ZN8S10256C13v30Ev");}
void  S10256C1 ::v31(){vfunc_called(this, "_ZN8S10256C13v31Ev");}
void  S10256C1 ::v32(){vfunc_called(this, "_ZN8S10256C13v32Ev");}
void  S10256C1 ::v33(){vfunc_called(this, "_ZN8S10256C13v33Ev");}
void  S10256C1 ::v34(){vfunc_called(this, "_ZN8S10256C13v34Ev");}
void  S10256C1 ::v35(){vfunc_called(this, "_ZN8S10256C13v35Ev");}
void  S10256C1 ::v36(){vfunc_called(this, "_ZN8S10256C13v36Ev");}
void  S10256C1 ::v37(){vfunc_called(this, "_ZN8S10256C13v37Ev");}
void  S10256C1 ::v38(){vfunc_called(this, "_ZN8S10256C13v38Ev");}
void  S10256C1 ::v39(){vfunc_called(this, "_ZN8S10256C13v39Ev");}
void  S10256C1 ::v40(){vfunc_called(this, "_ZN8S10256C13v40Ev");}
void  S10256C1 ::v41(){vfunc_called(this, "_ZN8S10256C13v41Ev");}
void  S10256C1 ::v42(){vfunc_called(this, "_ZN8S10256C13v42Ev");}
void  S10256C1 ::v43(){vfunc_called(this, "_ZN8S10256C13v43Ev");}
void  S10256C1 ::v44(){vfunc_called(this, "_ZN8S10256C13v44Ev");}
void  S10256C1 ::v45(){vfunc_called(this, "_ZN8S10256C13v45Ev");}
void  S10256C1 ::v46(){vfunc_called(this, "_ZN8S10256C13v46Ev");}
void  S10256C1 ::v47(){vfunc_called(this, "_ZN8S10256C13v47Ev");}
void  S10256C1 ::v48(){vfunc_called(this, "_ZN8S10256C13v48Ev");}
void  S10256C1 ::v49(){vfunc_called(this, "_ZN8S10256C13v49Ev");}
void  S10256C1 ::v50(){vfunc_called(this, "_ZN8S10256C13v50Ev");}
void  S10256C1 ::v51(){vfunc_called(this, "_ZN8S10256C13v51Ev");}
void  S10256C1 ::v52(){vfunc_called(this, "_ZN8S10256C13v52Ev");}
void  S10256C1 ::v53(){vfunc_called(this, "_ZN8S10256C13v53Ev");}
void  S10256C1 ::v54(){vfunc_called(this, "_ZN8S10256C13v54Ev");}
void  S10256C1 ::v55(){vfunc_called(this, "_ZN8S10256C13v55Ev");}
void  S10256C1 ::v56(){vfunc_called(this, "_ZN8S10256C13v56Ev");}
void  S10256C1 ::v57(){vfunc_called(this, "_ZN8S10256C13v57Ev");}
void  S10256C1 ::v58(){vfunc_called(this, "_ZN8S10256C13v58Ev");}
void  S10256C1 ::v59(){vfunc_called(this, "_ZN8S10256C13v59Ev");}
void  S10256C1 ::v60(){vfunc_called(this, "_ZN8S10256C13v60Ev");}
void  S10256C1 ::v61(){vfunc_called(this, "_ZN8S10256C13v61Ev");}
void  S10256C1 ::v62(){vfunc_called(this, "_ZN8S10256C13v62Ev");}
void  S10256C1 ::v63(){vfunc_called(this, "_ZN8S10256C13v63Ev");}
void  S10256C1 ::v64(){vfunc_called(this, "_ZN8S10256C13v64Ev");}
void  S10256C1 ::v65(){vfunc_called(this, "_ZN8S10256C13v65Ev");}
void  S10256C1 ::v66(){vfunc_called(this, "_ZN8S10256C13v66Ev");}
void  S10256C1 ::v67(){vfunc_called(this, "_ZN8S10256C13v67Ev");}
void  S10256C1 ::v68(){vfunc_called(this, "_ZN8S10256C13v68Ev");}
void  S10256C1 ::v69(){vfunc_called(this, "_ZN8S10256C13v69Ev");}
void  S10256C1 ::v70(){vfunc_called(this, "_ZN8S10256C13v70Ev");}
void  S10256C1 ::v71(){vfunc_called(this, "_ZN8S10256C13v71Ev");}
void  S10256C1 ::v72(){vfunc_called(this, "_ZN8S10256C13v72Ev");}
void  S10256C1 ::v73(){vfunc_called(this, "_ZN8S10256C13v73Ev");}
void  S10256C1 ::v74(){vfunc_called(this, "_ZN8S10256C13v74Ev");}
void  S10256C1 ::v75(){vfunc_called(this, "_ZN8S10256C13v75Ev");}
void  S10256C1 ::v76(){vfunc_called(this, "_ZN8S10256C13v76Ev");}
void  S10256C1 ::v77(){vfunc_called(this, "_ZN8S10256C13v77Ev");}
void  S10256C1 ::v78(){vfunc_called(this, "_ZN8S10256C13v78Ev");}
void  S10256C1 ::v79(){vfunc_called(this, "_ZN8S10256C13v79Ev");}
void  S10256C1 ::v80(){vfunc_called(this, "_ZN8S10256C13v80Ev");}
S10256C1 ::S10256C1(){ note_ctor("S10256C1", this);} // tgen

static void Test_S10256C1()
{
  extern Class_Descriptor cd_S10256C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,69)];
    init_test(&cd_S10256C1, buf);
    S10256C1 *dp, &lv = *(dp=new (buf) S10256C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,272), "sizeof(S10256C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10256C1)");
    check_base_class_offset(lv, (S10256C2_nt*), 0, "S10256C1");
    check_field_offset(lv, s10256c1f0, ABISELECT(8,4), "S10256C1.s10256c1f0");
    check_field_offset(lv, s10256c1f1, ABISELECT(16,8), "S10256C1.s10256c1f1");
    check_field_offset(lv, s10256c1f2, ABISELECT(32,20), "S10256C1.s10256c1f2");
    check_field_offset(lv, s10256c1f3, ABISELECT(64,36), "S10256C1.s10256c1f3");
    check_field_offset(lv, s10256c1f4, ABISELECT(80,48), "S10256C1.s10256c1f4");
    check_field_offset(lv, s10256c1f5, ABISELECT(112,64), "S10256C1.s10256c1f5");
    check_field_offset(lv, s10256c1f6, ABISELECT(128,76), "S10256C1.s10256c1f6");
    check_field_offset(lv, s10256c1f7, ABISELECT(208,116), "S10256C1.s10256c1f7");
    check_field_offset(lv, s10256c1f8, ABISELECT(224,128), "S10256C1.s10256c1f8");
    check_field_offset(lv, s10256c1f9, ABISELECT(256,144), "S10256C1.s10256c1f9");
    check_field_offset(lv, s10256c1f10, ABISELECT(376,240), "S10256C1.s10256c1f10");
    check_field_offset(lv, s10256c1f11, ABISELECT(408,256), "S10256C1.s10256c1f11");
    check_field_offset(lv, s10256c1f12, ABISELECT(424,268), "S10256C1.s10256c1f12");
    test_class_info(&lv, &cd_S10256C1);
    dp->~S10256C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10256C1(Test_S10256C1, "S10256C1", ABISELECT(432,272));

#else // __cplusplus

extern void _ZN8S10256C1C1Ev();
extern void _ZN8S10256C1D1Ev();
Name_Map name_map_S10256C1[] = {
  NSPAIR(_ZN8S10256C1C1Ev),
  NSPAIR(_ZN8S10256C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10256C2_nt;
extern VTBL_ENTRY _ZTI11S10256C2_nt[];
extern  VTBL_ENTRY _ZTV11S10256C2_nt[];
static Base_Class bases_S10256C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10256C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10256C1[];
extern void _ZN8S10256C1D1Ev();
extern void _ZN8S10256C1D0Ev();
extern void _ZN11S10256C2_nt3v81Ev();
extern void _ZN11S10256C2_nt3v82Ev();
extern void _ZN11S10256C2_nt3v83Ev();
extern void _ZN11S10256C2_nt3v84Ev();
extern void _ZN11S10256C2_nt3v85Ev();
extern void _ZN11S10256C2_nt3v86Ev();
extern void _ZN11S10256C2_nt3v87Ev();
extern void _ZN11S10256C2_nt3v88Ev();
extern void _ZN11S10256C2_nt3v89Ev();
extern void _ZN11S10256C2_nt3v90Ev();
extern void _ZN11S10256C2_nt3v91Ev();
extern void _ZN11S10256C2_nt3v92Ev();
extern void _ZN11S10256C2_nt3v93Ev();
extern void _ZN11S10256C2_nt3v94Ev();
extern void _ZN11S10256C2_nt3v95Ev();
extern void _ZN11S10256C2_nt3v96Ev();
extern void _ZN11S10256C2_nt3v97Ev();
extern void _ZN11S10256C2_nt3v98Ev();
extern void _ZN11S10256C2_nt3v99Ev();
extern void _ZN11S10256C2_nt4v100Ev();
extern void _ZN11S10256C2_nt4v101Ev();
extern void _ZN11S10256C2_nt4v102Ev();
extern void _ZN11S10256C2_nt4v103Ev();
extern void _ZN11S10256C2_nt4v104Ev();
extern void _ZN11S10256C2_nt4v105Ev();
extern void _ZN11S10256C2_nt4v106Ev();
extern void _ZN11S10256C2_nt4v107Ev();
extern void _ZN11S10256C2_nt4v108Ev();
extern void _ZN11S10256C2_nt4v109Ev();
extern void _ZN11S10256C2_nt4v110Ev();
extern void _ZN11S10256C2_nt4v111Ev();
extern void _ZN11S10256C2_nt4v112Ev();
extern void _ZN11S10256C2_nt4v113Ev();
extern void _ZN11S10256C2_nt4v114Ev();
extern void _ZN11S10256C2_nt4v115Ev();
extern void _ZN11S10256C2_nt4v116Ev();
extern void _ZN11S10256C2_nt4v117Ev();
extern void _ZN11S10256C2_nt4v118Ev();
extern void _ZN11S10256C2_nt4v119Ev();
extern void _ZN11S10256C2_nt4v120Ev();
extern void _ZN11S10256C2_nt4v121Ev();
extern void _ZN11S10256C2_nt4v122Ev();
extern void _ZN11S10256C2_nt4v123Ev();
extern void _ZN11S10256C2_nt4v124Ev();
extern void _ZN11S10256C2_nt4v125Ev();
extern void _ZN11S10256C2_nt4v126Ev();
extern void _ZN11S10256C2_nt4v127Ev();
extern void _ZN11S10256C2_nt4v128Ev();
extern void _ZN11S10256C2_nt4v129Ev();
extern void _ZN11S10256C2_nt4v130Ev();
extern void _ZN11S10256C2_nt4v131Ev();
extern void _ZN11S10256C2_nt4v132Ev();
extern void _ZN11S10256C2_nt4v133Ev();
extern void _ZN11S10256C2_nt4v134Ev();
extern void _ZN11S10256C2_nt4v135Ev();
extern void _ZN11S10256C2_nt4v136Ev();
extern void _ZN11S10256C2_nt4v137Ev();
extern void _ZN11S10256C2_nt4v138Ev();
extern void _ZN11S10256C2_nt4v139Ev();
extern void _ZN11S10256C2_nt4v140Ev();
extern void _ZN11S10256C2_nt4v141Ev();
extern void _ZN11S10256C2_nt4v142Ev();
extern void _ZN11S10256C2_nt4v143Ev();
extern void _ZN11S10256C2_nt4v144Ev();
extern void _ZN11S10256C2_nt4v145Ev();
extern void _ZN11S10256C2_nt4v146Ev();
extern void _ZN11S10256C2_nt4v147Ev();
extern void _ZN11S10256C2_nt4v148Ev();
extern void _ZN11S10256C2_nt4v149Ev();
extern void _ZN11S10256C2_nt4v150Ev();
extern void _ZN11S10256C2_nt4v151Ev();
extern void _ZN11S10256C2_nt4v152Ev();
extern void _ZN11S10256C2_nt4v153Ev();
extern void _ZN11S10256C2_nt4v154Ev();
extern void _ZN11S10256C2_nt4v155Ev();
extern void _ZN11S10256C2_nt4v156Ev();
extern void _ZN11S10256C2_nt4v157Ev();
extern void _ZN11S10256C2_nt4v158Ev();
extern void _ZN11S10256C2_nt4v159Ev();
extern void _ZN11S10256C2_nt4v160Ev();
extern void _ZN8S10256C12v1Ev();
extern void _ZN8S10256C12v2Ev();
extern void _ZN8S10256C12v3Ev();
extern void _ZN8S10256C12v4Ev();
extern void _ZN8S10256C12v5Ev();
extern void _ZN8S10256C12v6Ev();
extern void _ZN8S10256C12v7Ev();
extern void _ZN8S10256C12v8Ev();
extern void _ZN8S10256C12v9Ev();
extern void _ZN8S10256C13v10Ev();
extern void _ZN8S10256C13v11Ev();
extern void _ZN8S10256C13v12Ev();
extern void _ZN8S10256C13v13Ev();
extern void _ZN8S10256C13v14Ev();
extern void _ZN8S10256C13v15Ev();
extern void _ZN8S10256C13v16Ev();
extern void _ZN8S10256C13v17Ev();
extern void _ZN8S10256C13v18Ev();
extern void _ZN8S10256C13v19Ev();
extern void _ZN8S10256C13v20Ev();
extern void _ZN8S10256C13v21Ev();
extern void _ZN8S10256C13v22Ev();
extern void _ZN8S10256C13v23Ev();
extern void _ZN8S10256C13v24Ev();
extern void _ZN8S10256C13v25Ev();
extern void _ZN8S10256C13v26Ev();
extern void _ZN8S10256C13v27Ev();
extern void _ZN8S10256C13v28Ev();
extern void _ZN8S10256C13v29Ev();
extern void _ZN8S10256C13v30Ev();
extern void _ZN8S10256C13v31Ev();
extern void _ZN8S10256C13v32Ev();
extern void _ZN8S10256C13v33Ev();
extern void _ZN8S10256C13v34Ev();
extern void _ZN8S10256C13v35Ev();
extern void _ZN8S10256C13v36Ev();
extern void _ZN8S10256C13v37Ev();
extern void _ZN8S10256C13v38Ev();
extern void _ZN8S10256C13v39Ev();
extern void _ZN8S10256C13v40Ev();
extern void _ZN8S10256C13v41Ev();
extern void _ZN8S10256C13v42Ev();
extern void _ZN8S10256C13v43Ev();
extern void _ZN8S10256C13v44Ev();
extern void _ZN8S10256C13v45Ev();
extern void _ZN8S10256C13v46Ev();
extern void _ZN8S10256C13v47Ev();
extern void _ZN8S10256C13v48Ev();
extern void _ZN8S10256C13v49Ev();
extern void _ZN8S10256C13v50Ev();
extern void _ZN8S10256C13v51Ev();
extern void _ZN8S10256C13v52Ev();
extern void _ZN8S10256C13v53Ev();
extern void _ZN8S10256C13v54Ev();
extern void _ZN8S10256C13v55Ev();
extern void _ZN8S10256C13v56Ev();
extern void _ZN8S10256C13v57Ev();
extern void _ZN8S10256C13v58Ev();
extern void _ZN8S10256C13v59Ev();
extern void _ZN8S10256C13v60Ev();
extern void _ZN8S10256C13v61Ev();
extern void _ZN8S10256C13v62Ev();
extern void _ZN8S10256C13v63Ev();
extern void _ZN8S10256C13v64Ev();
extern void _ZN8S10256C13v65Ev();
extern void _ZN8S10256C13v66Ev();
extern void _ZN8S10256C13v67Ev();
extern void _ZN8S10256C13v68Ev();
extern void _ZN8S10256C13v69Ev();
extern void _ZN8S10256C13v70Ev();
extern void _ZN8S10256C13v71Ev();
extern void _ZN8S10256C13v72Ev();
extern void _ZN8S10256C13v73Ev();
extern void _ZN8S10256C13v74Ev();
extern void _ZN8S10256C13v75Ev();
extern void _ZN8S10256C13v76Ev();
extern void _ZN8S10256C13v77Ev();
extern void _ZN8S10256C13v78Ev();
extern void _ZN8S10256C13v79Ev();
extern void _ZN8S10256C13v80Ev();
static  VTBL_ENTRY vtc_S10256C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10256C1[0]),
  (VTBL_ENTRY)&_ZN8S10256C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10256C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN11S10256C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v8Ev,
  (VTBL_ENTRY)&_ZN8S10256C12v9Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v10Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v11Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v12Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v13Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v14Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v15Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v16Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v17Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v18Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v19Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v20Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v21Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v22Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v23Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v24Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v25Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v26Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v27Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v28Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v29Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v30Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v31Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v32Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v33Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v34Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v35Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v36Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v37Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v38Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v39Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v40Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v41Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v42Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v43Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v44Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v45Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v46Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v47Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v48Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v49Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v50Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v51Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v52Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v53Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v54Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v55Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v56Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v57Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v58Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v59Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v60Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v61Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v62Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v63Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v64Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v65Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v66Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v67Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v68Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v69Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v70Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v71Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v72Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v73Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v74Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v75Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v76Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v77Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v78Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v79Ev,
  (VTBL_ENTRY)&_ZN8S10256C13v80Ev,
};
extern VTBL_ENTRY _ZTI8S10256C1[];
extern  VTBL_ENTRY _ZTV8S10256C1[];
Class_Descriptor cd_S10256C1 = {  "S10256C1", // class name
  bases_S10256C1, 1,
  &(vtc_S10256C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,272), // object size
  NSPAIRA(_ZTI8S10256C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10256C1),164, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S636C5  {
  int s636c5f0;
  __tsi64 s636c5f1;
  void *s636c5f2[4];
  int s636c5f3[2];
  void *s636c5f4;
  ::S499C6_nt s636c5f5;
  void *s636c5f6[2];
  virtual  ~S636C5(); // _ZN6S636C5D1Ev
  virtual void  v5(); // _ZN6S636C52v5Ev
  virtual void  v6(); // _ZN6S636C52v6Ev
  virtual void  v7(); // _ZN6S636C52v7Ev
  virtual void  v8(); // _ZN6S636C52v8Ev
  virtual void  v9(); // _ZN6S636C52v9Ev
  virtual void  v10(); // _ZN6S636C53v10Ev
  virtual void  v11(); // _ZN6S636C53v11Ev
  virtual void  v12(); // _ZN6S636C53v12Ev
  virtual void  v13(); // _ZN6S636C53v13Ev
  virtual void  v14(); // _ZN6S636C53v14Ev
  virtual void  v15(); // _ZN6S636C53v15Ev
  virtual void  v16(); // _ZN6S636C53v16Ev
  virtual void  v17(); // _ZN6S636C53v17Ev
  virtual void  v18(); // _ZN6S636C53v18Ev
  virtual void  v19(); // _ZN6S636C53v19Ev
  virtual void  v20(); // _ZN6S636C53v20Ev
  virtual void  v21(); // _ZN6S636C53v21Ev
  virtual void  v22(); // _ZN6S636C53v22Ev
  virtual void  v23(); // _ZN6S636C53v23Ev
  virtual void  v24(); // _ZN6S636C53v24Ev
  virtual void  v25(); // _ZN6S636C53v25Ev
  virtual void  v26(); // _ZN6S636C53v26Ev
  virtual void  v27(); // _ZN6S636C53v27Ev
  virtual void  v28(); // _ZN6S636C53v28Ev
  virtual void  v29(); // _ZN6S636C53v29Ev
  virtual void  v30(); // _ZN6S636C53v30Ev
  virtual void  v31(); // _ZN6S636C53v31Ev
  virtual void  v32(); // _ZN6S636C53v32Ev
  virtual void  v33(); // _ZN6S636C53v33Ev
  virtual void  v34(); // _ZN6S636C53v34Ev
  virtual void  v35(); // _ZN6S636C53v35Ev
  virtual void  v36(); // _ZN6S636C53v36Ev
  virtual void  v37(); // _ZN6S636C53v37Ev
  virtual void  v38(); // _ZN6S636C53v38Ev
  virtual void  v39(); // _ZN6S636C53v39Ev
  virtual void  v40(); // _ZN6S636C53v40Ev
  virtual void  v41(); // _ZN6S636C53v41Ev
  virtual void  v42(); // _ZN6S636C53v42Ev
  virtual void  v43(); // _ZN6S636C53v43Ev
  virtual void  v44(); // _ZN6S636C53v44Ev
  virtual void  v45(); // _ZN6S636C53v45Ev
  virtual void  v46(); // _ZN6S636C53v46Ev
  virtual void  v47(); // _ZN6S636C53v47Ev
  virtual void  v48(); // _ZN6S636C53v48Ev
  virtual void  v49(); // _ZN6S636C53v49Ev
  virtual void  v50(); // _ZN6S636C53v50Ev
  virtual void  v51(); // _ZN6S636C53v51Ev
  virtual void  v52(); // _ZN6S636C53v52Ev
  virtual void  v53(); // _ZN6S636C53v53Ev
  virtual void  v54(); // _ZN6S636C53v54Ev
  virtual void  v55(); // _ZN6S636C53v55Ev
  virtual void  v56(); // _ZN6S636C53v56Ev
  virtual void  v57(); // _ZN6S636C53v57Ev
  virtual void  v58(); // _ZN6S636C53v58Ev
  virtual void  v59(); // _ZN6S636C53v59Ev
  virtual void  v60(); // _ZN6S636C53v60Ev
  virtual void  v61(); // _ZN6S636C53v61Ev
  virtual void  v62(); // _ZN6S636C53v62Ev
  virtual void  v63(); // _ZN6S636C53v63Ev
  virtual void  v64(); // _ZN6S636C53v64Ev
  virtual void  v65(); // _ZN6S636C53v65Ev
  virtual void  v66(); // _ZN6S636C53v66Ev
  virtual void  v67(); // _ZN6S636C53v67Ev
  virtual void  v68(); // _ZN6S636C53v68Ev
  S636C5(); // tgen
};
//SIG(-1 S636C5) 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]}


 S636C5 ::~S636C5(){ note_dtor("S636C5", this);}
void  S636C5 ::v5(){vfunc_called(this, "_ZN6S636C52v5Ev");}
void  S636C5 ::v6(){vfunc_called(this, "_ZN6S636C52v6Ev");}
void  S636C5 ::v7(){vfunc_called(this, "_ZN6S636C52v7Ev");}
void  S636C5 ::v8(){vfunc_called(this, "_ZN6S636C52v8Ev");}
void  S636C5 ::v9(){vfunc_called(this, "_ZN6S636C52v9Ev");}
void  S636C5 ::v10(){vfunc_called(this, "_ZN6S636C53v10Ev");}
void  S636C5 ::v11(){vfunc_called(this, "_ZN6S636C53v11Ev");}
void  S636C5 ::v12(){vfunc_called(this, "_ZN6S636C53v12Ev");}
void  S636C5 ::v13(){vfunc_called(this, "_ZN6S636C53v13Ev");}
void  S636C5 ::v14(){vfunc_called(this, "_ZN6S636C53v14Ev");}
void  S636C5 ::v15(){vfunc_called(this, "_ZN6S636C53v15Ev");}
void  S636C5 ::v16(){vfunc_called(this, "_ZN6S636C53v16Ev");}
void  S636C5 ::v17(){vfunc_called(this, "_ZN6S636C53v17Ev");}
void  S636C5 ::v18(){vfunc_called(this, "_ZN6S636C53v18Ev");}
void  S636C5 ::v19(){vfunc_called(this, "_ZN6S636C53v19Ev");}
void  S636C5 ::v20(){vfunc_called(this, "_ZN6S636C53v20Ev");}
void  S636C5 ::v21(){vfunc_called(this, "_ZN6S636C53v21Ev");}
void  S636C5 ::v22(){vfunc_called(this, "_ZN6S636C53v22Ev");}
void  S636C5 ::v23(){vfunc_called(this, "_ZN6S636C53v23Ev");}
void  S636C5 ::v24(){vfunc_called(this, "_ZN6S636C53v24Ev");}
void  S636C5 ::v25(){vfunc_called(this, "_ZN6S636C53v25Ev");}
void  S636C5 ::v26(){vfunc_called(this, "_ZN6S636C53v26Ev");}
void  S636C5 ::v27(){vfunc_called(this, "_ZN6S636C53v27Ev");}
void  S636C5 ::v28(){vfunc_called(this, "_ZN6S636C53v28Ev");}
void  S636C5 ::v29(){vfunc_called(this, "_ZN6S636C53v29Ev");}
void  S636C5 ::v30(){vfunc_called(this, "_ZN6S636C53v30Ev");}
void  S636C5 ::v31(){vfunc_called(this, "_ZN6S636C53v31Ev");}
void  S636C5 ::v32(){vfunc_called(this, "_ZN6S636C53v32Ev");}
void  S636C5 ::v33(){vfunc_called(this, "_ZN6S636C53v33Ev");}
void  S636C5 ::v34(){vfunc_called(this, "_ZN6S636C53v34Ev");}
void  S636C5 ::v35(){vfunc_called(this, "_ZN6S636C53v35Ev");}
void  S636C5 ::v36(){vfunc_called(this, "_ZN6S636C53v36Ev");}
void  S636C5 ::v37(){vfunc_called(this, "_ZN6S636C53v37Ev");}
void  S636C5 ::v38(){vfunc_called(this, "_ZN6S636C53v38Ev");}
void  S636C5 ::v39(){vfunc_called(this, "_ZN6S636C53v39Ev");}
void  S636C5 ::v40(){vfunc_called(this, "_ZN6S636C53v40Ev");}
void  S636C5 ::v41(){vfunc_called(this, "_ZN6S636C53v41Ev");}
void  S636C5 ::v42(){vfunc_called(this, "_ZN6S636C53v42Ev");}
void  S636C5 ::v43(){vfunc_called(this, "_ZN6S636C53v43Ev");}
void  S636C5 ::v44(){vfunc_called(this, "_ZN6S636C53v44Ev");}
void  S636C5 ::v45(){vfunc_called(this, "_ZN6S636C53v45Ev");}
void  S636C5 ::v46(){vfunc_called(this, "_ZN6S636C53v46Ev");}
void  S636C5 ::v47(){vfunc_called(this, "_ZN6S636C53v47Ev");}
void  S636C5 ::v48(){vfunc_called(this, "_ZN6S636C53v48Ev");}
void  S636C5 ::v49(){vfunc_called(this, "_ZN6S636C53v49Ev");}
void  S636C5 ::v50(){vfunc_called(this, "_ZN6S636C53v50Ev");}
void  S636C5 ::v51(){vfunc_called(this, "_ZN6S636C53v51Ev");}
void  S636C5 ::v52(){vfunc_called(this, "_ZN6S636C53v52Ev");}
void  S636C5 ::v53(){vfunc_called(this, "_ZN6S636C53v53Ev");}
void  S636C5 ::v54(){vfunc_called(this, "_ZN6S636C53v54Ev");}
void  S636C5 ::v55(){vfunc_called(this, "_ZN6S636C53v55Ev");}
void  S636C5 ::v56(){vfunc_called(this, "_ZN6S636C53v56Ev");}
void  S636C5 ::v57(){vfunc_called(this, "_ZN6S636C53v57Ev");}
void  S636C5 ::v58(){vfunc_called(this, "_ZN6S636C53v58Ev");}
void  S636C5 ::v59(){vfunc_called(this, "_ZN6S636C53v59Ev");}
void  S636C5 ::v60(){vfunc_called(this, "_ZN6S636C53v60Ev");}
void  S636C5 ::v61(){vfunc_called(this, "_ZN6S636C53v61Ev");}
void  S636C5 ::v62(){vfunc_called(this, "_ZN6S636C53v62Ev");}
void  S636C5 ::v63(){vfunc_called(this, "_ZN6S636C53v63Ev");}
void  S636C5 ::v64(){vfunc_called(this, "_ZN6S636C53v64Ev");}
void  S636C5 ::v65(){vfunc_called(this, "_ZN6S636C53v65Ev");}
void  S636C5 ::v66(){vfunc_called(this, "_ZN6S636C53v66Ev");}
void  S636C5 ::v67(){vfunc_called(this, "_ZN6S636C53v67Ev");}
void  S636C5 ::v68(){vfunc_called(this, "_ZN6S636C53v68Ev");}
S636C5 ::S636C5(){ note_ctor("S636C5", this);} // tgen

static void Test_S636C5()
{
  extern Class_Descriptor cd_S636C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S636C5, buf);
    S636C5 *dp, &lv = *(dp=new (buf) S636C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S636C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S636C5)");
    check_field_offset(lv, s636c5f0, ABISELECT(8,4), "S636C5.s636c5f0");
    check_field_offset(lv, s636c5f1, ABISELECT(16,8), "S636C5.s636c5f1");
    check_field_offset(lv, s636c5f2, ABISELECT(24,16), "S636C5.s636c5f2");
    check_field_offset(lv, s636c5f3, ABISELECT(56,32), "S636C5.s636c5f3");
    check_field_offset(lv, s636c5f4, ABISELECT(64,40), "S636C5.s636c5f4");
    check_field_offset(lv, s636c5f5, ABISELECT(72,44), "S636C5.s636c5f5");
    check_field_offset(lv, s636c5f6, ABISELECT(80,52), "S636C5.s636c5f6");
    test_class_info(&lv, &cd_S636C5);
    dp->~S636C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS636C5(Test_S636C5, "S636C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S636C5C1Ev();
extern void _ZN6S636C5D1Ev();
Name_Map name_map_S636C5[] = {
  NSPAIR(_ZN6S636C5C1Ev),
  NSPAIR(_ZN6S636C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S636C5[];
extern void _ZN6S636C5D1Ev();
extern void _ZN6S636C5D0Ev();
extern void _ZN6S636C52v5Ev();
extern void _ZN6S636C52v6Ev();
extern void _ZN6S636C52v7Ev();
extern void _ZN6S636C52v8Ev();
extern void _ZN6S636C52v9Ev();
extern void _ZN6S636C53v10Ev();
extern void _ZN6S636C53v11Ev();
extern void _ZN6S636C53v12Ev();
extern void _ZN6S636C53v13Ev();
extern void _ZN6S636C53v14Ev();
extern void _ZN6S636C53v15Ev();
extern void _ZN6S636C53v16Ev();
extern void _ZN6S636C53v17Ev();
extern void _ZN6S636C53v18Ev();
extern void _ZN6S636C53v19Ev();
extern void _ZN6S636C53v20Ev();
extern void _ZN6S636C53v21Ev();
extern void _ZN6S636C53v22Ev();
extern void _ZN6S636C53v23Ev();
extern void _ZN6S636C53v24Ev();
extern void _ZN6S636C53v25Ev();
extern void _ZN6S636C53v26Ev();
extern void _ZN6S636C53v27Ev();
extern void _ZN6S636C53v28Ev();
extern void _ZN6S636C53v29Ev();
extern void _ZN6S636C53v30Ev();
extern void _ZN6S636C53v31Ev();
extern void _ZN6S636C53v32Ev();
extern void _ZN6S636C53v33Ev();
extern void _ZN6S636C53v34Ev();
extern void _ZN6S636C53v35Ev();
extern void _ZN6S636C53v36Ev();
extern void _ZN6S636C53v37Ev();
extern void _ZN6S636C53v38Ev();
extern void _ZN6S636C53v39Ev();
extern void _ZN6S636C53v40Ev();
extern void _ZN6S636C53v41Ev();
extern void _ZN6S636C53v42Ev();
extern void _ZN6S636C53v43Ev();
extern void _ZN6S636C53v44Ev();
extern void _ZN6S636C53v45Ev();
extern void _ZN6S636C53v46Ev();
extern void _ZN6S636C53v47Ev();
extern void _ZN6S636C53v48Ev();
extern void _ZN6S636C53v49Ev();
extern void _ZN6S636C53v50Ev();
extern void _ZN6S636C53v51Ev();
extern void _ZN6S636C53v52Ev();
extern void _ZN6S636C53v53Ev();
extern void _ZN6S636C53v54Ev();
extern void _ZN6S636C53v55Ev();
extern void _ZN6S636C53v56Ev();
extern void _ZN6S636C53v57Ev();
extern void _ZN6S636C53v58Ev();
extern void _ZN6S636C53v59Ev();
extern void _ZN6S636C53v60Ev();
extern void _ZN6S636C53v61Ev();
extern void _ZN6S636C53v62Ev();
extern void _ZN6S636C53v63Ev();
extern void _ZN6S636C53v64Ev();
extern void _ZN6S636C53v65Ev();
extern void _ZN6S636C53v66Ev();
extern void _ZN6S636C53v67Ev();
extern void _ZN6S636C53v68Ev();
static  VTBL_ENTRY vtc_S636C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S636C5[0]),
  (VTBL_ENTRY)&_ZN6S636C5D1Ev,
  (VTBL_ENTRY)&_ZN6S636C5D0Ev,
  (VTBL_ENTRY)&_ZN6S636C52v5Ev,
  (VTBL_ENTRY)&_ZN6S636C52v6Ev,
  (VTBL_ENTRY)&_ZN6S636C52v7Ev,
  (VTBL_ENTRY)&_ZN6S636C52v8Ev,
  (VTBL_ENTRY)&_ZN6S636C52v9Ev,
  (VTBL_ENTRY)&_ZN6S636C53v10Ev,
  (VTBL_ENTRY)&_ZN6S636C53v11Ev,
  (VTBL_ENTRY)&_ZN6S636C53v12Ev,
  (VTBL_ENTRY)&_ZN6S636C53v13Ev,
  (VTBL_ENTRY)&_ZN6S636C53v14Ev,
  (VTBL_ENTRY)&_ZN6S636C53v15Ev,
  (VTBL_ENTRY)&_ZN6S636C53v16Ev,
  (VTBL_ENTRY)&_ZN6S636C53v17Ev,
  (VTBL_ENTRY)&_ZN6S636C53v18Ev,
  (VTBL_ENTRY)&_ZN6S636C53v19Ev,
  (VTBL_ENTRY)&_ZN6S636C53v20Ev,
  (VTBL_ENTRY)&_ZN6S636C53v21Ev,
  (VTBL_ENTRY)&_ZN6S636C53v22Ev,
  (VTBL_ENTRY)&_ZN6S636C53v23Ev,
  (VTBL_ENTRY)&_ZN6S636C53v24Ev,
  (VTBL_ENTRY)&_ZN6S636C53v25Ev,
  (VTBL_ENTRY)&_ZN6S636C53v26Ev,
  (VTBL_ENTRY)&_ZN6S636C53v27Ev,
  (VTBL_ENTRY)&_ZN6S636C53v28Ev,
  (VTBL_ENTRY)&_ZN6S636C53v29Ev,
  (VTBL_ENTRY)&_ZN6S636C53v30Ev,
  (VTBL_ENTRY)&_ZN6S636C53v31Ev,
  (VTBL_ENTRY)&_ZN6S636C53v32Ev,
  (VTBL_ENTRY)&_ZN6S636C53v33Ev,
  (VTBL_ENTRY)&_ZN6S636C53v34Ev,
  (VTBL_ENTRY)&_ZN6S636C53v35Ev,
  (VTBL_ENTRY)&_ZN6S636C53v36Ev,
  (VTBL_ENTRY)&_ZN6S636C53v37Ev,
  (VTBL_ENTRY)&_ZN6S636C53v38Ev,
  (VTBL_ENTRY)&_ZN6S636C53v39Ev,
  (VTBL_ENTRY)&_ZN6S636C53v40Ev,
  (VTBL_ENTRY)&_ZN6S636C53v41Ev,
  (VTBL_ENTRY)&_ZN6S636C53v42Ev,
  (VTBL_ENTRY)&_ZN6S636C53v43Ev,
  (VTBL_ENTRY)&_ZN6S636C53v44Ev,
  (VTBL_ENTRY)&_ZN6S636C53v45Ev,
  (VTBL_ENTRY)&_ZN6S636C53v46Ev,
  (VTBL_ENTRY)&_ZN6S636C53v47Ev,
  (VTBL_ENTRY)&_ZN6S636C53v48Ev,
  (VTBL_ENTRY)&_ZN6S636C53v49Ev,
  (VTBL_ENTRY)&_ZN6S636C53v50Ev,
  (VTBL_ENTRY)&_ZN6S636C53v51Ev,
  (VTBL_ENTRY)&_ZN6S636C53v52Ev,
  (VTBL_ENTRY)&_ZN6S636C53v53Ev,
  (VTBL_ENTRY)&_ZN6S636C53v54Ev,
  (VTBL_ENTRY)&_ZN6S636C53v55Ev,
  (VTBL_ENTRY)&_ZN6S636C53v56Ev,
  (VTBL_ENTRY)&_ZN6S636C53v57Ev,
  (VTBL_ENTRY)&_ZN6S636C53v58Ev,
  (VTBL_ENTRY)&_ZN6S636C53v59Ev,
  (VTBL_ENTRY)&_ZN6S636C53v60Ev,
  (VTBL_ENTRY)&_ZN6S636C53v61Ev,
  (VTBL_ENTRY)&_ZN6S636C53v62Ev,
  (VTBL_ENTRY)&_ZN6S636C53v63Ev,
  (VTBL_ENTRY)&_ZN6S636C53v64Ev,
  (VTBL_ENTRY)&_ZN6S636C53v65Ev,
  (VTBL_ENTRY)&_ZN6S636C53v66Ev,
  (VTBL_ENTRY)&_ZN6S636C53v67Ev,
  (VTBL_ENTRY)&_ZN6S636C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S636C5[];
extern  VTBL_ENTRY _ZTV6S636C5[];
Class_Descriptor cd_S636C5 = {  "S636C5", // class name
  0,0,//no base classes
  &(vtc_S636C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S636C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S636C5),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  S636C4_nt  : S636C5 {
  int s636c4f0[2];
  void *s636c4f1;
  int s636c4f2[2];
  ::S499C37_nt s636c4f3;
  ::S499C37_nt s636c4f4;
  ::S7368C78 s636c4f5;
  ::S499C37_nt s636c4f6;
  unsigned int s636c4f7:1;
  unsigned int s636c4f8:1;
  unsigned int s636c4f9:1;
  unsigned int s636c4f10:1;
  unsigned int s636c4f11:1;
  int s636c4f12[2];
  virtual  ~S636C4_nt(); // _ZN9S636C4_ntD1Ev
  virtual void  v69(); // _ZN9S636C4_nt3v69Ev
  virtual void  v70(); // _ZN9S636C4_nt3v70Ev
  virtual void  v71(); // _ZN9S636C4_nt3v71Ev
  virtual void  v72(); // _ZN9S636C4_nt3v72Ev
  virtual void  v73(); // _ZN9S636C4_nt3v73Ev
  virtual void  v74(); // _ZN9S636C4_nt3v74Ev
  virtual void  v75(); // _ZN9S636C4_nt3v75Ev
  virtual void  v76(); // _ZN9S636C4_nt3v76Ev
  virtual void  v77(); // _ZN9S636C4_nt3v77Ev
  virtual void  v78(); // _ZN9S636C4_nt3v78Ev
  virtual void  v79(); // _ZN9S636C4_nt3v79Ev
  virtual void  v80(); // _ZN9S636C4_nt3v80Ev
  virtual void  v81(); // _ZN9S636C4_nt3v81Ev
  virtual void  v82(); // _ZN9S636C4_nt3v82Ev
  virtual void  v83(); // _ZN9S636C4_nt3v83Ev
  virtual void  v84(); // _ZN9S636C4_nt3v84Ev
  virtual void  v85(); // _ZN9S636C4_nt3v85Ev
  virtual void  v86(); // _ZN9S636C4_nt3v86Ev
  virtual void  v87(); // _ZN9S636C4_nt3v87Ev
  virtual void  v88(); // _ZN9S636C4_nt3v88Ev
  virtual void  v89(); // _ZN9S636C4_nt3v89Ev
  virtual void  v90(); // _ZN9S636C4_nt3v90Ev
  S636C4_nt(); // tgen
};
//SIG(-1 S636C4_nt) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S636C4_nt ::~S636C4_nt(){ note_dtor("S636C4_nt", this);}
void  S636C4_nt ::v69(){vfunc_called(this, "_ZN9S636C4_nt3v69Ev");}
void  S636C4_nt ::v70(){vfunc_called(this, "_ZN9S636C4_nt3v70Ev");}
void  S636C4_nt ::v71(){vfunc_called(this, "_ZN9S636C4_nt3v71Ev");}
void  S636C4_nt ::v72(){vfunc_called(this, "_ZN9S636C4_nt3v72Ev");}
void  S636C4_nt ::v73(){vfunc_called(this, "_ZN9S636C4_nt3v73Ev");}
void  S636C4_nt ::v74(){vfunc_called(this, "_ZN9S636C4_nt3v74Ev");}
void  S636C4_nt ::v75(){vfunc_called(this, "_ZN9S636C4_nt3v75Ev");}
void  S636C4_nt ::v76(){vfunc_called(this, "_ZN9S636C4_nt3v76Ev");}
void  S636C4_nt ::v77(){vfunc_called(this, "_ZN9S636C4_nt3v77Ev");}
void  S636C4_nt ::v78(){vfunc_called(this, "_ZN9S636C4_nt3v78Ev");}
void  S636C4_nt ::v79(){vfunc_called(this, "_ZN9S636C4_nt3v79Ev");}
void  S636C4_nt ::v80(){vfunc_called(this, "_ZN9S636C4_nt3v80Ev");}
void  S636C4_nt ::v81(){vfunc_called(this, "_ZN9S636C4_nt3v81Ev");}
void  S636C4_nt ::v82(){vfunc_called(this, "_ZN9S636C4_nt3v82Ev");}
void  S636C4_nt ::v83(){vfunc_called(this, "_ZN9S636C4_nt3v83Ev");}
void  S636C4_nt ::v84(){vfunc_called(this, "_ZN9S636C4_nt3v84Ev");}
void  S636C4_nt ::v85(){vfunc_called(this, "_ZN9S636C4_nt3v85Ev");}
void  S636C4_nt ::v86(){vfunc_called(this, "_ZN9S636C4_nt3v86Ev");}
void  S636C4_nt ::v87(){vfunc_called(this, "_ZN9S636C4_nt3v87Ev");}
void  S636C4_nt ::v88(){vfunc_called(this, "_ZN9S636C4_nt3v88Ev");}
void  S636C4_nt ::v89(){vfunc_called(this, "_ZN9S636C4_nt3v89Ev");}
void  S636C4_nt ::v90(){vfunc_called(this, "_ZN9S636C4_nt3v90Ev");}
S636C4_nt ::S636C4_nt(){ note_ctor("S636C4_nt", this);} // tgen

//skip512 S636C4_nt

#else // __cplusplus

extern void _ZN9S636C4_ntC1Ev();
extern void _ZN9S636C4_ntD1Ev();
Name_Map name_map_S636C4_nt[] = {
  NSPAIR(_ZN9S636C4_ntC1Ev),
  NSPAIR(_ZN9S636C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S636C5;
extern VTBL_ENTRY _ZTI6S636C5[];
extern  VTBL_ENTRY _ZTV6S636C5[];
static Base_Class bases_S636C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S636C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S636C4_nt[];
extern void _ZN9S636C4_ntD1Ev();
extern void _ZN9S636C4_ntD0Ev();
extern void _ZN6S636C52v5Ev();
extern void _ZN6S636C52v6Ev();
extern void _ZN6S636C52v7Ev();
extern void _ZN6S636C52v8Ev();
extern void _ZN6S636C52v9Ev();
extern void _ZN6S636C53v10Ev();
extern void _ZN6S636C53v11Ev();
extern void _ZN6S636C53v12Ev();
extern void _ZN6S636C53v13Ev();
extern void _ZN6S636C53v14Ev();
extern void _ZN6S636C53v15Ev();
extern void _ZN6S636C53v16Ev();
extern void _ZN6S636C53v17Ev();
extern void _ZN6S636C53v18Ev();
extern void _ZN6S636C53v19Ev();
extern void _ZN6S636C53v20Ev();
extern void _ZN6S636C53v21Ev();
extern void _ZN6S636C53v22Ev();
extern void _ZN6S636C53v23Ev();
extern void _ZN6S636C53v24Ev();
extern void _ZN6S636C53v25Ev();
extern void _ZN6S636C53v26Ev();
extern void _ZN6S636C53v27Ev();
extern void _ZN6S636C53v28Ev();
extern void _ZN6S636C53v29Ev();
extern void _ZN6S636C53v30Ev();
extern void _ZN6S636C53v31Ev();
extern void _ZN6S636C53v32Ev();
extern void _ZN6S636C53v33Ev();
extern void _ZN6S636C53v34Ev();
extern void _ZN6S636C53v35Ev();
extern void _ZN6S636C53v36Ev();
extern void _ZN6S636C53v37Ev();
extern void _ZN6S636C53v38Ev();
extern void _ZN6S636C53v39Ev();
extern void _ZN6S636C53v40Ev();
extern void _ZN6S636C53v41Ev();
extern void _ZN6S636C53v42Ev();
extern void _ZN6S636C53v43Ev();
extern void _ZN6S636C53v44Ev();
extern void _ZN6S636C53v45Ev();
extern void _ZN6S636C53v46Ev();
extern void _ZN6S636C53v47Ev();
extern void _ZN6S636C53v48Ev();
extern void _ZN6S636C53v49Ev();
extern void _ZN6S636C53v50Ev();
extern void _ZN6S636C53v51Ev();
extern void _ZN6S636C53v52Ev();
extern void _ZN6S636C53v53Ev();
extern void _ZN6S636C53v54Ev();
extern void _ZN6S636C53v55Ev();
extern void _ZN6S636C53v56Ev();
extern void _ZN6S636C53v57Ev();
extern void _ZN6S636C53v58Ev();
extern void _ZN6S636C53v59Ev();
extern void _ZN6S636C53v60Ev();
extern void _ZN6S636C53v61Ev();
extern void _ZN6S636C53v62Ev();
extern void _ZN6S636C53v63Ev();
extern void _ZN6S636C53v64Ev();
extern void _ZN6S636C53v65Ev();
extern void _ZN6S636C53v66Ev();
extern void _ZN6S636C53v67Ev();
extern void _ZN6S636C53v68Ev();
extern void _ZN9S636C4_nt3v69Ev();
extern void _ZN9S636C4_nt3v70Ev();
extern void _ZN9S636C4_nt3v71Ev();
extern void _ZN9S636C4_nt3v72Ev();
extern void _ZN9S636C4_nt3v73Ev();
extern void _ZN9S636C4_nt3v74Ev();
extern void _ZN9S636C4_nt3v75Ev();
extern void _ZN9S636C4_nt3v76Ev();
extern void _ZN9S636C4_nt3v77Ev();
extern void _ZN9S636C4_nt3v78Ev();
extern void _ZN9S636C4_nt3v79Ev();
extern void _ZN9S636C4_nt3v80Ev();
extern void _ZN9S636C4_nt3v81Ev();
extern void _ZN9S636C4_nt3v82Ev();
extern void _ZN9S636C4_nt3v83Ev();
extern void _ZN9S636C4_nt3v84Ev();
extern void _ZN9S636C4_nt3v85Ev();
extern void _ZN9S636C4_nt3v86Ev();
extern void _ZN9S636C4_nt3v87Ev();
extern void _ZN9S636C4_nt3v88Ev();
extern void _ZN9S636C4_nt3v89Ev();
extern void _ZN9S636C4_nt3v90Ev();
static  VTBL_ENTRY vtc_S636C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S636C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S636C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S636C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S636C52v5Ev,
  (VTBL_ENTRY)&_ZN6S636C52v6Ev,
  (VTBL_ENTRY)&_ZN6S636C52v7Ev,
  (VTBL_ENTRY)&_ZN6S636C52v8Ev,
  (VTBL_ENTRY)&_ZN6S636C52v9Ev,
  (VTBL_ENTRY)&_ZN6S636C53v10Ev,
  (VTBL_ENTRY)&_ZN6S636C53v11Ev,
  (VTBL_ENTRY)&_ZN6S636C53v12Ev,
  (VTBL_ENTRY)&_ZN6S636C53v13Ev,
  (VTBL_ENTRY)&_ZN6S636C53v14Ev,
  (VTBL_ENTRY)&_ZN6S636C53v15Ev,
  (VTBL_ENTRY)&_ZN6S636C53v16Ev,
  (VTBL_ENTRY)&_ZN6S636C53v17Ev,
  (VTBL_ENTRY)&_ZN6S636C53v18Ev,
  (VTBL_ENTRY)&_ZN6S636C53v19Ev,
  (VTBL_ENTRY)&_ZN6S636C53v20Ev,
  (VTBL_ENTRY)&_ZN6S636C53v21Ev,
  (VTBL_ENTRY)&_ZN6S636C53v22Ev,
  (VTBL_ENTRY)&_ZN6S636C53v23Ev,
  (VTBL_ENTRY)&_ZN6S636C53v24Ev,
  (VTBL_ENTRY)&_ZN6S636C53v25Ev,
  (VTBL_ENTRY)&_ZN6S636C53v26Ev,
  (VTBL_ENTRY)&_ZN6S636C53v27Ev,
  (VTBL_ENTRY)&_ZN6S636C53v28Ev,
  (VTBL_ENTRY)&_ZN6S636C53v29Ev,
  (VTBL_ENTRY)&_ZN6S636C53v30Ev,
  (VTBL_ENTRY)&_ZN6S636C53v31Ev,
  (VTBL_ENTRY)&_ZN6S636C53v32Ev,
  (VTBL_ENTRY)&_ZN6S636C53v33Ev,
  (VTBL_ENTRY)&_ZN6S636C53v34Ev,
  (VTBL_ENTRY)&_ZN6S636C53v35Ev,
  (VTBL_ENTRY)&_ZN6S636C53v36Ev,
  (VTBL_ENTRY)&_ZN6S636C53v37Ev,
  (VTBL_ENTRY)&_ZN6S636C53v38Ev,
  (VTBL_ENTRY)&_ZN6S636C53v39Ev,
  (VTBL_ENTRY)&_ZN6S636C53v40Ev,
  (VTBL_ENTRY)&_ZN6S636C53v41Ev,
  (VTBL_ENTRY)&_ZN6S636C53v42Ev,
  (VTBL_ENTRY)&_ZN6S636C53v43Ev,
  (VTBL_ENTRY)&_ZN6S636C53v44Ev,
  (VTBL_ENTRY)&_ZN6S636C53v45Ev,
  (VTBL_ENTRY)&_ZN6S636C53v46Ev,
  (VTBL_ENTRY)&_ZN6S636C53v47Ev,
  (VTBL_ENTRY)&_ZN6S636C53v48Ev,
  (VTBL_ENTRY)&_ZN6S636C53v49Ev,
  (VTBL_ENTRY)&_ZN6S636C53v50Ev,
  (VTBL_ENTRY)&_ZN6S636C53v51Ev,
  (VTBL_ENTRY)&_ZN6S636C53v52Ev,
  (VTBL_ENTRY)&_ZN6S636C53v53Ev,
  (VTBL_ENTRY)&_ZN6S636C53v54Ev,
  (VTBL_ENTRY)&_ZN6S636C53v55Ev,
  (VTBL_ENTRY)&_ZN6S636C53v56Ev,
  (VTBL_ENTRY)&_ZN6S636C53v57Ev,
  (VTBL_ENTRY)&_ZN6S636C53v58Ev,
  (VTBL_ENTRY)&_ZN6S636C53v59Ev,
  (VTBL_ENTRY)&_ZN6S636C53v60Ev,
  (VTBL_ENTRY)&_ZN6S636C53v61Ev,
  (VTBL_ENTRY)&_ZN6S636C53v62Ev,
  (VTBL_ENTRY)&_ZN6S636C53v63Ev,
  (VTBL_ENTRY)&_ZN6S636C53v64Ev,
  (VTBL_ENTRY)&_ZN6S636C53v65Ev,
  (VTBL_ENTRY)&_ZN6S636C53v66Ev,
  (VTBL_ENTRY)&_ZN6S636C53v67Ev,
  (VTBL_ENTRY)&_ZN6S636C53v68Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v90Ev,
};
extern VTBL_ENTRY _ZTI9S636C4_nt[];
VTBL_ENTRY *P__ZTI9S636C4_nt = _ZTI9S636C4_nt; 
extern  VTBL_ENTRY _ZTV9S636C4_nt[];
Class_Descriptor cd_S636C4_nt = {  "S636C4_nt", // class name
  bases_S636C4_nt, 1,
  &(vtc_S636C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S636C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S636C4_nt),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S636C3_nt  : S636C4_nt {
  unsigned int s636c3f0:1;
  unsigned int s636c3f1:1;
  unsigned int s636c3f2:1;
  ::S499C42 s636c3f3;
  ::S499C38 s636c3f4;
  ::S499C17 s636c3f5;
  ::S499C13 s636c3f6;
  int s636c3f7[3];
  virtual  ~S636C3_nt(); // _ZN9S636C3_ntD1Ev
  virtual void  v91(); // _ZN9S636C3_nt3v91Ev
  virtual void  v92(); // _ZN9S636C3_nt3v92Ev
  virtual void  v93(); // _ZN9S636C3_nt3v93Ev
  virtual void  v94(); // _ZN9S636C3_nt3v94Ev
  virtual void  v95(); // _ZN9S636C3_nt3v95Ev
  virtual void  v96(); // _ZN9S636C3_nt3v96Ev
  virtual void  v97(); // _ZN9S636C3_nt3v97Ev
  virtual void  v98(); // _ZN9S636C3_nt3v98Ev
  virtual void  v99(); // _ZN9S636C3_nt3v99Ev
  virtual void  v100(); // _ZN9S636C3_nt4v100Ev
  virtual void  v101(); // _ZN9S636C3_nt4v101Ev
  virtual void  v102(); // _ZN9S636C3_nt4v102Ev
  virtual void  v103(); // _ZN9S636C3_nt4v103Ev
  virtual void  v104(); // _ZN9S636C3_nt4v104Ev
  virtual void  v105(); // _ZN9S636C3_nt4v105Ev
  virtual void  v106(); // _ZN9S636C3_nt4v106Ev
  virtual void  v107(); // _ZN9S636C3_nt4v107Ev
  virtual void  v108(); // _ZN9S636C3_nt4v108Ev
  virtual void  v109(); // _ZN9S636C3_nt4v109Ev
  virtual void  v110(); // _ZN9S636C3_nt4v110Ev
  S636C3_nt(); // tgen
};
//SIG(-1 S636C3_nt) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC6 FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} Fi[3]}


 S636C3_nt ::~S636C3_nt(){ note_dtor("S636C3_nt", this);}
void  S636C3_nt ::v91(){vfunc_called(this, "_ZN9S636C3_nt3v91Ev");}
void  S636C3_nt ::v92(){vfunc_called(this, "_ZN9S636C3_nt3v92Ev");}
void  S636C3_nt ::v93(){vfunc_called(this, "_ZN9S636C3_nt3v93Ev");}
void  S636C3_nt ::v94(){vfunc_called(this, "_ZN9S636C3_nt3v94Ev");}
void  S636C3_nt ::v95(){vfunc_called(this, "_ZN9S636C3_nt3v95Ev");}
void  S636C3_nt ::v96(){vfunc_called(this, "_ZN9S636C3_nt3v96Ev");}
void  S636C3_nt ::v97(){vfunc_called(this, "_ZN9S636C3_nt3v97Ev");}
void  S636C3_nt ::v98(){vfunc_called(this, "_ZN9S636C3_nt3v98Ev");}
void  S636C3_nt ::v99(){vfunc_called(this, "_ZN9S636C3_nt3v99Ev");}
void  S636C3_nt ::v100(){vfunc_called(this, "_ZN9S636C3_nt4v100Ev");}
void  S636C3_nt ::v101(){vfunc_called(this, "_ZN9S636C3_nt4v101Ev");}
void  S636C3_nt ::v102(){vfunc_called(this, "_ZN9S636C3_nt4v102Ev");}
void  S636C3_nt ::v103(){vfunc_called(this, "_ZN9S636C3_nt4v103Ev");}
void  S636C3_nt ::v104(){vfunc_called(this, "_ZN9S636C3_nt4v104Ev");}
void  S636C3_nt ::v105(){vfunc_called(this, "_ZN9S636C3_nt4v105Ev");}
void  S636C3_nt ::v106(){vfunc_called(this, "_ZN9S636C3_nt4v106Ev");}
void  S636C3_nt ::v107(){vfunc_called(this, "_ZN9S636C3_nt4v107Ev");}
void  S636C3_nt ::v108(){vfunc_called(this, "_ZN9S636C3_nt4v108Ev");}
void  S636C3_nt ::v109(){vfunc_called(this, "_ZN9S636C3_nt4v109Ev");}
void  S636C3_nt ::v110(){vfunc_called(this, "_ZN9S636C3_nt4v110Ev");}
S636C3_nt ::S636C3_nt(){ note_ctor("S636C3_nt", this);} // tgen

//skip512 S636C3_nt

#else // __cplusplus

extern void _ZN9S636C3_ntC1Ev();
extern void _ZN9S636C3_ntD1Ev();
Name_Map name_map_S636C3_nt[] = {
  NSPAIR(_ZN9S636C3_ntC1Ev),
  NSPAIR(_ZN9S636C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S636C5;
extern VTBL_ENTRY _ZTI6S636C5[];
extern  VTBL_ENTRY _ZTV6S636C5[];
extern Class_Descriptor cd_S636C4_nt;
extern VTBL_ENTRY _ZTI9S636C4_nt[];
extern  VTBL_ENTRY _ZTV9S636C4_nt[];
static Base_Class bases_S636C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S636C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S636C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S636C3_nt[];
extern void _ZN9S636C3_ntD1Ev();
extern void _ZN9S636C3_ntD0Ev();
extern void _ZN6S636C52v5Ev();
extern void _ZN6S636C52v6Ev();
extern void _ZN6S636C52v7Ev();
extern void _ZN6S636C52v8Ev();
extern void _ZN6S636C52v9Ev();
extern void _ZN6S636C53v10Ev();
extern void _ZN6S636C53v11Ev();
extern void _ZN6S636C53v12Ev();
extern void _ZN6S636C53v13Ev();
extern void _ZN6S636C53v14Ev();
extern void _ZN6S636C53v15Ev();
extern void _ZN6S636C53v16Ev();
extern void _ZN6S636C53v17Ev();
extern void _ZN6S636C53v18Ev();
extern void _ZN6S636C53v19Ev();
extern void _ZN6S636C53v20Ev();
extern void _ZN6S636C53v21Ev();
extern void _ZN6S636C53v22Ev();
extern void _ZN6S636C53v23Ev();
extern void _ZN6S636C53v24Ev();
extern void _ZN6S636C53v25Ev();
extern void _ZN6S636C53v26Ev();
extern void _ZN6S636C53v27Ev();
extern void _ZN6S636C53v28Ev();
extern void _ZN6S636C53v29Ev();
extern void _ZN6S636C53v30Ev();
extern void _ZN6S636C53v31Ev();
extern void _ZN6S636C53v32Ev();
extern void _ZN6S636C53v33Ev();
extern void _ZN6S636C53v34Ev();
extern void _ZN6S636C53v35Ev();
extern void _ZN6S636C53v36Ev();
extern void _ZN6S636C53v37Ev();
extern void _ZN6S636C53v38Ev();
extern void _ZN6S636C53v39Ev();
extern void _ZN6S636C53v40Ev();
extern void _ZN6S636C53v41Ev();
extern void _ZN6S636C53v42Ev();
extern void _ZN6S636C53v43Ev();
extern void _ZN6S636C53v44Ev();
extern void _ZN6S636C53v45Ev();
extern void _ZN6S636C53v46Ev();
extern void _ZN6S636C53v47Ev();
extern void _ZN6S636C53v48Ev();
extern void _ZN6S636C53v49Ev();
extern void _ZN6S636C53v50Ev();
extern void _ZN6S636C53v51Ev();
extern void _ZN6S636C53v52Ev();
extern void _ZN6S636C53v53Ev();
extern void _ZN6S636C53v54Ev();
extern void _ZN6S636C53v55Ev();
extern void _ZN6S636C53v56Ev();
extern void _ZN6S636C53v57Ev();
extern void _ZN6S636C53v58Ev();
extern void _ZN6S636C53v59Ev();
extern void _ZN6S636C53v60Ev();
extern void _ZN6S636C53v61Ev();
extern void _ZN6S636C53v62Ev();
extern void _ZN6S636C53v63Ev();
extern void _ZN6S636C53v64Ev();
extern void _ZN6S636C53v65Ev();
extern void _ZN6S636C53v66Ev();
extern void _ZN6S636C53v67Ev();
extern void _ZN6S636C53v68Ev();
extern void _ZN9S636C4_nt3v69Ev();
extern void _ZN9S636C4_nt3v70Ev();
extern void _ZN9S636C4_nt3v71Ev();
extern void _ZN9S636C4_nt3v72Ev();
extern void _ZN9S636C4_nt3v73Ev();
extern void _ZN9S636C4_nt3v74Ev();
extern void _ZN9S636C4_nt3v75Ev();
extern void _ZN9S636C4_nt3v76Ev();
extern void _ZN9S636C4_nt3v77Ev();
extern void _ZN9S636C4_nt3v78Ev();
extern void _ZN9S636C4_nt3v79Ev();
extern void _ZN9S636C4_nt3v80Ev();
extern void _ZN9S636C4_nt3v81Ev();
extern void _ZN9S636C4_nt3v82Ev();
extern void _ZN9S636C4_nt3v83Ev();
extern void _ZN9S636C4_nt3v84Ev();
extern void _ZN9S636C4_nt3v85Ev();
extern void _ZN9S636C4_nt3v86Ev();
extern void _ZN9S636C4_nt3v87Ev();
extern void _ZN9S636C4_nt3v88Ev();
extern void _ZN9S636C4_nt3v89Ev();
extern void _ZN9S636C4_nt3v90Ev();
extern void _ZN9S636C3_nt3v91Ev();
extern void _ZN9S636C3_nt3v92Ev();
extern void _ZN9S636C3_nt3v93Ev();
extern void _ZN9S636C3_nt3v94Ev();
extern void _ZN9S636C3_nt3v95Ev();
extern void _ZN9S636C3_nt3v96Ev();
extern void _ZN9S636C3_nt3v97Ev();
extern void _ZN9S636C3_nt3v98Ev();
extern void _ZN9S636C3_nt3v99Ev();
extern void _ZN9S636C3_nt4v100Ev();
extern void _ZN9S636C3_nt4v101Ev();
extern void _ZN9S636C3_nt4v102Ev();
extern void _ZN9S636C3_nt4v103Ev();
extern void _ZN9S636C3_nt4v104Ev();
extern void _ZN9S636C3_nt4v105Ev();
extern void _ZN9S636C3_nt4v106Ev();
extern void _ZN9S636C3_nt4v107Ev();
extern void _ZN9S636C3_nt4v108Ev();
extern void _ZN9S636C3_nt4v109Ev();
extern void _ZN9S636C3_nt4v110Ev();
static  VTBL_ENTRY vtc_S636C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S636C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S636C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S636C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S636C52v5Ev,
  (VTBL_ENTRY)&_ZN6S636C52v6Ev,
  (VTBL_ENTRY)&_ZN6S636C52v7Ev,
  (VTBL_ENTRY)&_ZN6S636C52v8Ev,
  (VTBL_ENTRY)&_ZN6S636C52v9Ev,
  (VTBL_ENTRY)&_ZN6S636C53v10Ev,
  (VTBL_ENTRY)&_ZN6S636C53v11Ev,
  (VTBL_ENTRY)&_ZN6S636C53v12Ev,
  (VTBL_ENTRY)&_ZN6S636C53v13Ev,
  (VTBL_ENTRY)&_ZN6S636C53v14Ev,
  (VTBL_ENTRY)&_ZN6S636C53v15Ev,
  (VTBL_ENTRY)&_ZN6S636C53v16Ev,
  (VTBL_ENTRY)&_ZN6S636C53v17Ev,
  (VTBL_ENTRY)&_ZN6S636C53v18Ev,
  (VTBL_ENTRY)&_ZN6S636C53v19Ev,
  (VTBL_ENTRY)&_ZN6S636C53v20Ev,
  (VTBL_ENTRY)&_ZN6S636C53v21Ev,
  (VTBL_ENTRY)&_ZN6S636C53v22Ev,
  (VTBL_ENTRY)&_ZN6S636C53v23Ev,
  (VTBL_ENTRY)&_ZN6S636C53v24Ev,
  (VTBL_ENTRY)&_ZN6S636C53v25Ev,
  (VTBL_ENTRY)&_ZN6S636C53v26Ev,
  (VTBL_ENTRY)&_ZN6S636C53v27Ev,
  (VTBL_ENTRY)&_ZN6S636C53v28Ev,
  (VTBL_ENTRY)&_ZN6S636C53v29Ev,
  (VTBL_ENTRY)&_ZN6S636C53v30Ev,
  (VTBL_ENTRY)&_ZN6S636C53v31Ev,
  (VTBL_ENTRY)&_ZN6S636C53v32Ev,
  (VTBL_ENTRY)&_ZN6S636C53v33Ev,
  (VTBL_ENTRY)&_ZN6S636C53v34Ev,
  (VTBL_ENTRY)&_ZN6S636C53v35Ev,
  (VTBL_ENTRY)&_ZN6S636C53v36Ev,
  (VTBL_ENTRY)&_ZN6S636C53v37Ev,
  (VTBL_ENTRY)&_ZN6S636C53v38Ev,
  (VTBL_ENTRY)&_ZN6S636C53v39Ev,
  (VTBL_ENTRY)&_ZN6S636C53v40Ev,
  (VTBL_ENTRY)&_ZN6S636C53v41Ev,
  (VTBL_ENTRY)&_ZN6S636C53v42Ev,
  (VTBL_ENTRY)&_ZN6S636C53v43Ev,
  (VTBL_ENTRY)&_ZN6S636C53v44Ev,
  (VTBL_ENTRY)&_ZN6S636C53v45Ev,
  (VTBL_ENTRY)&_ZN6S636C53v46Ev,
  (VTBL_ENTRY)&_ZN6S636C53v47Ev,
  (VTBL_ENTRY)&_ZN6S636C53v48Ev,
  (VTBL_ENTRY)&_ZN6S636C53v49Ev,
  (VTBL_ENTRY)&_ZN6S636C53v50Ev,
  (VTBL_ENTRY)&_ZN6S636C53v51Ev,
  (VTBL_ENTRY)&_ZN6S636C53v52Ev,
  (VTBL_ENTRY)&_ZN6S636C53v53Ev,
  (VTBL_ENTRY)&_ZN6S636C53v54Ev,
  (VTBL_ENTRY)&_ZN6S636C53v55Ev,
  (VTBL_ENTRY)&_ZN6S636C53v56Ev,
  (VTBL_ENTRY)&_ZN6S636C53v57Ev,
  (VTBL_ENTRY)&_ZN6S636C53v58Ev,
  (VTBL_ENTRY)&_ZN6S636C53v59Ev,
  (VTBL_ENTRY)&_ZN6S636C53v60Ev,
  (VTBL_ENTRY)&_ZN6S636C53v61Ev,
  (VTBL_ENTRY)&_ZN6S636C53v62Ev,
  (VTBL_ENTRY)&_ZN6S636C53v63Ev,
  (VTBL_ENTRY)&_ZN6S636C53v64Ev,
  (VTBL_ENTRY)&_ZN6S636C53v65Ev,
  (VTBL_ENTRY)&_ZN6S636C53v66Ev,
  (VTBL_ENTRY)&_ZN6S636C53v67Ev,
  (VTBL_ENTRY)&_ZN6S636C53v68Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v110Ev,
};
extern VTBL_ENTRY _ZTI9S636C3_nt[];
VTBL_ENTRY *P__ZTI9S636C3_nt = _ZTI9S636C3_nt; 
extern  VTBL_ENTRY _ZTV9S636C3_nt[];
Class_Descriptor cd_S636C3_nt = {  "S636C3_nt", // class name
  bases_S636C3_nt, 2,
  &(vtc_S636C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S636C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S636C3_nt),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S636C2_nt  : S636C3_nt {
  void *s636c2f0[2];
  int s636c2f1[4];
  unsigned int s636c2f2:1;
  unsigned int s636c2f3:1;
  unsigned int s636c2f4:1;
  char s636c2f5;
  int s636c2f6;
  unsigned int s636c2f7:1;
  ::S499C8_nt s636c2f8;
  virtual  ~S636C2_nt(); // _ZN9S636C2_ntD1Ev
  virtual void  v111(); // _ZN9S636C2_nt4v111Ev
  virtual void  v112(); // _ZN9S636C2_nt4v112Ev
  virtual void  v113(); // _ZN9S636C2_nt4v113Ev
  virtual void  v114(); // _ZN9S636C2_nt4v114Ev
  virtual void  v115(); // _ZN9S636C2_nt4v115Ev
  virtual void  v116(); // _ZN9S636C2_nt4v116Ev
  virtual void  v117(); // _ZN9S636C2_nt4v117Ev
  virtual void  v118(); // _ZN9S636C2_nt4v118Ev
  virtual void  v119(); // _ZN9S636C2_nt4v119Ev
  virtual void  v120(); // _ZN9S636C2_nt4v120Ev
  virtual void  v121(); // _ZN9S636C2_nt4v121Ev
  virtual void  v122(); // _ZN9S636C2_nt4v122Ev
  virtual void  v123(); // _ZN9S636C2_nt4v123Ev
  virtual void  v124(); // _ZN9S636C2_nt4v124Ev
  S636C2_nt(); // tgen
};
//SIG(-1 S636C2_nt) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC7 FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC17{ BC18{ BC9}}}


 S636C2_nt ::~S636C2_nt(){ note_dtor("S636C2_nt", this);}
void  S636C2_nt ::v111(){vfunc_called(this, "_ZN9S636C2_nt4v111Ev");}
void  S636C2_nt ::v112(){vfunc_called(this, "_ZN9S636C2_nt4v112Ev");}
void  S636C2_nt ::v113(){vfunc_called(this, "_ZN9S636C2_nt4v113Ev");}
void  S636C2_nt ::v114(){vfunc_called(this, "_ZN9S636C2_nt4v114Ev");}
void  S636C2_nt ::v115(){vfunc_called(this, "_ZN9S636C2_nt4v115Ev");}
void  S636C2_nt ::v116(){vfunc_called(this, "_ZN9S636C2_nt4v116Ev");}
void  S636C2_nt ::v117(){vfunc_called(this, "_ZN9S636C2_nt4v117Ev");}
void  S636C2_nt ::v118(){vfunc_called(this, "_ZN9S636C2_nt4v118Ev");}
void  S636C2_nt ::v119(){vfunc_called(this, "_ZN9S636C2_nt4v119Ev");}
void  S636C2_nt ::v120(){vfunc_called(this, "_ZN9S636C2_nt4v120Ev");}
void  S636C2_nt ::v121(){vfunc_called(this, "_ZN9S636C2_nt4v121Ev");}
void  S636C2_nt ::v122(){vfunc_called(this, "_ZN9S636C2_nt4v122Ev");}
void  S636C2_nt ::v123(){vfunc_called(this, "_ZN9S636C2_nt4v123Ev");}
void  S636C2_nt ::v124(){vfunc_called(this, "_ZN9S636C2_nt4v124Ev");}
S636C2_nt ::S636C2_nt(){ note_ctor("S636C2_nt", this);} // tgen

//skip512 S636C2_nt

#else // __cplusplus

extern void _ZN9S636C2_ntC1Ev();
extern void _ZN9S636C2_ntD1Ev();
Name_Map name_map_S636C2_nt[] = {
  NSPAIR(_ZN9S636C2_ntC1Ev),
  NSPAIR(_ZN9S636C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S636C5;
extern VTBL_ENTRY _ZTI6S636C5[];
extern  VTBL_ENTRY _ZTV6S636C5[];
extern Class_Descriptor cd_S636C4_nt;
extern VTBL_ENTRY _ZTI9S636C4_nt[];
extern  VTBL_ENTRY _ZTV9S636C4_nt[];
extern Class_Descriptor cd_S636C3_nt;
extern VTBL_ENTRY _ZTI9S636C3_nt[];
extern  VTBL_ENTRY _ZTV9S636C3_nt[];
static Base_Class bases_S636C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S636C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S636C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S636C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S636C2_nt[];
extern void _ZN9S636C2_ntD1Ev();
extern void _ZN9S636C2_ntD0Ev();
extern void _ZN6S636C52v5Ev();
extern void _ZN6S636C52v6Ev();
extern void _ZN6S636C52v7Ev();
extern void _ZN6S636C52v8Ev();
extern void _ZN6S636C52v9Ev();
extern void _ZN6S636C53v10Ev();
extern void _ZN6S636C53v11Ev();
extern void _ZN6S636C53v12Ev();
extern void _ZN6S636C53v13Ev();
extern void _ZN6S636C53v14Ev();
extern void _ZN6S636C53v15Ev();
extern void _ZN6S636C53v16Ev();
extern void _ZN6S636C53v17Ev();
extern void _ZN6S636C53v18Ev();
extern void _ZN6S636C53v19Ev();
extern void _ZN6S636C53v20Ev();
extern void _ZN6S636C53v21Ev();
extern void _ZN6S636C53v22Ev();
extern void _ZN6S636C53v23Ev();
extern void _ZN6S636C53v24Ev();
extern void _ZN6S636C53v25Ev();
extern void _ZN6S636C53v26Ev();
extern void _ZN6S636C53v27Ev();
extern void _ZN6S636C53v28Ev();
extern void _ZN6S636C53v29Ev();
extern void _ZN6S636C53v30Ev();
extern void _ZN6S636C53v31Ev();
extern void _ZN6S636C53v32Ev();
extern void _ZN6S636C53v33Ev();
extern void _ZN6S636C53v34Ev();
extern void _ZN6S636C53v35Ev();
extern void _ZN6S636C53v36Ev();
extern void _ZN6S636C53v37Ev();
extern void _ZN6S636C53v38Ev();
extern void _ZN6S636C53v39Ev();
extern void _ZN6S636C53v40Ev();
extern void _ZN6S636C53v41Ev();
extern void _ZN6S636C53v42Ev();
extern void _ZN6S636C53v43Ev();
extern void _ZN6S636C53v44Ev();
extern void _ZN6S636C53v45Ev();
extern void _ZN6S636C53v46Ev();
extern void _ZN6S636C53v47Ev();
extern void _ZN6S636C53v48Ev();
extern void _ZN6S636C53v49Ev();
extern void _ZN6S636C53v50Ev();
extern void _ZN6S636C53v51Ev();
extern void _ZN6S636C53v52Ev();
extern void _ZN6S636C53v53Ev();
extern void _ZN6S636C53v54Ev();
extern void _ZN6S636C53v55Ev();
extern void _ZN6S636C53v56Ev();
extern void _ZN6S636C53v57Ev();
extern void _ZN6S636C53v58Ev();
extern void _ZN6S636C53v59Ev();
extern void _ZN6S636C53v60Ev();
extern void _ZN6S636C53v61Ev();
extern void _ZN6S636C53v62Ev();
extern void _ZN6S636C53v63Ev();
extern void _ZN6S636C53v64Ev();
extern void _ZN6S636C53v65Ev();
extern void _ZN6S636C53v66Ev();
extern void _ZN6S636C53v67Ev();
extern void _ZN6S636C53v68Ev();
extern void _ZN9S636C4_nt3v69Ev();
extern void _ZN9S636C4_nt3v70Ev();
extern void _ZN9S636C4_nt3v71Ev();
extern void _ZN9S636C4_nt3v72Ev();
extern void _ZN9S636C4_nt3v73Ev();
extern void _ZN9S636C4_nt3v74Ev();
extern void _ZN9S636C4_nt3v75Ev();
extern void _ZN9S636C4_nt3v76Ev();
extern void _ZN9S636C4_nt3v77Ev();
extern void _ZN9S636C4_nt3v78Ev();
extern void _ZN9S636C4_nt3v79Ev();
extern void _ZN9S636C4_nt3v80Ev();
extern void _ZN9S636C4_nt3v81Ev();
extern void _ZN9S636C4_nt3v82Ev();
extern void _ZN9S636C4_nt3v83Ev();
extern void _ZN9S636C4_nt3v84Ev();
extern void _ZN9S636C4_nt3v85Ev();
extern void _ZN9S636C4_nt3v86Ev();
extern void _ZN9S636C4_nt3v87Ev();
extern void _ZN9S636C4_nt3v88Ev();
extern void _ZN9S636C4_nt3v89Ev();
extern void _ZN9S636C4_nt3v90Ev();
extern void _ZN9S636C3_nt3v91Ev();
extern void _ZN9S636C3_nt3v92Ev();
extern void _ZN9S636C3_nt3v93Ev();
extern void _ZN9S636C3_nt3v94Ev();
extern void _ZN9S636C3_nt3v95Ev();
extern void _ZN9S636C3_nt3v96Ev();
extern void _ZN9S636C3_nt3v97Ev();
extern void _ZN9S636C3_nt3v98Ev();
extern void _ZN9S636C3_nt3v99Ev();
extern void _ZN9S636C3_nt4v100Ev();
extern void _ZN9S636C3_nt4v101Ev();
extern void _ZN9S636C3_nt4v102Ev();
extern void _ZN9S636C3_nt4v103Ev();
extern void _ZN9S636C3_nt4v104Ev();
extern void _ZN9S636C3_nt4v105Ev();
extern void _ZN9S636C3_nt4v106Ev();
extern void _ZN9S636C3_nt4v107Ev();
extern void _ZN9S636C3_nt4v108Ev();
extern void _ZN9S636C3_nt4v109Ev();
extern void _ZN9S636C3_nt4v110Ev();
extern void _ZN9S636C2_nt4v111Ev();
extern void _ZN9S636C2_nt4v112Ev();
extern void _ZN9S636C2_nt4v113Ev();
extern void _ZN9S636C2_nt4v114Ev();
extern void _ZN9S636C2_nt4v115Ev();
extern void _ZN9S636C2_nt4v116Ev();
extern void _ZN9S636C2_nt4v117Ev();
extern void _ZN9S636C2_nt4v118Ev();
extern void _ZN9S636C2_nt4v119Ev();
extern void _ZN9S636C2_nt4v120Ev();
extern void _ZN9S636C2_nt4v121Ev();
extern void _ZN9S636C2_nt4v122Ev();
extern void _ZN9S636C2_nt4v123Ev();
extern void _ZN9S636C2_nt4v124Ev();
static  VTBL_ENTRY vtc_S636C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S636C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S636C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S636C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S636C52v5Ev,
  (VTBL_ENTRY)&_ZN6S636C52v6Ev,
  (VTBL_ENTRY)&_ZN6S636C52v7Ev,
  (VTBL_ENTRY)&_ZN6S636C52v8Ev,
  (VTBL_ENTRY)&_ZN6S636C52v9Ev,
  (VTBL_ENTRY)&_ZN6S636C53v10Ev,
  (VTBL_ENTRY)&_ZN6S636C53v11Ev,
  (VTBL_ENTRY)&_ZN6S636C53v12Ev,
  (VTBL_ENTRY)&_ZN6S636C53v13Ev,
  (VTBL_ENTRY)&_ZN6S636C53v14Ev,
  (VTBL_ENTRY)&_ZN6S636C53v15Ev,
  (VTBL_ENTRY)&_ZN6S636C53v16Ev,
  (VTBL_ENTRY)&_ZN6S636C53v17Ev,
  (VTBL_ENTRY)&_ZN6S636C53v18Ev,
  (VTBL_ENTRY)&_ZN6S636C53v19Ev,
  (VTBL_ENTRY)&_ZN6S636C53v20Ev,
  (VTBL_ENTRY)&_ZN6S636C53v21Ev,
  (VTBL_ENTRY)&_ZN6S636C53v22Ev,
  (VTBL_ENTRY)&_ZN6S636C53v23Ev,
  (VTBL_ENTRY)&_ZN6S636C53v24Ev,
  (VTBL_ENTRY)&_ZN6S636C53v25Ev,
  (VTBL_ENTRY)&_ZN6S636C53v26Ev,
  (VTBL_ENTRY)&_ZN6S636C53v27Ev,
  (VTBL_ENTRY)&_ZN6S636C53v28Ev,
  (VTBL_ENTRY)&_ZN6S636C53v29Ev,
  (VTBL_ENTRY)&_ZN6S636C53v30Ev,
  (VTBL_ENTRY)&_ZN6S636C53v31Ev,
  (VTBL_ENTRY)&_ZN6S636C53v32Ev,
  (VTBL_ENTRY)&_ZN6S636C53v33Ev,
  (VTBL_ENTRY)&_ZN6S636C53v34Ev,
  (VTBL_ENTRY)&_ZN6S636C53v35Ev,
  (VTBL_ENTRY)&_ZN6S636C53v36Ev,
  (VTBL_ENTRY)&_ZN6S636C53v37Ev,
  (VTBL_ENTRY)&_ZN6S636C53v38Ev,
  (VTBL_ENTRY)&_ZN6S636C53v39Ev,
  (VTBL_ENTRY)&_ZN6S636C53v40Ev,
  (VTBL_ENTRY)&_ZN6S636C53v41Ev,
  (VTBL_ENTRY)&_ZN6S636C53v42Ev,
  (VTBL_ENTRY)&_ZN6S636C53v43Ev,
  (VTBL_ENTRY)&_ZN6S636C53v44Ev,
  (VTBL_ENTRY)&_ZN6S636C53v45Ev,
  (VTBL_ENTRY)&_ZN6S636C53v46Ev,
  (VTBL_ENTRY)&_ZN6S636C53v47Ev,
  (VTBL_ENTRY)&_ZN6S636C53v48Ev,
  (VTBL_ENTRY)&_ZN6S636C53v49Ev,
  (VTBL_ENTRY)&_ZN6S636C53v50Ev,
  (VTBL_ENTRY)&_ZN6S636C53v51Ev,
  (VTBL_ENTRY)&_ZN6S636C53v52Ev,
  (VTBL_ENTRY)&_ZN6S636C53v53Ev,
  (VTBL_ENTRY)&_ZN6S636C53v54Ev,
  (VTBL_ENTRY)&_ZN6S636C53v55Ev,
  (VTBL_ENTRY)&_ZN6S636C53v56Ev,
  (VTBL_ENTRY)&_ZN6S636C53v57Ev,
  (VTBL_ENTRY)&_ZN6S636C53v58Ev,
  (VTBL_ENTRY)&_ZN6S636C53v59Ev,
  (VTBL_ENTRY)&_ZN6S636C53v60Ev,
  (VTBL_ENTRY)&_ZN6S636C53v61Ev,
  (VTBL_ENTRY)&_ZN6S636C53v62Ev,
  (VTBL_ENTRY)&_ZN6S636C53v63Ev,
  (VTBL_ENTRY)&_ZN6S636C53v64Ev,
  (VTBL_ENTRY)&_ZN6S636C53v65Ev,
  (VTBL_ENTRY)&_ZN6S636C53v66Ev,
  (VTBL_ENTRY)&_ZN6S636C53v67Ev,
  (VTBL_ENTRY)&_ZN6S636C53v68Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v124Ev,
};
extern VTBL_ENTRY _ZTI9S636C2_nt[];
VTBL_ENTRY *P__ZTI9S636C2_nt = _ZTI9S636C2_nt; 
extern  VTBL_ENTRY _ZTV9S636C2_nt[];
Class_Descriptor cd_S636C2_nt = {  "S636C2_nt", // class name
  bases_S636C2_nt, 3,
  &(vtc_S636C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI9S636C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S636C2_nt),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S636C1 ::~S636C1(){ note_dtor("S636C1", this);}
void  S636C1 ::v1(){vfunc_called(this, "_ZN6S636C12v1Ev");}
void  S636C1 ::v2(){vfunc_called(this, "_ZN6S636C12v2Ev");}
void  S636C1 ::v3(){vfunc_called(this, "_ZN6S636C12v3Ev");}
void  S636C1 ::v4(){vfunc_called(this, "_ZN6S636C12v4Ev");}
S636C1 ::S636C1(){ note_ctor("S636C1", this);} // tgen

static void Test_S636C1()
{
  extern Class_Descriptor cd_S636C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,67)];
    init_test(&cd_S636C1, buf);
    S636C1 *dp, &lv = *(dp=new (buf) S636C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,264), "sizeof(S636C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S636C1)");
    check_base_class_offset(lv, (S636C5*)(S636C4_nt*)(S636C3_nt*)(S636C2_nt*), 0, "S636C1");
    check_base_class_offset(lv, (S636C4_nt*)(S636C3_nt*)(S636C2_nt*), 0, "S636C1");
    check_base_class_offset(lv, (S636C3_nt*)(S636C2_nt*), 0, "S636C1");
    check_base_class_offset(lv, (S636C2_nt*), 0, "S636C1");
    check_field_offset(lv, s636c1f0, ABISELECT(336,244), "S636C1.s636c1f0");
    check_field_offset(lv, s636c1f1, ABISELECT(344,252), "S636C1.s636c1f1");
    test_class_info(&lv, &cd_S636C1);
    dp->~S636C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS636C1(Test_S636C1, "S636C1", ABISELECT(360,264));

#else // __cplusplus

extern void _ZN6S636C1C1Ev();
extern void _ZN6S636C1D1Ev();
Name_Map name_map_S636C1[] = {
  NSPAIR(_ZN6S636C1C1Ev),
  NSPAIR(_ZN6S636C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S636C5;
extern VTBL_ENTRY _ZTI6S636C5[];
extern  VTBL_ENTRY _ZTV6S636C5[];
extern Class_Descriptor cd_S636C4_nt;
extern VTBL_ENTRY _ZTI9S636C4_nt[];
extern  VTBL_ENTRY _ZTV9S636C4_nt[];
extern Class_Descriptor cd_S636C3_nt;
extern VTBL_ENTRY _ZTI9S636C3_nt[];
extern  VTBL_ENTRY _ZTV9S636C3_nt[];
extern Class_Descriptor cd_S636C2_nt;
extern VTBL_ENTRY _ZTI9S636C2_nt[];
extern  VTBL_ENTRY _ZTV9S636C2_nt[];
static Base_Class bases_S636C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S636C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S636C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S636C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S636C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S636C1[];
extern void _ZN6S636C1D1Ev();
extern void _ZN6S636C1D0Ev();
extern void _ZN6S636C52v5Ev();
extern void _ZN6S636C52v6Ev();
extern void _ZN6S636C52v7Ev();
extern void _ZN6S636C52v8Ev();
extern void _ZN6S636C52v9Ev();
extern void _ZN6S636C53v10Ev();
extern void _ZN6S636C53v11Ev();
extern void _ZN6S636C53v12Ev();
extern void _ZN6S636C53v13Ev();
extern void _ZN6S636C53v14Ev();
extern void _ZN6S636C53v15Ev();
extern void _ZN6S636C53v16Ev();
extern void _ZN6S636C53v17Ev();
extern void _ZN6S636C53v18Ev();
extern void _ZN6S636C53v19Ev();
extern void _ZN6S636C53v20Ev();
extern void _ZN6S636C53v21Ev();
extern void _ZN6S636C53v22Ev();
extern void _ZN6S636C53v23Ev();
extern void _ZN6S636C53v24Ev();
extern void _ZN6S636C53v25Ev();
extern void _ZN6S636C53v26Ev();
extern void _ZN6S636C53v27Ev();
extern void _ZN6S636C53v28Ev();
extern void _ZN6S636C53v29Ev();
extern void _ZN6S636C53v30Ev();
extern void _ZN6S636C53v31Ev();
extern void _ZN6S636C53v32Ev();
extern void _ZN6S636C53v33Ev();
extern void _ZN6S636C53v34Ev();
extern void _ZN6S636C53v35Ev();
extern void _ZN6S636C53v36Ev();
extern void _ZN6S636C53v37Ev();
extern void _ZN6S636C53v38Ev();
extern void _ZN6S636C53v39Ev();
extern void _ZN6S636C53v40Ev();
extern void _ZN6S636C53v41Ev();
extern void _ZN6S636C53v42Ev();
extern void _ZN6S636C53v43Ev();
extern void _ZN6S636C53v44Ev();
extern void _ZN6S636C53v45Ev();
extern void _ZN6S636C53v46Ev();
extern void _ZN6S636C53v47Ev();
extern void _ZN6S636C53v48Ev();
extern void _ZN6S636C53v49Ev();
extern void _ZN6S636C53v50Ev();
extern void _ZN6S636C53v51Ev();
extern void _ZN6S636C53v52Ev();
extern void _ZN6S636C53v53Ev();
extern void _ZN6S636C53v54Ev();
extern void _ZN6S636C53v55Ev();
extern void _ZN6S636C53v56Ev();
extern void _ZN6S636C53v57Ev();
extern void _ZN6S636C53v58Ev();
extern void _ZN6S636C53v59Ev();
extern void _ZN6S636C53v60Ev();
extern void _ZN6S636C53v61Ev();
extern void _ZN6S636C53v62Ev();
extern void _ZN6S636C53v63Ev();
extern void _ZN6S636C53v64Ev();
extern void _ZN6S636C53v65Ev();
extern void _ZN6S636C53v66Ev();
extern void _ZN6S636C53v67Ev();
extern void _ZN6S636C53v68Ev();
extern void _ZN9S636C4_nt3v69Ev();
extern void _ZN9S636C4_nt3v70Ev();
extern void _ZN9S636C4_nt3v71Ev();
extern void _ZN9S636C4_nt3v72Ev();
extern void _ZN9S636C4_nt3v73Ev();
extern void _ZN9S636C4_nt3v74Ev();
extern void _ZN9S636C4_nt3v75Ev();
extern void _ZN9S636C4_nt3v76Ev();
extern void _ZN9S636C4_nt3v77Ev();
extern void _ZN9S636C4_nt3v78Ev();
extern void _ZN9S636C4_nt3v79Ev();
extern void _ZN9S636C4_nt3v80Ev();
extern void _ZN9S636C4_nt3v81Ev();
extern void _ZN9S636C4_nt3v82Ev();
extern void _ZN9S636C4_nt3v83Ev();
extern void _ZN9S636C4_nt3v84Ev();
extern void _ZN9S636C4_nt3v85Ev();
extern void _ZN9S636C4_nt3v86Ev();
extern void _ZN9S636C4_nt3v87Ev();
extern void _ZN9S636C4_nt3v88Ev();
extern void _ZN9S636C4_nt3v89Ev();
extern void _ZN9S636C4_nt3v90Ev();
extern void _ZN9S636C3_nt3v91Ev();
extern void _ZN9S636C3_nt3v92Ev();
extern void _ZN9S636C3_nt3v93Ev();
extern void _ZN9S636C3_nt3v94Ev();
extern void _ZN9S636C3_nt3v95Ev();
extern void _ZN9S636C3_nt3v96Ev();
extern void _ZN9S636C3_nt3v97Ev();
extern void _ZN9S636C3_nt3v98Ev();
extern void _ZN9S636C3_nt3v99Ev();
extern void _ZN9S636C3_nt4v100Ev();
extern void _ZN9S636C3_nt4v101Ev();
extern void _ZN9S636C3_nt4v102Ev();
extern void _ZN9S636C3_nt4v103Ev();
extern void _ZN9S636C3_nt4v104Ev();
extern void _ZN9S636C3_nt4v105Ev();
extern void _ZN9S636C3_nt4v106Ev();
extern void _ZN9S636C3_nt4v107Ev();
extern void _ZN9S636C3_nt4v108Ev();
extern void _ZN9S636C3_nt4v109Ev();
extern void _ZN9S636C3_nt4v110Ev();
extern void _ZN9S636C2_nt4v111Ev();
extern void _ZN9S636C2_nt4v112Ev();
extern void _ZN9S636C2_nt4v113Ev();
extern void _ZN9S636C2_nt4v114Ev();
extern void _ZN9S636C2_nt4v115Ev();
extern void _ZN9S636C2_nt4v116Ev();
extern void _ZN9S636C2_nt4v117Ev();
extern void _ZN9S636C2_nt4v118Ev();
extern void _ZN9S636C2_nt4v119Ev();
extern void _ZN9S636C2_nt4v120Ev();
extern void _ZN9S636C2_nt4v121Ev();
extern void _ZN9S636C2_nt4v122Ev();
extern void _ZN9S636C2_nt4v123Ev();
extern void _ZN9S636C2_nt4v124Ev();
extern void _ZN6S636C12v1Ev();
extern void _ZN6S636C12v2Ev();
extern void _ZN6S636C12v3Ev();
extern void _ZN6S636C12v4Ev();
static  VTBL_ENTRY vtc_S636C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S636C1[0]),
  (VTBL_ENTRY)&_ZN6S636C1D1Ev,
  (VTBL_ENTRY)&_ZN6S636C1D0Ev,
  (VTBL_ENTRY)&_ZN6S636C52v5Ev,
  (VTBL_ENTRY)&_ZN6S636C52v6Ev,
  (VTBL_ENTRY)&_ZN6S636C52v7Ev,
  (VTBL_ENTRY)&_ZN6S636C52v8Ev,
  (VTBL_ENTRY)&_ZN6S636C52v9Ev,
  (VTBL_ENTRY)&_ZN6S636C53v10Ev,
  (VTBL_ENTRY)&_ZN6S636C53v11Ev,
  (VTBL_ENTRY)&_ZN6S636C53v12Ev,
  (VTBL_ENTRY)&_ZN6S636C53v13Ev,
  (VTBL_ENTRY)&_ZN6S636C53v14Ev,
  (VTBL_ENTRY)&_ZN6S636C53v15Ev,
  (VTBL_ENTRY)&_ZN6S636C53v16Ev,
  (VTBL_ENTRY)&_ZN6S636C53v17Ev,
  (VTBL_ENTRY)&_ZN6S636C53v18Ev,
  (VTBL_ENTRY)&_ZN6S636C53v19Ev,
  (VTBL_ENTRY)&_ZN6S636C53v20Ev,
  (VTBL_ENTRY)&_ZN6S636C53v21Ev,
  (VTBL_ENTRY)&_ZN6S636C53v22Ev,
  (VTBL_ENTRY)&_ZN6S636C53v23Ev,
  (VTBL_ENTRY)&_ZN6S636C53v24Ev,
  (VTBL_ENTRY)&_ZN6S636C53v25Ev,
  (VTBL_ENTRY)&_ZN6S636C53v26Ev,
  (VTBL_ENTRY)&_ZN6S636C53v27Ev,
  (VTBL_ENTRY)&_ZN6S636C53v28Ev,
  (VTBL_ENTRY)&_ZN6S636C53v29Ev,
  (VTBL_ENTRY)&_ZN6S636C53v30Ev,
  (VTBL_ENTRY)&_ZN6S636C53v31Ev,
  (VTBL_ENTRY)&_ZN6S636C53v32Ev,
  (VTBL_ENTRY)&_ZN6S636C53v33Ev,
  (VTBL_ENTRY)&_ZN6S636C53v34Ev,
  (VTBL_ENTRY)&_ZN6S636C53v35Ev,
  (VTBL_ENTRY)&_ZN6S636C53v36Ev,
  (VTBL_ENTRY)&_ZN6S636C53v37Ev,
  (VTBL_ENTRY)&_ZN6S636C53v38Ev,
  (VTBL_ENTRY)&_ZN6S636C53v39Ev,
  (VTBL_ENTRY)&_ZN6S636C53v40Ev,
  (VTBL_ENTRY)&_ZN6S636C53v41Ev,
  (VTBL_ENTRY)&_ZN6S636C53v42Ev,
  (VTBL_ENTRY)&_ZN6S636C53v43Ev,
  (VTBL_ENTRY)&_ZN6S636C53v44Ev,
  (VTBL_ENTRY)&_ZN6S636C53v45Ev,
  (VTBL_ENTRY)&_ZN6S636C53v46Ev,
  (VTBL_ENTRY)&_ZN6S636C53v47Ev,
  (VTBL_ENTRY)&_ZN6S636C53v48Ev,
  (VTBL_ENTRY)&_ZN6S636C53v49Ev,
  (VTBL_ENTRY)&_ZN6S636C53v50Ev,
  (VTBL_ENTRY)&_ZN6S636C53v51Ev,
  (VTBL_ENTRY)&_ZN6S636C53v52Ev,
  (VTBL_ENTRY)&_ZN6S636C53v53Ev,
  (VTBL_ENTRY)&_ZN6S636C53v54Ev,
  (VTBL_ENTRY)&_ZN6S636C53v55Ev,
  (VTBL_ENTRY)&_ZN6S636C53v56Ev,
  (VTBL_ENTRY)&_ZN6S636C53v57Ev,
  (VTBL_ENTRY)&_ZN6S636C53v58Ev,
  (VTBL_ENTRY)&_ZN6S636C53v59Ev,
  (VTBL_ENTRY)&_ZN6S636C53v60Ev,
  (VTBL_ENTRY)&_ZN6S636C53v61Ev,
  (VTBL_ENTRY)&_ZN6S636C53v62Ev,
  (VTBL_ENTRY)&_ZN6S636C53v63Ev,
  (VTBL_ENTRY)&_ZN6S636C53v64Ev,
  (VTBL_ENTRY)&_ZN6S636C53v65Ev,
  (VTBL_ENTRY)&_ZN6S636C53v66Ev,
  (VTBL_ENTRY)&_ZN6S636C53v67Ev,
  (VTBL_ENTRY)&_ZN6S636C53v68Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S636C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S636C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S636C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN6S636C12v1Ev,
  (VTBL_ENTRY)&_ZN6S636C12v2Ev,
  (VTBL_ENTRY)&_ZN6S636C12v3Ev,
  (VTBL_ENTRY)&_ZN6S636C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S636C1[];
extern  VTBL_ENTRY _ZTV6S636C1[];
Class_Descriptor cd_S636C1 = {  "S636C1", // class name
  bases_S636C1, 4,
  &(vtc_S636C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,264), // object size
  NSPAIRA(_ZTI6S636C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S636C1),128, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S199C6  {
  int s199c6f0;
  __tsi64 s199c6f1;
  void *s199c6f2[4];
  int s199c6f3[2];
  void *s199c6f4;
  ::S499C6_nt s199c6f5;
  void *s199c6f6[2];
  virtual  ~S199C6(); // _ZN6S199C6D1Ev
  virtual void  v4(); // _ZN6S199C62v4Ev
  virtual void  v5(); // _ZN6S199C62v5Ev
  virtual void  v6(); // _ZN6S199C62v6Ev
  virtual void  v7(); // _ZN6S199C62v7Ev
  virtual void  v8(); // _ZN6S199C62v8Ev
  virtual void  v9(); // _ZN6S199C62v9Ev
  virtual void  v10(); // _ZN6S199C63v10Ev
  virtual void  v11(); // _ZN6S199C63v11Ev
  virtual void  v12(); // _ZN6S199C63v12Ev
  virtual void  v13(); // _ZN6S199C63v13Ev
  virtual void  v14(); // _ZN6S199C63v14Ev
  virtual void  v15(); // _ZN6S199C63v15Ev
  virtual void  v16(); // _ZN6S199C63v16Ev
  virtual void  v17(); // _ZN6S199C63v17Ev
  virtual void  v18(); // _ZN6S199C63v18Ev
  virtual void  v19(); // _ZN6S199C63v19Ev
  virtual void  v20(); // _ZN6S199C63v20Ev
  virtual void  v21(); // _ZN6S199C63v21Ev
  virtual void  v22(); // _ZN6S199C63v22Ev
  virtual void  v23(); // _ZN6S199C63v23Ev
  virtual void  v24(); // _ZN6S199C63v24Ev
  virtual void  v25(); // _ZN6S199C63v25Ev
  virtual void  v26(); // _ZN6S199C63v26Ev
  virtual void  v27(); // _ZN6S199C63v27Ev
  virtual void  v28(); // _ZN6S199C63v28Ev
  virtual void  v29(); // _ZN6S199C63v29Ev
  virtual void  v30(); // _ZN6S199C63v30Ev
  virtual void  v31(); // _ZN6S199C63v31Ev
  virtual void  v32(); // _ZN6S199C63v32Ev
  virtual void  v33(); // _ZN6S199C63v33Ev
  virtual void  v34(); // _ZN6S199C63v34Ev
  virtual void  v35(); // _ZN6S199C63v35Ev
  virtual void  v36(); // _ZN6S199C63v36Ev
  virtual void  v37(); // _ZN6S199C63v37Ev
  virtual void  v38(); // _ZN6S199C63v38Ev
  virtual void  v39(); // _ZN6S199C63v39Ev
  virtual void  v40(); // _ZN6S199C63v40Ev
  virtual void  v41(); // _ZN6S199C63v41Ev
  virtual void  v42(); // _ZN6S199C63v42Ev
  virtual void  v43(); // _ZN6S199C63v43Ev
  virtual void  v44(); // _ZN6S199C63v44Ev
  virtual void  v45(); // _ZN6S199C63v45Ev
  virtual void  v46(); // _ZN6S199C63v46Ev
  virtual void  v47(); // _ZN6S199C63v47Ev
  virtual void  v48(); // _ZN6S199C63v48Ev
  virtual void  v49(); // _ZN6S199C63v49Ev
  virtual void  v50(); // _ZN6S199C63v50Ev
  virtual void  v51(); // _ZN6S199C63v51Ev
  virtual void  v52(); // _ZN6S199C63v52Ev
  virtual void  v53(); // _ZN6S199C63v53Ev
  virtual void  v54(); // _ZN6S199C63v54Ev
  virtual void  v55(); // _ZN6S199C63v55Ev
  virtual void  v56(); // _ZN6S199C63v56Ev
  virtual void  v57(); // _ZN6S199C63v57Ev
  virtual void  v58(); // _ZN6S199C63v58Ev
  virtual void  v59(); // _ZN6S199C63v59Ev
  virtual void  v60(); // _ZN6S199C63v60Ev
  virtual void  v61(); // _ZN6S199C63v61Ev
  virtual void  v62(); // _ZN6S199C63v62Ev
  virtual void  v63(); // _ZN6S199C63v63Ev
  virtual void  v64(); // _ZN6S199C63v64Ev
  virtual void  v65(); // _ZN6S199C63v65Ev
  virtual void  v66(); // _ZN6S199C63v66Ev
  virtual void  v67(); // _ZN6S199C63v67Ev
  S199C6(); // tgen
};
//SIG(-1 S199C6) 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]}


 S199C6 ::~S199C6(){ note_dtor("S199C6", this);}
void  S199C6 ::v4(){vfunc_called(this, "_ZN6S199C62v4Ev");}
void  S199C6 ::v5(){vfunc_called(this, "_ZN6S199C62v5Ev");}
void  S199C6 ::v6(){vfunc_called(this, "_ZN6S199C62v6Ev");}
void  S199C6 ::v7(){vfunc_called(this, "_ZN6S199C62v7Ev");}
void  S199C6 ::v8(){vfunc_called(this, "_ZN6S199C62v8Ev");}
void  S199C6 ::v9(){vfunc_called(this, "_ZN6S199C62v9Ev");}
void  S199C6 ::v10(){vfunc_called(this, "_ZN6S199C63v10Ev");}
void  S199C6 ::v11(){vfunc_called(this, "_ZN6S199C63v11Ev");}
void  S199C6 ::v12(){vfunc_called(this, "_ZN6S199C63v12Ev");}
void  S199C6 ::v13(){vfunc_called(this, "_ZN6S199C63v13Ev");}
void  S199C6 ::v14(){vfunc_called(this, "_ZN6S199C63v14Ev");}
void  S199C6 ::v15(){vfunc_called(this, "_ZN6S199C63v15Ev");}
void  S199C6 ::v16(){vfunc_called(this, "_ZN6S199C63v16Ev");}
void  S199C6 ::v17(){vfunc_called(this, "_ZN6S199C63v17Ev");}
void  S199C6 ::v18(){vfunc_called(this, "_ZN6S199C63v18Ev");}
void  S199C6 ::v19(){vfunc_called(this, "_ZN6S199C63v19Ev");}
void  S199C6 ::v20(){vfunc_called(this, "_ZN6S199C63v20Ev");}
void  S199C6 ::v21(){vfunc_called(this, "_ZN6S199C63v21Ev");}
void  S199C6 ::v22(){vfunc_called(this, "_ZN6S199C63v22Ev");}
void  S199C6 ::v23(){vfunc_called(this, "_ZN6S199C63v23Ev");}
void  S199C6 ::v24(){vfunc_called(this, "_ZN6S199C63v24Ev");}
void  S199C6 ::v25(){vfunc_called(this, "_ZN6S199C63v25Ev");}
void  S199C6 ::v26(){vfunc_called(this, "_ZN6S199C63v26Ev");}
void  S199C6 ::v27(){vfunc_called(this, "_ZN6S199C63v27Ev");}
void  S199C6 ::v28(){vfunc_called(this, "_ZN6S199C63v28Ev");}
void  S199C6 ::v29(){vfunc_called(this, "_ZN6S199C63v29Ev");}
void  S199C6 ::v30(){vfunc_called(this, "_ZN6S199C63v30Ev");}
void  S199C6 ::v31(){vfunc_called(this, "_ZN6S199C63v31Ev");}
void  S199C6 ::v32(){vfunc_called(this, "_ZN6S199C63v32Ev");}
void  S199C6 ::v33(){vfunc_called(this, "_ZN6S199C63v33Ev");}
void  S199C6 ::v34(){vfunc_called(this, "_ZN6S199C63v34Ev");}
void  S199C6 ::v35(){vfunc_called(this, "_ZN6S199C63v35Ev");}
void  S199C6 ::v36(){vfunc_called(this, "_ZN6S199C63v36Ev");}
void  S199C6 ::v37(){vfunc_called(this, "_ZN6S199C63v37Ev");}
void  S199C6 ::v38(){vfunc_called(this, "_ZN6S199C63v38Ev");}
void  S199C6 ::v39(){vfunc_called(this, "_ZN6S199C63v39Ev");}
void  S199C6 ::v40(){vfunc_called(this, "_ZN6S199C63v40Ev");}
void  S199C6 ::v41(){vfunc_called(this, "_ZN6S199C63v41Ev");}
void  S199C6 ::v42(){vfunc_called(this, "_ZN6S199C63v42Ev");}
void  S199C6 ::v43(){vfunc_called(this, "_ZN6S199C63v43Ev");}
void  S199C6 ::v44(){vfunc_called(this, "_ZN6S199C63v44Ev");}
void  S199C6 ::v45(){vfunc_called(this, "_ZN6S199C63v45Ev");}
void  S199C6 ::v46(){vfunc_called(this, "_ZN6S199C63v46Ev");}
void  S199C6 ::v47(){vfunc_called(this, "_ZN6S199C63v47Ev");}
void  S199C6 ::v48(){vfunc_called(this, "_ZN6S199C63v48Ev");}
void  S199C6 ::v49(){vfunc_called(this, "_ZN6S199C63v49Ev");}
void  S199C6 ::v50(){vfunc_called(this, "_ZN6S199C63v50Ev");}
void  S199C6 ::v51(){vfunc_called(this, "_ZN6S199C63v51Ev");}
void  S199C6 ::v52(){vfunc_called(this, "_ZN6S199C63v52Ev");}
void  S199C6 ::v53(){vfunc_called(this, "_ZN6S199C63v53Ev");}
void  S199C6 ::v54(){vfunc_called(this, "_ZN6S199C63v54Ev");}
void  S199C6 ::v55(){vfunc_called(this, "_ZN6S199C63v55Ev");}
void  S199C6 ::v56(){vfunc_called(this, "_ZN6S199C63v56Ev");}
void  S199C6 ::v57(){vfunc_called(this, "_ZN6S199C63v57Ev");}
void  S199C6 ::v58(){vfunc_called(this, "_ZN6S199C63v58Ev");}
void  S199C6 ::v59(){vfunc_called(this, "_ZN6S199C63v59Ev");}
void  S199C6 ::v60(){vfunc_called(this, "_ZN6S199C63v60Ev");}
void  S199C6 ::v61(){vfunc_called(this, "_ZN6S199C63v61Ev");}
void  S199C6 ::v62(){vfunc_called(this, "_ZN6S199C63v62Ev");}
void  S199C6 ::v63(){vfunc_called(this, "_ZN6S199C63v63Ev");}
void  S199C6 ::v64(){vfunc_called(this, "_ZN6S199C63v64Ev");}
void  S199C6 ::v65(){vfunc_called(this, "_ZN6S199C63v65Ev");}
void  S199C6 ::v66(){vfunc_called(this, "_ZN6S199C63v66Ev");}
void  S199C6 ::v67(){vfunc_called(this, "_ZN6S199C63v67Ev");}
S199C6 ::S199C6(){ note_ctor("S199C6", this);} // tgen

static void Test_S199C6()
{
  extern Class_Descriptor cd_S199C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S199C6, buf);
    S199C6 *dp, &lv = *(dp=new (buf) S199C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S199C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S199C6)");
    check_field_offset(lv, s199c6f0, ABISELECT(8,4), "S199C6.s199c6f0");
    check_field_offset(lv, s199c6f1, ABISELECT(16,8), "S199C6.s199c6f1");
    check_field_offset(lv, s199c6f2, ABISELECT(24,16), "S199C6.s199c6f2");
    check_field_offset(lv, s199c6f3, ABISELECT(56,32), "S199C6.s199c6f3");
    check_field_offset(lv, s199c6f4, ABISELECT(64,40), "S199C6.s199c6f4");
    check_field_offset(lv, s199c6f5, ABISELECT(72,44), "S199C6.s199c6f5");
    check_field_offset(lv, s199c6f6, ABISELECT(80,52), "S199C6.s199c6f6");
    test_class_info(&lv, &cd_S199C6);
    dp->~S199C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS199C6(Test_S199C6, "S199C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S199C6C1Ev();
extern void _ZN6S199C6D1Ev();
Name_Map name_map_S199C6[] = {
  NSPAIR(_ZN6S199C6C1Ev),
  NSPAIR(_ZN6S199C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S199C6[];
extern void _ZN6S199C6D1Ev();
extern void _ZN6S199C6D0Ev();
extern void _ZN6S199C62v4Ev();
extern void _ZN6S199C62v5Ev();
extern void _ZN6S199C62v6Ev();
extern void _ZN6S199C62v7Ev();
extern void _ZN6S199C62v8Ev();
extern void _ZN6S199C62v9Ev();
extern void _ZN6S199C63v10Ev();
extern void _ZN6S199C63v11Ev();
extern void _ZN6S199C63v12Ev();
extern void _ZN6S199C63v13Ev();
extern void _ZN6S199C63v14Ev();
extern void _ZN6S199C63v15Ev();
extern void _ZN6S199C63v16Ev();
extern void _ZN6S199C63v17Ev();
extern void _ZN6S199C63v18Ev();
extern void _ZN6S199C63v19Ev();
extern void _ZN6S199C63v20Ev();
extern void _ZN6S199C63v21Ev();
extern void _ZN6S199C63v22Ev();
extern void _ZN6S199C63v23Ev();
extern void _ZN6S199C63v24Ev();
extern void _ZN6S199C63v25Ev();
extern void _ZN6S199C63v26Ev();
extern void _ZN6S199C63v27Ev();
extern void _ZN6S199C63v28Ev();
extern void _ZN6S199C63v29Ev();
extern void _ZN6S199C63v30Ev();
extern void _ZN6S199C63v31Ev();
extern void _ZN6S199C63v32Ev();
extern void _ZN6S199C63v33Ev();
extern void _ZN6S199C63v34Ev();
extern void _ZN6S199C63v35Ev();
extern void _ZN6S199C63v36Ev();
extern void _ZN6S199C63v37Ev();
extern void _ZN6S199C63v38Ev();
extern void _ZN6S199C63v39Ev();
extern void _ZN6S199C63v40Ev();
extern void _ZN6S199C63v41Ev();
extern void _ZN6S199C63v42Ev();
extern void _ZN6S199C63v43Ev();
extern void _ZN6S199C63v44Ev();
extern void _ZN6S199C63v45Ev();
extern void _ZN6S199C63v46Ev();
extern void _ZN6S199C63v47Ev();
extern void _ZN6S199C63v48Ev();
extern void _ZN6S199C63v49Ev();
extern void _ZN6S199C63v50Ev();
extern void _ZN6S199C63v51Ev();
extern void _ZN6S199C63v52Ev();
extern void _ZN6S199C63v53Ev();
extern void _ZN6S199C63v54Ev();
extern void _ZN6S199C63v55Ev();
extern void _ZN6S199C63v56Ev();
extern void _ZN6S199C63v57Ev();
extern void _ZN6S199C63v58Ev();
extern void _ZN6S199C63v59Ev();
extern void _ZN6S199C63v60Ev();
extern void _ZN6S199C63v61Ev();
extern void _ZN6S199C63v62Ev();
extern void _ZN6S199C63v63Ev();
extern void _ZN6S199C63v64Ev();
extern void _ZN6S199C63v65Ev();
extern void _ZN6S199C63v66Ev();
extern void _ZN6S199C63v67Ev();
static  VTBL_ENTRY vtc_S199C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S199C6[0]),
  (VTBL_ENTRY)&_ZN6S199C6D1Ev,
  (VTBL_ENTRY)&_ZN6S199C6D0Ev,
  (VTBL_ENTRY)&_ZN6S199C62v4Ev,
  (VTBL_ENTRY)&_ZN6S199C62v5Ev,
  (VTBL_ENTRY)&_ZN6S199C62v6Ev,
  (VTBL_ENTRY)&_ZN6S199C62v7Ev,
  (VTBL_ENTRY)&_ZN6S199C62v8Ev,
  (VTBL_ENTRY)&_ZN6S199C62v9Ev,
  (VTBL_ENTRY)&_ZN6S199C63v10Ev,
  (VTBL_ENTRY)&_ZN6S199C63v11Ev,
  (VTBL_ENTRY)&_ZN6S199C63v12Ev,
  (VTBL_ENTRY)&_ZN6S199C63v13Ev,
  (VTBL_ENTRY)&_ZN6S199C63v14Ev,
  (VTBL_ENTRY)&_ZN6S199C63v15Ev,
  (VTBL_ENTRY)&_ZN6S199C63v16Ev,
  (VTBL_ENTRY)&_ZN6S199C63v17Ev,
  (VTBL_ENTRY)&_ZN6S199C63v18Ev,
  (VTBL_ENTRY)&_ZN6S199C63v19Ev,
  (VTBL_ENTRY)&_ZN6S199C63v20Ev,
  (VTBL_ENTRY)&_ZN6S199C63v21Ev,
  (VTBL_ENTRY)&_ZN6S199C63v22Ev,
  (VTBL_ENTRY)&_ZN6S199C63v23Ev,
  (VTBL_ENTRY)&_ZN6S199C63v24Ev,
  (VTBL_ENTRY)&_ZN6S199C63v25Ev,
  (VTBL_ENTRY)&_ZN6S199C63v26Ev,
  (VTBL_ENTRY)&_ZN6S199C63v27Ev,
  (VTBL_ENTRY)&_ZN6S199C63v28Ev,
  (VTBL_ENTRY)&_ZN6S199C63v29Ev,
  (VTBL_ENTRY)&_ZN6S199C63v30Ev,
  (VTBL_ENTRY)&_ZN6S199C63v31Ev,
  (VTBL_ENTRY)&_ZN6S199C63v32Ev,
  (VTBL_ENTRY)&_ZN6S199C63v33Ev,
  (VTBL_ENTRY)&_ZN6S199C63v34Ev,
  (VTBL_ENTRY)&_ZN6S199C63v35Ev,
  (VTBL_ENTRY)&_ZN6S199C63v36Ev,
  (VTBL_ENTRY)&_ZN6S199C63v37Ev,
  (VTBL_ENTRY)&_ZN6S199C63v38Ev,
  (VTBL_ENTRY)&_ZN6S199C63v39Ev,
  (VTBL_ENTRY)&_ZN6S199C63v40Ev,
  (VTBL_ENTRY)&_ZN6S199C63v41Ev,
  (VTBL_ENTRY)&_ZN6S199C63v42Ev,
  (VTBL_ENTRY)&_ZN6S199C63v43Ev,
  (VTBL_ENTRY)&_ZN6S199C63v44Ev,
  (VTBL_ENTRY)&_ZN6S199C63v45Ev,
  (VTBL_ENTRY)&_ZN6S199C63v46Ev,
  (VTBL_ENTRY)&_ZN6S199C63v47Ev,
  (VTBL_ENTRY)&_ZN6S199C63v48Ev,
  (VTBL_ENTRY)&_ZN6S199C63v49Ev,
  (VTBL_ENTRY)&_ZN6S199C63v50Ev,
  (VTBL_ENTRY)&_ZN6S199C63v51Ev,
  (VTBL_ENTRY)&_ZN6S199C63v52Ev,
  (VTBL_ENTRY)&_ZN6S199C63v53Ev,
  (VTBL_ENTRY)&_ZN6S199C63v54Ev,
  (VTBL_ENTRY)&_ZN6S199C63v55Ev,
  (VTBL_ENTRY)&_ZN6S199C63v56Ev,
  (VTBL_ENTRY)&_ZN6S199C63v57Ev,
  (VTBL_ENTRY)&_ZN6S199C63v58Ev,
  (VTBL_ENTRY)&_ZN6S199C63v59Ev,
  (VTBL_ENTRY)&_ZN6S199C63v60Ev,
  (VTBL_ENTRY)&_ZN6S199C63v61Ev,
  (VTBL_ENTRY)&_ZN6S199C63v62Ev,
  (VTBL_ENTRY)&_ZN6S199C63v63Ev,
  (VTBL_ENTRY)&_ZN6S199C63v64Ev,
  (VTBL_ENTRY)&_ZN6S199C63v65Ev,
  (VTBL_ENTRY)&_ZN6S199C63v66Ev,
  (VTBL_ENTRY)&_ZN6S199C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S199C6[];
extern  VTBL_ENTRY _ZTV6S199C6[];
Class_Descriptor cd_S199C6 = {  "S199C6", // class name
  0,0,//no base classes
  &(vtc_S199C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S199C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S199C6),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  S199C5  : S199C6 {
  int s199c5f0[2];
  void *s199c5f1;
  int s199c5f2[2];
  ::S499C37_nt s199c5f3;
  ::S499C37_nt s199c5f4;
  ::S7368C78 s199c5f5;
  ::S499C37_nt s199c5f6;
  unsigned int s199c5f7:1;
  unsigned int s199c5f8:1;
  unsigned int s199c5f9:1;
  unsigned int s199c5f10:1;
  unsigned int s199c5f11:1;
  int s199c5f12[2];
  virtual  ~S199C5(); // _ZN6S199C5D1Ev
  virtual void  v68(); // _ZN6S199C53v68Ev
  virtual void  v69(); // _ZN6S199C53v69Ev
  virtual void  v70(); // _ZN6S199C53v70Ev
  virtual void  v71(); // _ZN6S199C53v71Ev
  virtual void  v72(); // _ZN6S199C53v72Ev
  virtual void  v73(); // _ZN6S199C53v73Ev
  virtual void  v74(); // _ZN6S199C53v74Ev
  virtual void  v75(); // _ZN6S199C53v75Ev
  virtual void  v76(); // _ZN6S199C53v76Ev
  virtual void  v77(); // _ZN6S199C53v77Ev
  virtual void  v78(); // _ZN6S199C53v78Ev
  virtual void  v79(); // _ZN6S199C53v79Ev
  virtual void  v80(); // _ZN6S199C53v80Ev
  virtual void  v81(); // _ZN6S199C53v81Ev
  virtual void  v82(); // _ZN6S199C53v82Ev
  virtual void  v83(); // _ZN6S199C53v83Ev
  virtual void  v84(); // _ZN6S199C53v84Ev
  virtual void  v85(); // _ZN6S199C53v85Ev
  virtual void  v86(); // _ZN6S199C53v86Ev
  virtual void  v87(); // _ZN6S199C53v87Ev
  virtual void  v88(); // _ZN6S199C53v88Ev
  virtual void  v89(); // _ZN6S199C53v89Ev
  S199C5(); // tgen
};
//SIG(-1 S199C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S199C5 ::~S199C5(){ note_dtor("S199C5", this);}
void  S199C5 ::v68(){vfunc_called(this, "_ZN6S199C53v68Ev");}
void  S199C5 ::v69(){vfunc_called(this, "_ZN6S199C53v69Ev");}
void  S199C5 ::v70(){vfunc_called(this, "_ZN6S199C53v70Ev");}
void  S199C5 ::v71(){vfunc_called(this, "_ZN6S199C53v71Ev");}
void  S199C5 ::v72(){vfunc_called(this, "_ZN6S199C53v72Ev");}
void  S199C5 ::v73(){vfunc_called(this, "_ZN6S199C53v73Ev");}
void  S199C5 ::v74(){vfunc_called(this, "_ZN6S199C53v74Ev");}
void  S199C5 ::v75(){vfunc_called(this, "_ZN6S199C53v75Ev");}
void  S199C5 ::v76(){vfunc_called(this, "_ZN6S199C53v76Ev");}
void  S199C5 ::v77(){vfunc_called(this, "_ZN6S199C53v77Ev");}
void  S199C5 ::v78(){vfunc_called(this, "_ZN6S199C53v78Ev");}
void  S199C5 ::v79(){vfunc_called(this, "_ZN6S199C53v79Ev");}
void  S199C5 ::v80(){vfunc_called(this, "_ZN6S199C53v80Ev");}
void  S199C5 ::v81(){vfunc_called(this, "_ZN6S199C53v81Ev");}
void  S199C5 ::v82(){vfunc_called(this, "_ZN6S199C53v82Ev");}
void  S199C5 ::v83(){vfunc_called(this, "_ZN6S199C53v83Ev");}
void  S199C5 ::v84(){vfunc_called(this, "_ZN6S199C53v84Ev");}
void  S199C5 ::v85(){vfunc_called(this, "_ZN6S199C53v85Ev");}
void  S199C5 ::v86(){vfunc_called(this, "_ZN6S199C53v86Ev");}
void  S199C5 ::v87(){vfunc_called(this, "_ZN6S199C53v87Ev");}
void  S199C5 ::v88(){vfunc_called(this, "_ZN6S199C53v88Ev");}
void  S199C5 ::v89(){vfunc_called(this, "_ZN6S199C53v89Ev");}
S199C5 ::S199C5(){ note_ctor("S199C5", this);} // tgen

static void Test_S199C5()
{
  extern Class_Descriptor cd_S199C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S199C5, buf);
    S199C5 *dp, &lv = *(dp=new (buf) S199C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S199C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S199C5)");
    check_base_class_offset(lv, (S199C6*), 0, "S199C5");
    check_field_offset(lv, s199c5f0, ABISELECT(96,60), "S199C5.s199c5f0");
    check_field_offset(lv, s199c5f1, ABISELECT(104,68), "S199C5.s199c5f1");
    check_field_offset(lv, s199c5f2, ABISELECT(112,72), "S199C5.s199c5f2");
    check_field_offset(lv, s199c5f3, ABISELECT(120,80), "S199C5.s199c5f3");
    check_field_offset(lv, s199c5f4, ABISELECT(136,92), "S199C5.s199c5f4");
    check_field_offset(lv, s199c5f5, ABISELECT(152,104), "S199C5.s199c5f5");
    check_field_offset(lv, s199c5f6, ABISELECT(160,108), "S199C5.s199c5f6");
    set_bf_and_test(lv, s199c5f7, ABISELECT(176,120), 0, 1, 1, "S199C5");
    set_bf_and_test(lv, s199c5f8, ABISELECT(176,120), 1, 1, 1, "S199C5");
    set_bf_and_test(lv, s199c5f9, ABISELECT(176,120), 2, 1, 1, "S199C5");
    set_bf_and_test(lv, s199c5f10, ABISELECT(176,120), 3, 1, 1, "S199C5");
    set_bf_and_test(lv, s199c5f11, ABISELECT(176,120), 4, 1, 1, "S199C5");
    check_field_offset(lv, s199c5f12, ABISELECT(180,124), "S199C5.s199c5f12");
    test_class_info(&lv, &cd_S199C5);
    dp->~S199C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS199C5(Test_S199C5, "S199C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S199C5C1Ev();
extern void _ZN6S199C5D1Ev();
Name_Map name_map_S199C5[] = {
  NSPAIR(_ZN6S199C5C1Ev),
  NSPAIR(_ZN6S199C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S199C6;
extern VTBL_ENTRY _ZTI6S199C6[];
extern  VTBL_ENTRY _ZTV6S199C6[];
static Base_Class bases_S199C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S199C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S199C5[];
extern void _ZN6S199C5D1Ev();
extern void _ZN6S199C5D0Ev();
extern void _ZN6S199C62v4Ev();
extern void _ZN6S199C62v5Ev();
extern void _ZN6S199C62v6Ev();
extern void _ZN6S199C62v7Ev();
extern void _ZN6S199C62v8Ev();
extern void _ZN6S199C62v9Ev();
extern void _ZN6S199C63v10Ev();
extern void _ZN6S199C63v11Ev();
extern void _ZN6S199C63v12Ev();
extern void _ZN6S199C63v13Ev();
extern void _ZN6S199C63v14Ev();
extern void _ZN6S199C63v15Ev();
extern void _ZN6S199C63v16Ev();
extern void _ZN6S199C63v17Ev();
extern void _ZN6S199C63v18Ev();
extern void _ZN6S199C63v19Ev();
extern void _ZN6S199C63v20Ev();
extern void _ZN6S199C63v21Ev();
extern void _ZN6S199C63v22Ev();
extern void _ZN6S199C63v23Ev();
extern void _ZN6S199C63v24Ev();
extern void _ZN6S199C63v25Ev();
extern void _ZN6S199C63v26Ev();
extern void _ZN6S199C63v27Ev();
extern void _ZN6S199C63v28Ev();
extern void _ZN6S199C63v29Ev();
extern void _ZN6S199C63v30Ev();
extern void _ZN6S199C63v31Ev();
extern void _ZN6S199C63v32Ev();
extern void _ZN6S199C63v33Ev();
extern void _ZN6S199C63v34Ev();
extern void _ZN6S199C63v35Ev();
extern void _ZN6S199C63v36Ev();
extern void _ZN6S199C63v37Ev();
extern void _ZN6S199C63v38Ev();
extern void _ZN6S199C63v39Ev();
extern void _ZN6S199C63v40Ev();
extern void _ZN6S199C63v41Ev();
extern void _ZN6S199C63v42Ev();
extern void _ZN6S199C63v43Ev();
extern void _ZN6S199C63v44Ev();
extern void _ZN6S199C63v45Ev();
extern void _ZN6S199C63v46Ev();
extern void _ZN6S199C63v47Ev();
extern void _ZN6S199C63v48Ev();
extern void _ZN6S199C63v49Ev();
extern void _ZN6S199C63v50Ev();
extern void _ZN6S199C63v51Ev();
extern void _ZN6S199C63v52Ev();
extern void _ZN6S199C63v53Ev();
extern void _ZN6S199C63v54Ev();
extern void _ZN6S199C63v55Ev();
extern void _ZN6S199C63v56Ev();
extern void _ZN6S199C63v57Ev();
extern void _ZN6S199C63v58Ev();
extern void _ZN6S199C63v59Ev();
extern void _ZN6S199C63v60Ev();
extern void _ZN6S199C63v61Ev();
extern void _ZN6S199C63v62Ev();
extern void _ZN6S199C63v63Ev();
extern void _ZN6S199C63v64Ev();
extern void _ZN6S199C63v65Ev();
extern void _ZN6S199C63v66Ev();
extern void _ZN6S199C63v67Ev();
extern void _ZN6S199C53v68Ev();
extern void _ZN6S199C53v69Ev();
extern void _ZN6S199C53v70Ev();
extern void _ZN6S199C53v71Ev();
extern void _ZN6S199C53v72Ev();
extern void _ZN6S199C53v73Ev();
extern void _ZN6S199C53v74Ev();
extern void _ZN6S199C53v75Ev();
extern void _ZN6S199C53v76Ev();
extern void _ZN6S199C53v77Ev();
extern void _ZN6S199C53v78Ev();
extern void _ZN6S199C53v79Ev();
extern void _ZN6S199C53v80Ev();
extern void _ZN6S199C53v81Ev();
extern void _ZN6S199C53v82Ev();
extern void _ZN6S199C53v83Ev();
extern void _ZN6S199C53v84Ev();
extern void _ZN6S199C53v85Ev();
extern void _ZN6S199C53v86Ev();
extern void _ZN6S199C53v87Ev();
extern void _ZN6S199C53v88Ev();
extern void _ZN6S199C53v89Ev();
static  VTBL_ENTRY vtc_S199C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S199C5[0]),
  (VTBL_ENTRY)&_ZN6S199C5D1Ev,
  (VTBL_ENTRY)&_ZN6S199C5D0Ev,
  (VTBL_ENTRY)&_ZN6S199C62v4Ev,
  (VTBL_ENTRY)&_ZN6S199C62v5Ev,
  (VTBL_ENTRY)&_ZN6S199C62v6Ev,
  (VTBL_ENTRY)&_ZN6S199C62v7Ev,
  (VTBL_ENTRY)&_ZN6S199C62v8Ev,
  (VTBL_ENTRY)&_ZN6S199C62v9Ev,
  (VTBL_ENTRY)&_ZN6S199C63v10Ev,
  (VTBL_ENTRY)&_ZN6S199C63v11Ev,
  (VTBL_ENTRY)&_ZN6S199C63v12Ev,
  (VTBL_ENTRY)&_ZN6S199C63v13Ev,
  (VTBL_ENTRY)&_ZN6S199C63v14Ev,
  (VTBL_ENTRY)&_ZN6S199C63v15Ev,
  (VTBL_ENTRY)&_ZN6S199C63v16Ev,
  (VTBL_ENTRY)&_ZN6S199C63v17Ev,
  (VTBL_ENTRY)&_ZN6S199C63v18Ev,
  (VTBL_ENTRY)&_ZN6S199C63v19Ev,
  (VTBL_ENTRY)&_ZN6S199C63v20Ev,
  (VTBL_ENTRY)&_ZN6S199C63v21Ev,
  (VTBL_ENTRY)&_ZN6S199C63v22Ev,
  (VTBL_ENTRY)&_ZN6S199C63v23Ev,
  (VTBL_ENTRY)&_ZN6S199C63v24Ev,
  (VTBL_ENTRY)&_ZN6S199C63v25Ev,
  (VTBL_ENTRY)&_ZN6S199C63v26Ev,
  (VTBL_ENTRY)&_ZN6S199C63v27Ev,
  (VTBL_ENTRY)&_ZN6S199C63v28Ev,
  (VTBL_ENTRY)&_ZN6S199C63v29Ev,
  (VTBL_ENTRY)&_ZN6S199C63v30Ev,
  (VTBL_ENTRY)&_ZN6S199C63v31Ev,
  (VTBL_ENTRY)&_ZN6S199C63v32Ev,
  (VTBL_ENTRY)&_ZN6S199C63v33Ev,
  (VTBL_ENTRY)&_ZN6S199C63v34Ev,
  (VTBL_ENTRY)&_ZN6S199C63v35Ev,
  (VTBL_ENTRY)&_ZN6S199C63v36Ev,
  (VTBL_ENTRY)&_ZN6S199C63v37Ev,
  (VTBL_ENTRY)&_ZN6S199C63v38Ev,
  (VTBL_ENTRY)&_ZN6S199C63v39Ev,
  (VTBL_ENTRY)&_ZN6S199C63v40Ev,
  (VTBL_ENTRY)&_ZN6S199C63v41Ev,
  (VTBL_ENTRY)&_ZN6S199C63v42Ev,
  (VTBL_ENTRY)&_ZN6S199C63v43Ev,
  (VTBL_ENTRY)&_ZN6S199C63v44Ev,
  (VTBL_ENTRY)&_ZN6S199C63v45Ev,
  (VTBL_ENTRY)&_ZN6S199C63v46Ev,
  (VTBL_ENTRY)&_ZN6S199C63v47Ev,
  (VTBL_ENTRY)&_ZN6S199C63v48Ev,
  (VTBL_ENTRY)&_ZN6S199C63v49Ev,
  (VTBL_ENTRY)&_ZN6S199C63v50Ev,
  (VTBL_ENTRY)&_ZN6S199C63v51Ev,
  (VTBL_ENTRY)&_ZN6S199C63v52Ev,
  (VTBL_ENTRY)&_ZN6S199C63v53Ev,
  (VTBL_ENTRY)&_ZN6S199C63v54Ev,
  (VTBL_ENTRY)&_ZN6S199C63v55Ev,
  (VTBL_ENTRY)&_ZN6S199C63v56Ev,
  (VTBL_ENTRY)&_ZN6S199C63v57Ev,
  (VTBL_ENTRY)&_ZN6S199C63v58Ev,
  (VTBL_ENTRY)&_ZN6S199C63v59Ev,
  (VTBL_ENTRY)&_ZN6S199C63v60Ev,
  (VTBL_ENTRY)&_ZN6S199C63v61Ev,
  (VTBL_ENTRY)&_ZN6S199C63v62Ev,
  (VTBL_ENTRY)&_ZN6S199C63v63Ev,
  (VTBL_ENTRY)&_ZN6S199C63v64Ev,
  (VTBL_ENTRY)&_ZN6S199C63v65Ev,
  (VTBL_ENTRY)&_ZN6S199C63v66Ev,
  (VTBL_ENTRY)&_ZN6S199C63v67Ev,
  (VTBL_ENTRY)&_ZN6S199C53v68Ev,
  (VTBL_ENTRY)&_ZN6S199C53v69Ev,
  (VTBL_ENTRY)&_ZN6S199C53v70Ev,
  (VTBL_ENTRY)&_ZN6S199C53v71Ev,
  (VTBL_ENTRY)&_ZN6S199C53v72Ev,
  (VTBL_ENTRY)&_ZN6S199C53v73Ev,
  (VTBL_ENTRY)&_ZN6S199C53v74Ev,
  (VTBL_ENTRY)&_ZN6S199C53v75Ev,
  (VTBL_ENTRY)&_ZN6S199C53v76Ev,
  (VTBL_ENTRY)&_ZN6S199C53v77Ev,
  (VTBL_ENTRY)&_ZN6S199C53v78Ev,
  (VTBL_ENTRY)&_ZN6S199C53v79Ev,
  (VTBL_ENTRY)&_ZN6S199C53v80Ev,
  (VTBL_ENTRY)&_ZN6S199C53v81Ev,
  (VTBL_ENTRY)&_ZN6S199C53v82Ev,
  (VTBL_ENTRY)&_ZN6S199C53v83Ev,
  (VTBL_ENTRY)&_ZN6S199C53v84Ev,
  (VTBL_ENTRY)&_ZN6S199C53v85Ev,
  (VTBL_ENTRY)&_ZN6S199C53v86Ev,
  (VTBL_ENTRY)&_ZN6S199C53v87Ev,
  (VTBL_ENTRY)&_ZN6S199C53v88Ev,
  (VTBL_ENTRY)&_ZN6S199C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S199C5[];
extern  VTBL_ENTRY _ZTV6S199C5[];
Class_Descriptor cd_S199C5 = {  "S199C5", // class name
  bases_S199C5, 1,
  &(vtc_S199C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S199C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S199C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S199C4  : S199C5 {
  unsigned int s199c4f0:1;
  unsigned int s199c4f1:1;
  unsigned int s199c4f2:1;
  ::S499C42 s199c4f3;
  ::S499C38 s199c4f4;
  ::S499C17 s199c4f5;
  ::S499C13 s199c4f6;
  int s199c4f7[3];
  virtual  ~S199C4(); // _ZN6S199C4D1Ev
  virtual void  v90(); // _ZN6S199C43v90Ev
  virtual void  v91(); // _ZN6S199C43v91Ev
  virtual void  v92(); // _ZN6S199C43v92Ev
  virtual void  v93(); // _ZN6S199C43v93Ev
  virtual void  v94(); // _ZN6S199C43v94Ev
  virtual void  v95(); // _ZN6S199C43v95Ev
  virtual void  v96(); // _ZN6S199C43v96Ev
  virtual void  v97(); // _ZN6S199C43v97Ev
  virtual void  v98(); // _ZN6S199C43v98Ev
  virtual void  v99(); // _ZN6S199C43v99Ev
  virtual void  v100(); // _ZN6S199C44v100Ev
  virtual void  v101(); // _ZN6S199C44v101Ev
  virtual void  v102(); // _ZN6S199C44v102Ev
  virtual void  v103(); // _ZN6S199C44v103Ev
  virtual void  v104(); // _ZN6S199C44v104Ev
  virtual void  v105(); // _ZN6S199C44v105Ev
  virtual void  v106(); // _ZN6S199C44v106Ev
  virtual void  v107(); // _ZN6S199C44v107Ev
  virtual void  v108(); // _ZN6S199C44v108Ev
  virtual void  v109(); // _ZN6S199C44v109Ev
  S199C4(); // tgen
};
//SIG(-1 S199C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC6 FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} Fi[3]}


 S199C4 ::~S199C4(){ note_dtor("S199C4", this);}
void  S199C4 ::v90(){vfunc_called(this, "_ZN6S199C43v90Ev");}
void  S199C4 ::v91(){vfunc_called(this, "_ZN6S199C43v91Ev");}
void  S199C4 ::v92(){vfunc_called(this, "_ZN6S199C43v92Ev");}
void  S199C4 ::v93(){vfunc_called(this, "_ZN6S199C43v93Ev");}
void  S199C4 ::v94(){vfunc_called(this, "_ZN6S199C43v94Ev");}
void  S199C4 ::v95(){vfunc_called(this, "_ZN6S199C43v95Ev");}
void  S199C4 ::v96(){vfunc_called(this, "_ZN6S199C43v96Ev");}
void  S199C4 ::v97(){vfunc_called(this, "_ZN6S199C43v97Ev");}
void  S199C4 ::v98(){vfunc_called(this, "_ZN6S199C43v98Ev");}
void  S199C4 ::v99(){vfunc_called(this, "_ZN6S199C43v99Ev");}
void  S199C4 ::v100(){vfunc_called(this, "_ZN6S199C44v100Ev");}
void  S199C4 ::v101(){vfunc_called(this, "_ZN6S199C44v101Ev");}
void  S199C4 ::v102(){vfunc_called(this, "_ZN6S199C44v102Ev");}
void  S199C4 ::v103(){vfunc_called(this, "_ZN6S199C44v103Ev");}
void  S199C4 ::v104(){vfunc_called(this, "_ZN6S199C44v104Ev");}
void  S199C4 ::v105(){vfunc_called(this, "_ZN6S199C44v105Ev");}
void  S199C4 ::v106(){vfunc_called(this, "_ZN6S199C44v106Ev");}
void  S199C4 ::v107(){vfunc_called(this, "_ZN6S199C44v107Ev");}
void  S199C4 ::v108(){vfunc_called(this, "_ZN6S199C44v108Ev");}
void  S199C4 ::v109(){vfunc_called(this, "_ZN6S199C44v109Ev");}
S199C4 ::S199C4(){ note_ctor("S199C4", this);} // tgen

static void Test_S199C4()
{
  extern Class_Descriptor cd_S199C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S199C4, buf);
    S199C4 *dp, &lv = *(dp=new (buf) S199C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S199C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S199C4)");
    check_base_class_offset(lv, (S199C6*)(S199C5*), 0, "S199C4");
    check_base_class_offset(lv, (S199C5*), 0, "S199C4");
    set_bf_and_test(lv, s199c4f0, ABISELECT(188,132), 0, 1, 1, "S199C4");
    set_bf_and_test(lv, s199c4f1, ABISELECT(188,132), 1, 1, 1, "S199C4");
    set_bf_and_test(lv, s199c4f2, ABISELECT(188,132), 2, 1, 1, "S199C4");
    check_field_offset(lv, s199c4f3, ABISELECT(192,136), "S199C4.s199c4f3");
    check_field_offset(lv, s199c4f4, ABISELECT(208,148), "S199C4.s199c4f4");
    check_field_offset(lv, s199c4f5, ABISELECT(224,160), "S199C4.s199c4f5");
    check_field_offset(lv, s199c4f6, ABISELECT(240,172), "S199C4.s199c4f6");
    check_field_offset(lv, s199c4f7, ABISELECT(256,184), "S199C4.s199c4f7");
    test_class_info(&lv, &cd_S199C4);
    dp->~S199C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS199C4(Test_S199C4, "S199C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S199C4C1Ev();
extern void _ZN6S199C4D1Ev();
Name_Map name_map_S199C4[] = {
  NSPAIR(_ZN6S199C4C1Ev),
  NSPAIR(_ZN6S199C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S199C6;
extern VTBL_ENTRY _ZTI6S199C6[];
extern  VTBL_ENTRY _ZTV6S199C6[];
extern Class_Descriptor cd_S199C5;
extern VTBL_ENTRY _ZTI6S199C5[];
extern  VTBL_ENTRY _ZTV6S199C5[];
static Base_Class bases_S199C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S199C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S199C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S199C4[];
extern void _ZN6S199C4D1Ev();
extern void _ZN6S199C4D0Ev();
extern void _ZN6S199C62v4Ev();
extern void _ZN6S199C62v5Ev();
extern void _ZN6S199C62v6Ev();
extern void _ZN6S199C62v7Ev();
extern void _ZN6S199C62v8Ev();
extern void _ZN6S199C62v9Ev();
extern void _ZN6S199C63v10Ev();
extern void _ZN6S199C63v11Ev();
extern void _ZN6S199C63v12Ev();
extern void _ZN6S199C63v13Ev();
extern void _ZN6S199C63v14Ev();
extern void _ZN6S199C63v15Ev();
extern void _ZN6S199C63v16Ev();
extern void _ZN6S199C63v17Ev();
extern void _ZN6S199C63v18Ev();
extern void _ZN6S199C63v19Ev();
extern void _ZN6S199C63v20Ev();
extern void _ZN6S199C63v21Ev();
extern void _ZN6S199C63v22Ev();
extern void _ZN6S199C63v23Ev();
extern void _ZN6S199C63v24Ev();
extern void _ZN6S199C63v25Ev();
extern void _ZN6S199C63v26Ev();
extern void _ZN6S199C63v27Ev();
extern void _ZN6S199C63v28Ev();
extern void _ZN6S199C63v29Ev();
extern void _ZN6S199C63v30Ev();
extern void _ZN6S199C63v31Ev();
extern void _ZN6S199C63v32Ev();
extern void _ZN6S199C63v33Ev();
extern void _ZN6S199C63v34Ev();
extern void _ZN6S199C63v35Ev();
extern void _ZN6S199C63v36Ev();
extern void _ZN6S199C63v37Ev();
extern void _ZN6S199C63v38Ev();
extern void _ZN6S199C63v39Ev();
extern void _ZN6S199C63v40Ev();
extern void _ZN6S199C63v41Ev();
extern void _ZN6S199C63v42Ev();
extern void _ZN6S199C63v43Ev();
extern void _ZN6S199C63v44Ev();
extern void _ZN6S199C63v45Ev();
extern void _ZN6S199C63v46Ev();
extern void _ZN6S199C63v47Ev();
extern void _ZN6S199C63v48Ev();
extern void _ZN6S199C63v49Ev();
extern void _ZN6S199C63v50Ev();
extern void _ZN6S199C63v51Ev();
extern void _ZN6S199C63v52Ev();
extern void _ZN6S199C63v53Ev();
extern void _ZN6S199C63v54Ev();
extern void _ZN6S199C63v55Ev();
extern void _ZN6S199C63v56Ev();
extern void _ZN6S199C63v57Ev();
extern void _ZN6S199C63v58Ev();
extern void _ZN6S199C63v59Ev();
extern void _ZN6S199C63v60Ev();
extern void _ZN6S199C63v61Ev();
extern void _ZN6S199C63v62Ev();
extern void _ZN6S199C63v63Ev();
extern void _ZN6S199C63v64Ev();
extern void _ZN6S199C63v65Ev();
extern void _ZN6S199C63v66Ev();
extern void _ZN6S199C63v67Ev();
extern void _ZN6S199C53v68Ev();
extern void _ZN6S199C53v69Ev();
extern void _ZN6S199C53v70Ev();
extern void _ZN6S199C53v71Ev();
extern void _ZN6S199C53v72Ev();
extern void _ZN6S199C53v73Ev();
extern void _ZN6S199C53v74Ev();
extern void _ZN6S199C53v75Ev();
extern void _ZN6S199C53v76Ev();
extern void _ZN6S199C53v77Ev();
extern void _ZN6S199C53v78Ev();
extern void _ZN6S199C53v79Ev();
extern void _ZN6S199C53v80Ev();
extern void _ZN6S199C53v81Ev();
extern void _ZN6S199C53v82Ev();
extern void _ZN6S199C53v83Ev();
extern void _ZN6S199C53v84Ev();
extern void _ZN6S199C53v85Ev();
extern void _ZN6S199C53v86Ev();
extern void _ZN6S199C53v87Ev();
extern void _ZN6S199C53v88Ev();
extern void _ZN6S199C53v89Ev();
extern void _ZN6S199C43v90Ev();
extern void _ZN6S199C43v91Ev();
extern void _ZN6S199C43v92Ev();
extern void _ZN6S199C43v93Ev();
extern void _ZN6S199C43v94Ev();
extern void _ZN6S199C43v95Ev();
extern void _ZN6S199C43v96Ev();
extern void _ZN6S199C43v97Ev();
extern void _ZN6S199C43v98Ev();
extern void _ZN6S199C43v99Ev();
extern void _ZN6S199C44v100Ev();
extern void _ZN6S199C44v101Ev();
extern void _ZN6S199C44v102Ev();
extern void _ZN6S199C44v103Ev();
extern void _ZN6S199C44v104Ev();
extern void _ZN6S199C44v105Ev();
extern void _ZN6S199C44v106Ev();
extern void _ZN6S199C44v107Ev();
extern void _ZN6S199C44v108Ev();
extern void _ZN6S199C44v109Ev();
static  VTBL_ENTRY vtc_S199C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S199C4[0]),
  (VTBL_ENTRY)&_ZN6S199C4D1Ev,
  (VTBL_ENTRY)&_ZN6S199C4D0Ev,
  (VTBL_ENTRY)&_ZN6S199C62v4Ev,
  (VTBL_ENTRY)&_ZN6S199C62v5Ev,
  (VTBL_ENTRY)&_ZN6S199C62v6Ev,
  (VTBL_ENTRY)&_ZN6S199C62v7Ev,
  (VTBL_ENTRY)&_ZN6S199C62v8Ev,
  (VTBL_ENTRY)&_ZN6S199C62v9Ev,
  (VTBL_ENTRY)&_ZN6S199C63v10Ev,
  (VTBL_ENTRY)&_ZN6S199C63v11Ev,
  (VTBL_ENTRY)&_ZN6S199C63v12Ev,
  (VTBL_ENTRY)&_ZN6S199C63v13Ev,
  (VTBL_ENTRY)&_ZN6S199C63v14Ev,
  (VTBL_ENTRY)&_ZN6S199C63v15Ev,
  (VTBL_ENTRY)&_ZN6S199C63v16Ev,
  (VTBL_ENTRY)&_ZN6S199C63v17Ev,
  (VTBL_ENTRY)&_ZN6S199C63v18Ev,
  (VTBL_ENTRY)&_ZN6S199C63v19Ev,
  (VTBL_ENTRY)&_ZN6S199C63v20Ev,
  (VTBL_ENTRY)&_ZN6S199C63v21Ev,
  (VTBL_ENTRY)&_ZN6S199C63v22Ev,
  (VTBL_ENTRY)&_ZN6S199C63v23Ev,
  (VTBL_ENTRY)&_ZN6S199C63v24Ev,
  (VTBL_ENTRY)&_ZN6S199C63v25Ev,
  (VTBL_ENTRY)&_ZN6S199C63v26Ev,
  (VTBL_ENTRY)&_ZN6S199C63v27Ev,
  (VTBL_ENTRY)&_ZN6S199C63v28Ev,
  (VTBL_ENTRY)&_ZN6S199C63v29Ev,
  (VTBL_ENTRY)&_ZN6S199C63v30Ev,
  (VTBL_ENTRY)&_ZN6S199C63v31Ev,
  (VTBL_ENTRY)&_ZN6S199C63v32Ev,
  (VTBL_ENTRY)&_ZN6S199C63v33Ev,
  (VTBL_ENTRY)&_ZN6S199C63v34Ev,
  (VTBL_ENTRY)&_ZN6S199C63v35Ev,
  (VTBL_ENTRY)&_ZN6S199C63v36Ev,
  (VTBL_ENTRY)&_ZN6S199C63v37Ev,
  (VTBL_ENTRY)&_ZN6S199C63v38Ev,
  (VTBL_ENTRY)&_ZN6S199C63v39Ev,
  (VTBL_ENTRY)&_ZN6S199C63v40Ev,
  (VTBL_ENTRY)&_ZN6S199C63v41Ev,
  (VTBL_ENTRY)&_ZN6S199C63v42Ev,
  (VTBL_ENTRY)&_ZN6S199C63v43Ev,
  (VTBL_ENTRY)&_ZN6S199C63v44Ev,
  (VTBL_ENTRY)&_ZN6S199C63v45Ev,
  (VTBL_ENTRY)&_ZN6S199C63v46Ev,
  (VTBL_ENTRY)&_ZN6S199C63v47Ev,
  (VTBL_ENTRY)&_ZN6S199C63v48Ev,
  (VTBL_ENTRY)&_ZN6S199C63v49Ev,
  (VTBL_ENTRY)&_ZN6S199C63v50Ev,
  (VTBL_ENTRY)&_ZN6S199C63v51Ev,
  (VTBL_ENTRY)&_ZN6S199C63v52Ev,
  (VTBL_ENTRY)&_ZN6S199C63v53Ev,
  (VTBL_ENTRY)&_ZN6S199C63v54Ev,
  (VTBL_ENTRY)&_ZN6S199C63v55Ev,
  (VTBL_ENTRY)&_ZN6S199C63v56Ev,
  (VTBL_ENTRY)&_ZN6S199C63v57Ev,
  (VTBL_ENTRY)&_ZN6S199C63v58Ev,
  (VTBL_ENTRY)&_ZN6S199C63v59Ev,
  (VTBL_ENTRY)&_ZN6S199C63v60Ev,
  (VTBL_ENTRY)&_ZN6S199C63v61Ev,
  (VTBL_ENTRY)&_ZN6S199C63v62Ev,
  (VTBL_ENTRY)&_ZN6S199C63v63Ev,
  (VTBL_ENTRY)&_ZN6S199C63v64Ev,
  (VTBL_ENTRY)&_ZN6S199C63v65Ev,
  (VTBL_ENTRY)&_ZN6S199C63v66Ev,
  (VTBL_ENTRY)&_ZN6S199C63v67Ev,
  (VTBL_ENTRY)&_ZN6S199C53v68Ev,
  (VTBL_ENTRY)&_ZN6S199C53v69Ev,
  (VTBL_ENTRY)&_ZN6S199C53v70Ev,
  (VTBL_ENTRY)&_ZN6S199C53v71Ev,
  (VTBL_ENTRY)&_ZN6S199C53v72Ev,
  (VTBL_ENTRY)&_ZN6S199C53v73Ev,
  (VTBL_ENTRY)&_ZN6S199C53v74Ev,
  (VTBL_ENTRY)&_ZN6S199C53v75Ev,
  (VTBL_ENTRY)&_ZN6S199C53v76Ev,
  (VTBL_ENTRY)&_ZN6S199C53v77Ev,
  (VTBL_ENTRY)&_ZN6S199C53v78Ev,
  (VTBL_ENTRY)&_ZN6S199C53v79Ev,
  (VTBL_ENTRY)&_ZN6S199C53v80Ev,
  (VTBL_ENTRY)&_ZN6S199C53v81Ev,
  (VTBL_ENTRY)&_ZN6S199C53v82Ev,
  (VTBL_ENTRY)&_ZN6S199C53v83Ev,
  (VTBL_ENTRY)&_ZN6S199C53v84Ev,
  (VTBL_ENTRY)&_ZN6S199C53v85Ev,
  (VTBL_ENTRY)&_ZN6S199C53v86Ev,
  (VTBL_ENTRY)&_ZN6S199C53v87Ev,
  (VTBL_ENTRY)&_ZN6S199C53v88Ev,
  (VTBL_ENTRY)&_ZN6S199C53v89Ev,
  (VTBL_ENTRY)&_ZN6S199C43v90Ev,
  (VTBL_ENTRY)&_ZN6S199C43v91Ev,
  (VTBL_ENTRY)&_ZN6S199C43v92Ev,
  (VTBL_ENTRY)&_ZN6S199C43v93Ev,
  (VTBL_ENTRY)&_ZN6S199C43v94Ev,
  (VTBL_ENTRY)&_ZN6S199C43v95Ev,
  (VTBL_ENTRY)&_ZN6S199C43v96Ev,
  (VTBL_ENTRY)&_ZN6S199C43v97Ev,
  (VTBL_ENTRY)&_ZN6S199C43v98Ev,
  (VTBL_ENTRY)&_ZN6S199C43v99Ev,
  (VTBL_ENTRY)&_ZN6S199C44v100Ev,
  (VTBL_ENTRY)&_ZN6S199C44v101Ev,
  (VTBL_ENTRY)&_ZN6S199C44v102Ev,
  (VTBL_ENTRY)&_ZN6S199C44v103Ev,
  (VTBL_ENTRY)&_ZN6S199C44v104Ev,
  (VTBL_ENTRY)&_ZN6S199C44v105Ev,
  (VTBL_ENTRY)&_ZN6S199C44v106Ev,
  (VTBL_ENTRY)&_ZN6S199C44v107Ev,
  (VTBL_ENTRY)&_ZN6S199C44v108Ev,
  (VTBL_ENTRY)&_ZN6S199C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S199C4[];
extern  VTBL_ENTRY _ZTV6S199C4[];
Class_Descriptor cd_S199C4 = {  "S199C4", // class name
  bases_S199C4, 2,
  &(vtc_S199C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S199C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S199C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S199C3_nt ::~S199C3_nt(){ note_dtor("S199C3_nt", this);}
void  S199C3_nt ::v110(){vfunc_called(this, "_ZN9S199C3_nt4v110Ev");}
void  S199C3_nt ::v111(){vfunc_called(this, "_ZN9S199C3_nt4v111Ev");}
void  S199C3_nt ::v112(){vfunc_called(this, "_ZN9S199C3_nt4v112Ev");}
void  S199C3_nt ::v113(){vfunc_called(this, "_ZN9S199C3_nt4v113Ev");}
S199C3_nt ::S199C3_nt(){ note_ctor("S199C3_nt", this);} // tgen

//skip512 S199C3_nt

#else // __cplusplus

extern void _ZN9S199C3_ntC1Ev();
extern void _ZN9S199C3_ntD1Ev();
Name_Map name_map_S199C3_nt[] = {
  NSPAIR(_ZN9S199C3_ntC1Ev),
  NSPAIR(_ZN9S199C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S199C6;
extern VTBL_ENTRY _ZTI6S199C6[];
extern  VTBL_ENTRY _ZTV6S199C6[];
extern Class_Descriptor cd_S199C5;
extern VTBL_ENTRY _ZTI6S199C5[];
extern  VTBL_ENTRY _ZTV6S199C5[];
extern Class_Descriptor cd_S199C4;
extern VTBL_ENTRY _ZTI6S199C4[];
extern  VTBL_ENTRY _ZTV6S199C4[];
static Base_Class bases_S199C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S199C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S199C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S199C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S199C3_nt[];
extern void _ZN9S199C3_ntD1Ev();
extern void _ZN9S199C3_ntD0Ev();
extern void _ZN6S199C62v4Ev();
extern void _ZN6S199C62v5Ev();
extern void _ZN6S199C62v6Ev();
extern void _ZN6S199C62v7Ev();
extern void _ZN6S199C62v8Ev();
extern void _ZN6S199C62v9Ev();
extern void _ZN6S199C63v10Ev();
extern void _ZN6S199C63v11Ev();
extern void _ZN6S199C63v12Ev();
extern void _ZN6S199C63v13Ev();
extern void _ZN6S199C63v14Ev();
extern void _ZN6S199C63v15Ev();
extern void _ZN6S199C63v16Ev();
extern void _ZN6S199C63v17Ev();
extern void _ZN6S199C63v18Ev();
extern void _ZN6S199C63v19Ev();
extern void _ZN6S199C63v20Ev();
extern void _ZN6S199C63v21Ev();
extern void _ZN6S199C63v22Ev();
extern void _ZN6S199C63v23Ev();
extern void _ZN6S199C63v24Ev();
extern void _ZN6S199C63v25Ev();
extern void _ZN6S199C63v26Ev();
extern void _ZN6S199C63v27Ev();
extern void _ZN6S199C63v28Ev();
extern void _ZN6S199C63v29Ev();
extern void _ZN6S199C63v30Ev();
extern void _ZN6S199C63v31Ev();
extern void _ZN6S199C63v32Ev();
extern void _ZN6S199C63v33Ev();
extern void _ZN6S199C63v34Ev();
extern void _ZN6S199C63v35Ev();
extern void _ZN6S199C63v36Ev();
extern void _ZN6S199C63v37Ev();
extern void _ZN6S199C63v38Ev();
extern void _ZN6S199C63v39Ev();
extern void _ZN6S199C63v40Ev();
extern void _ZN6S199C63v41Ev();
extern void _ZN6S199C63v42Ev();
extern void _ZN6S199C63v43Ev();
extern void _ZN6S199C63v44Ev();
extern void _ZN6S199C63v45Ev();
extern void _ZN6S199C63v46Ev();
extern void _ZN6S199C63v47Ev();
extern void _ZN6S199C63v48Ev();
extern void _ZN6S199C63v49Ev();
extern void _ZN6S199C63v50Ev();
extern void _ZN6S199C63v51Ev();
extern void _ZN6S199C63v52Ev();
extern void _ZN6S199C63v53Ev();
extern void _ZN6S199C63v54Ev();
extern void _ZN6S199C63v55Ev();
extern void _ZN6S199C63v56Ev();
extern void _ZN6S199C63v57Ev();
extern void _ZN6S199C63v58Ev();
extern void _ZN6S199C63v59Ev();
extern void _ZN6S199C63v60Ev();
extern void _ZN6S199C63v61Ev();
extern void _ZN6S199C63v62Ev();
extern void _ZN6S199C63v63Ev();
extern void _ZN6S199C63v64Ev();
extern void _ZN6S199C63v65Ev();
extern void _ZN6S199C63v66Ev();
extern void _ZN6S199C63v67Ev();
extern void _ZN6S199C53v68Ev();
extern void _ZN6S199C53v69Ev();
extern void _ZN6S199C53v70Ev();
extern void _ZN6S199C53v71Ev();
extern void _ZN6S199C53v72Ev();
extern void _ZN6S199C53v73Ev();
extern void _ZN6S199C53v74Ev();
extern void _ZN6S199C53v75Ev();
extern void _ZN6S199C53v76Ev();
extern void _ZN6S199C53v77Ev();
extern void _ZN6S199C53v78Ev();
extern void _ZN6S199C53v79Ev();
extern void _ZN6S199C53v80Ev();
extern void _ZN6S199C53v81Ev();
extern void _ZN6S199C53v82Ev();
extern void _ZN6S199C53v83Ev();
extern void _ZN6S199C53v84Ev();
extern void _ZN6S199C53v85Ev();
extern void _ZN6S199C53v86Ev();
extern void _ZN6S199C53v87Ev();
extern void _ZN6S199C53v88Ev();
extern void _ZN6S199C53v89Ev();
extern void _ZN6S199C43v90Ev();
extern void _ZN6S199C43v91Ev();
extern void _ZN6S199C43v92Ev();
extern void _ZN6S199C43v93Ev();
extern void _ZN6S199C43v94Ev();
extern void _ZN6S199C43v95Ev();
extern void _ZN6S199C43v96Ev();
extern void _ZN6S199C43v97Ev();
extern void _ZN6S199C43v98Ev();
extern void _ZN6S199C43v99Ev();
extern void _ZN6S199C44v100Ev();
extern void _ZN6S199C44v101Ev();
extern void _ZN6S199C44v102Ev();
extern void _ZN6S199C44v103Ev();
extern void _ZN6S199C44v104Ev();
extern void _ZN6S199C44v105Ev();
extern void _ZN6S199C44v106Ev();
extern void _ZN6S199C44v107Ev();
extern void _ZN6S199C44v108Ev();
extern void _ZN6S199C44v109Ev();
extern void _ZN9S199C3_nt4v110Ev();
extern void _ZN9S199C3_nt4v111Ev();
extern void _ZN9S199C3_nt4v112Ev();
extern void _ZN9S199C3_nt4v113Ev();
static  VTBL_ENTRY vtc_S199C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S199C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S199C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S199C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S199C62v4Ev,
  (VTBL_ENTRY)&_ZN6S199C62v5Ev,
  (VTBL_ENTRY)&_ZN6S199C62v6Ev,
  (VTBL_ENTRY)&_ZN6S199C62v7Ev,
  (VTBL_ENTRY)&_ZN6S199C62v8Ev,
  (VTBL_ENTRY)&_ZN6S199C62v9Ev,
  (VTBL_ENTRY)&_ZN6S199C63v10Ev,
  (VTBL_ENTRY)&_ZN6S199C63v11Ev,
  (VTBL_ENTRY)&_ZN6S199C63v12Ev,
  (VTBL_ENTRY)&_ZN6S199C63v13Ev,
  (VTBL_ENTRY)&_ZN6S199C63v14Ev,
  (VTBL_ENTRY)&_ZN6S199C63v15Ev,
  (VTBL_ENTRY)&_ZN6S199C63v16Ev,
  (VTBL_ENTRY)&_ZN6S199C63v17Ev,
  (VTBL_ENTRY)&_ZN6S199C63v18Ev,
  (VTBL_ENTRY)&_ZN6S199C63v19Ev,
  (VTBL_ENTRY)&_ZN6S199C63v20Ev,
  (VTBL_ENTRY)&_ZN6S199C63v21Ev,
  (VTBL_ENTRY)&_ZN6S199C63v22Ev,
  (VTBL_ENTRY)&_ZN6S199C63v23Ev,
  (VTBL_ENTRY)&_ZN6S199C63v24Ev,
  (VTBL_ENTRY)&_ZN6S199C63v25Ev,
  (VTBL_ENTRY)&_ZN6S199C63v26Ev,
  (VTBL_ENTRY)&_ZN6S199C63v27Ev,
  (VTBL_ENTRY)&_ZN6S199C63v28Ev,
  (VTBL_ENTRY)&_ZN6S199C63v29Ev,
  (VTBL_ENTRY)&_ZN6S199C63v30Ev,
  (VTBL_ENTRY)&_ZN6S199C63v31Ev,
  (VTBL_ENTRY)&_ZN6S199C63v32Ev,
  (VTBL_ENTRY)&_ZN6S199C63v33Ev,
  (VTBL_ENTRY)&_ZN6S199C63v34Ev,
  (VTBL_ENTRY)&_ZN6S199C63v35Ev,
  (VTBL_ENTRY)&_ZN6S199C63v36Ev,
  (VTBL_ENTRY)&_ZN6S199C63v37Ev,
  (VTBL_ENTRY)&_ZN6S199C63v38Ev,
  (VTBL_ENTRY)&_ZN6S199C63v39Ev,
  (VTBL_ENTRY)&_ZN6S199C63v40Ev,
  (VTBL_ENTRY)&_ZN6S199C63v41Ev,
  (VTBL_ENTRY)&_ZN6S199C63v42Ev,
  (VTBL_ENTRY)&_ZN6S199C63v43Ev,
  (VTBL_ENTRY)&_ZN6S199C63v44Ev,
  (VTBL_ENTRY)&_ZN6S199C63v45Ev,
  (VTBL_ENTRY)&_ZN6S199C63v46Ev,
  (VTBL_ENTRY)&_ZN6S199C63v47Ev,
  (VTBL_ENTRY)&_ZN6S199C63v48Ev,
  (VTBL_ENTRY)&_ZN6S199C63v49Ev,
  (VTBL_ENTRY)&_ZN6S199C63v50Ev,
  (VTBL_ENTRY)&_ZN6S199C63v51Ev,
  (VTBL_ENTRY)&_ZN6S199C63v52Ev,
  (VTBL_ENTRY)&_ZN6S199C63v53Ev,
  (VTBL_ENTRY)&_ZN6S199C63v54Ev,
  (VTBL_ENTRY)&_ZN6S199C63v55Ev,
  (VTBL_ENTRY)&_ZN6S199C63v56Ev,
  (VTBL_ENTRY)&_ZN6S199C63v57Ev,
  (VTBL_ENTRY)&_ZN6S199C63v58Ev,
  (VTBL_ENTRY)&_ZN6S199C63v59Ev,
  (VTBL_ENTRY)&_ZN6S199C63v60Ev,
  (VTBL_ENTRY)&_ZN6S199C63v61Ev,
  (VTBL_ENTRY)&_ZN6S199C63v62Ev,
  (VTBL_ENTRY)&_ZN6S199C63v63Ev,
  (VTBL_ENTRY)&_ZN6S199C63v64Ev,
  (VTBL_ENTRY)&_ZN6S199C63v65Ev,
  (VTBL_ENTRY)&_ZN6S199C63v66Ev,
  (VTBL_ENTRY)&_ZN6S199C63v67Ev,
  (VTBL_ENTRY)&_ZN6S199C53v68Ev,
  (VTBL_ENTRY)&_ZN6S199C53v69Ev,
  (VTBL_ENTRY)&_ZN6S199C53v70Ev,
  (VTBL_ENTRY)&_ZN6S199C53v71Ev,
  (VTBL_ENTRY)&_ZN6S199C53v72Ev,
  (VTBL_ENTRY)&_ZN6S199C53v73Ev,
  (VTBL_ENTRY)&_ZN6S199C53v74Ev,
  (VTBL_ENTRY)&_ZN6S199C53v75Ev,
  (VTBL_ENTRY)&_ZN6S199C53v76Ev,
  (VTBL_ENTRY)&_ZN6S199C53v77Ev,
  (VTBL_ENTRY)&_ZN6S199C53v78Ev,
  (VTBL_ENTRY)&_ZN6S199C53v79Ev,
  (VTBL_ENTRY)&_ZN6S199C53v80Ev,
  (VTBL_ENTRY)&_ZN6S199C53v81Ev,
  (VTBL_ENTRY)&_ZN6S199C53v82Ev,
  (VTBL_ENTRY)&_ZN6S199C53v83Ev,
  (VTBL_ENTRY)&_ZN6S199C53v84Ev,
  (VTBL_ENTRY)&_ZN6S199C53v85Ev,
  (VTBL_ENTRY)&_ZN6S199C53v86Ev,
  (VTBL_ENTRY)&_ZN6S199C53v87Ev,
  (VTBL_ENTRY)&_ZN6S199C53v88Ev,
  (VTBL_ENTRY)&_ZN6S199C53v89Ev,
  (VTBL_ENTRY)&_ZN6S199C43v90Ev,
  (VTBL_ENTRY)&_ZN6S199C43v91Ev,
  (VTBL_ENTRY)&_ZN6S199C43v92Ev,
  (VTBL_ENTRY)&_ZN6S199C43v93Ev,
  (VTBL_ENTRY)&_ZN6S199C43v94Ev,
  (VTBL_ENTRY)&_ZN6S199C43v95Ev,
  (VTBL_ENTRY)&_ZN6S199C43v96Ev,
  (VTBL_ENTRY)&_ZN6S199C43v97Ev,
  (VTBL_ENTRY)&_ZN6S199C43v98Ev,
  (VTBL_ENTRY)&_ZN6S199C43v99Ev,
  (VTBL_ENTRY)&_ZN6S199C44v100Ev,
  (VTBL_ENTRY)&_ZN6S199C44v101Ev,
  (VTBL_ENTRY)&_ZN6S199C44v102Ev,
  (VTBL_ENTRY)&_ZN6S199C44v103Ev,
  (VTBL_ENTRY)&_ZN6S199C44v104Ev,
  (VTBL_ENTRY)&_ZN6S199C44v105Ev,
  (VTBL_ENTRY)&_ZN6S199C44v106Ev,
  (VTBL_ENTRY)&_ZN6S199C44v107Ev,
  (VTBL_ENTRY)&_ZN6S199C44v108Ev,
  (VTBL_ENTRY)&_ZN6S199C44v109Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI9S199C3_nt[];
VTBL_ENTRY *P__ZTI9S199C3_nt = _ZTI9S199C3_nt; 
extern  VTBL_ENTRY _ZTV9S199C3_nt[];
Class_Descriptor cd_S199C3_nt = {  "S199C3_nt", // class name
  bases_S199C3_nt, 3,
  &(vtc_S199C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S199C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S199C3_nt),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S199C2_nt ::~S199C2_nt(){ note_dtor("S199C2_nt", this);}
void  S199C2_nt ::v114(){vfunc_called(this, "_ZN9S199C2_nt4v114Ev");}
void  S199C2_nt ::v115(){vfunc_called(this, "_ZN9S199C2_nt4v115Ev");}
void  S199C2_nt ::v116(){vfunc_called(this, "_ZN9S199C2_nt4v116Ev");}
void  S199C2_nt ::v117(){vfunc_called(this, "_ZN9S199C2_nt4v117Ev");}
void  S199C2_nt ::v118(){vfunc_called(this, "_ZN9S199C2_nt4v118Ev");}
void  S199C2_nt ::v119(){vfunc_called(this, "_ZN9S199C2_nt4v119Ev");}
void  S199C2_nt ::v120(){vfunc_called(this, "_ZN9S199C2_nt4v120Ev");}
void  S199C2_nt ::v121(){vfunc_called(this, "_ZN9S199C2_nt4v121Ev");}
S199C2_nt ::S199C2_nt(){ note_ctor("S199C2_nt", this);} // tgen

//skip512 S199C2_nt

#else // __cplusplus

extern void _ZN9S199C2_ntC1Ev();
extern void _ZN9S199C2_ntD1Ev();
Name_Map name_map_S199C2_nt[] = {
  NSPAIR(_ZN9S199C2_ntC1Ev),
  NSPAIR(_ZN9S199C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S199C6;
extern VTBL_ENTRY _ZTI6S199C6[];
extern  VTBL_ENTRY _ZTV6S199C6[];
extern Class_Descriptor cd_S199C5;
extern VTBL_ENTRY _ZTI6S199C5[];
extern  VTBL_ENTRY _ZTV6S199C5[];
extern Class_Descriptor cd_S199C4;
extern VTBL_ENTRY _ZTI6S199C4[];
extern  VTBL_ENTRY _ZTV6S199C4[];
extern Class_Descriptor cd_S199C3_nt;
extern VTBL_ENTRY _ZTI9S199C3_nt[];
extern  VTBL_ENTRY _ZTV9S199C3_nt[];
static Base_Class bases_S199C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S199C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S199C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S199C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S199C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S199C2_nt[];
extern void _ZN9S199C2_ntD1Ev();
extern void _ZN9S199C2_ntD0Ev();
extern void _ZN6S199C62v4Ev();
extern void _ZN6S199C62v5Ev();
extern void _ZN6S199C62v6Ev();
extern void _ZN6S199C62v7Ev();
extern void _ZN6S199C62v8Ev();
extern void _ZN6S199C62v9Ev();
extern void _ZN6S199C63v10Ev();
extern void _ZN6S199C63v11Ev();
extern void _ZN6S199C63v12Ev();
extern void _ZN6S199C63v13Ev();
extern void _ZN6S199C63v14Ev();
extern void _ZN6S199C63v15Ev();
extern void _ZN6S199C63v16Ev();
extern void _ZN6S199C63v17Ev();
extern void _ZN6S199C63v18Ev();
extern void _ZN6S199C63v19Ev();
extern void _ZN6S199C63v20Ev();
extern void _ZN6S199C63v21Ev();
extern void _ZN6S199C63v22Ev();
extern void _ZN6S199C63v23Ev();
extern void _ZN6S199C63v24Ev();
extern void _ZN6S199C63v25Ev();
extern void _ZN6S199C63v26Ev();
extern void _ZN6S199C63v27Ev();
extern void _ZN6S199C63v28Ev();
extern void _ZN6S199C63v29Ev();
extern void _ZN6S199C63v30Ev();
extern void _ZN6S199C63v31Ev();
extern void _ZN6S199C63v32Ev();
extern void _ZN6S199C63v33Ev();
extern void _ZN6S199C63v34Ev();
extern void _ZN6S199C63v35Ev();
extern void _ZN6S199C63v36Ev();
extern void _ZN6S199C63v37Ev();
extern void _ZN6S199C63v38Ev();
extern void _ZN6S199C63v39Ev();
extern void _ZN6S199C63v40Ev();
extern void _ZN6S199C63v41Ev();
extern void _ZN6S199C63v42Ev();
extern void _ZN6S199C63v43Ev();
extern void _ZN6S199C63v44Ev();
extern void _ZN6S199C63v45Ev();
extern void _ZN6S199C63v46Ev();
extern void _ZN6S199C63v47Ev();
extern void _ZN6S199C63v48Ev();
extern void _ZN6S199C63v49Ev();
extern void _ZN6S199C63v50Ev();
extern void _ZN6S199C63v51Ev();
extern void _ZN6S199C63v52Ev();
extern void _ZN6S199C63v53Ev();
extern void _ZN6S199C63v54Ev();
extern void _ZN6S199C63v55Ev();
extern void _ZN6S199C63v56Ev();
extern void _ZN6S199C63v57Ev();
extern void _ZN6S199C63v58Ev();
extern void _ZN6S199C63v59Ev();
extern void _ZN6S199C63v60Ev();
extern void _ZN6S199C63v61Ev();
extern void _ZN6S199C63v62Ev();
extern void _ZN6S199C63v63Ev();
extern void _ZN6S199C63v64Ev();
extern void _ZN6S199C63v65Ev();
extern void _ZN6S199C63v66Ev();
extern void _ZN6S199C63v67Ev();
extern void _ZN6S199C53v68Ev();
extern void _ZN6S199C53v69Ev();
extern void _ZN6S199C53v70Ev();
extern void _ZN6S199C53v71Ev();
extern void _ZN6S199C53v72Ev();
extern void _ZN6S199C53v73Ev();
extern void _ZN6S199C53v74Ev();
extern void _ZN6S199C53v75Ev();
extern void _ZN6S199C53v76Ev();
extern void _ZN6S199C53v77Ev();
extern void _ZN6S199C53v78Ev();
extern void _ZN6S199C53v79Ev();
extern void _ZN6S199C53v80Ev();
extern void _ZN6S199C53v81Ev();
extern void _ZN6S199C53v82Ev();
extern void _ZN6S199C53v83Ev();
extern void _ZN6S199C53v84Ev();
extern void _ZN6S199C53v85Ev();
extern void _ZN6S199C53v86Ev();
extern void _ZN6S199C53v87Ev();
extern void _ZN6S199C53v88Ev();
extern void _ZN6S199C53v89Ev();
extern void _ZN6S199C43v90Ev();
extern void _ZN6S199C43v91Ev();
extern void _ZN6S199C43v92Ev();
extern void _ZN6S199C43v93Ev();
extern void _ZN6S199C43v94Ev();
extern void _ZN6S199C43v95Ev();
extern void _ZN6S199C43v96Ev();
extern void _ZN6S199C43v97Ev();
extern void _ZN6S199C43v98Ev();
extern void _ZN6S199C43v99Ev();
extern void _ZN6S199C44v100Ev();
extern void _ZN6S199C44v101Ev();
extern void _ZN6S199C44v102Ev();
extern void _ZN6S199C44v103Ev();
extern void _ZN6S199C44v104Ev();
extern void _ZN6S199C44v105Ev();
extern void _ZN6S199C44v106Ev();
extern void _ZN6S199C44v107Ev();
extern void _ZN6S199C44v108Ev();
extern void _ZN6S199C44v109Ev();
extern void _ZN9S199C3_nt4v110Ev();
extern void _ZN9S199C3_nt4v111Ev();
extern void _ZN9S199C3_nt4v112Ev();
extern void _ZN9S199C3_nt4v113Ev();
extern void _ZN9S199C2_nt4v114Ev();
extern void _ZN9S199C2_nt4v115Ev();
extern void _ZN9S199C2_nt4v116Ev();
extern void _ZN9S199C2_nt4v117Ev();
extern void _ZN9S199C2_nt4v118Ev();
extern void _ZN9S199C2_nt4v119Ev();
extern void _ZN9S199C2_nt4v120Ev();
extern void _ZN9S199C2_nt4v121Ev();
static  VTBL_ENTRY vtc_S199C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S199C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S199C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S199C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S199C62v4Ev,
  (VTBL_ENTRY)&_ZN6S199C62v5Ev,
  (VTBL_ENTRY)&_ZN6S199C62v6Ev,
  (VTBL_ENTRY)&_ZN6S199C62v7Ev,
  (VTBL_ENTRY)&_ZN6S199C62v8Ev,
  (VTBL_ENTRY)&_ZN6S199C62v9Ev,
  (VTBL_ENTRY)&_ZN6S199C63v10Ev,
  (VTBL_ENTRY)&_ZN6S199C63v11Ev,
  (VTBL_ENTRY)&_ZN6S199C63v12Ev,
  (VTBL_ENTRY)&_ZN6S199C63v13Ev,
  (VTBL_ENTRY)&_ZN6S199C63v14Ev,
  (VTBL_ENTRY)&_ZN6S199C63v15Ev,
  (VTBL_ENTRY)&_ZN6S199C63v16Ev,
  (VTBL_ENTRY)&_ZN6S199C63v17Ev,
  (VTBL_ENTRY)&_ZN6S199C63v18Ev,
  (VTBL_ENTRY)&_ZN6S199C63v19Ev,
  (VTBL_ENTRY)&_ZN6S199C63v20Ev,
  (VTBL_ENTRY)&_ZN6S199C63v21Ev,
  (VTBL_ENTRY)&_ZN6S199C63v22Ev,
  (VTBL_ENTRY)&_ZN6S199C63v23Ev,
  (VTBL_ENTRY)&_ZN6S199C63v24Ev,
  (VTBL_ENTRY)&_ZN6S199C63v25Ev,
  (VTBL_ENTRY)&_ZN6S199C63v26Ev,
  (VTBL_ENTRY)&_ZN6S199C63v27Ev,
  (VTBL_ENTRY)&_ZN6S199C63v28Ev,
  (VTBL_ENTRY)&_ZN6S199C63v29Ev,
  (VTBL_ENTRY)&_ZN6S199C63v30Ev,
  (VTBL_ENTRY)&_ZN6S199C63v31Ev,
  (VTBL_ENTRY)&_ZN6S199C63v32Ev,
  (VTBL_ENTRY)&_ZN6S199C63v33Ev,
  (VTBL_ENTRY)&_ZN6S199C63v34Ev,
  (VTBL_ENTRY)&_ZN6S199C63v35Ev,
  (VTBL_ENTRY)&_ZN6S199C63v36Ev,
  (VTBL_ENTRY)&_ZN6S199C63v37Ev,
  (VTBL_ENTRY)&_ZN6S199C63v38Ev,
  (VTBL_ENTRY)&_ZN6S199C63v39Ev,
  (VTBL_ENTRY)&_ZN6S199C63v40Ev,
  (VTBL_ENTRY)&_ZN6S199C63v41Ev,
  (VTBL_ENTRY)&_ZN6S199C63v42Ev,
  (VTBL_ENTRY)&_ZN6S199C63v43Ev,
  (VTBL_ENTRY)&_ZN6S199C63v44Ev,
  (VTBL_ENTRY)&_ZN6S199C63v45Ev,
  (VTBL_ENTRY)&_ZN6S199C63v46Ev,
  (VTBL_ENTRY)&_ZN6S199C63v47Ev,
  (VTBL_ENTRY)&_ZN6S199C63v48Ev,
  (VTBL_ENTRY)&_ZN6S199C63v49Ev,
  (VTBL_ENTRY)&_ZN6S199C63v50Ev,
  (VTBL_ENTRY)&_ZN6S199C63v51Ev,
  (VTBL_ENTRY)&_ZN6S199C63v52Ev,
  (VTBL_ENTRY)&_ZN6S199C63v53Ev,
  (VTBL_ENTRY)&_ZN6S199C63v54Ev,
  (VTBL_ENTRY)&_ZN6S199C63v55Ev,
  (VTBL_ENTRY)&_ZN6S199C63v56Ev,
  (VTBL_ENTRY)&_ZN6S199C63v57Ev,
  (VTBL_ENTRY)&_ZN6S199C63v58Ev,
  (VTBL_ENTRY)&_ZN6S199C63v59Ev,
  (VTBL_ENTRY)&_ZN6S199C63v60Ev,
  (VTBL_ENTRY)&_ZN6S199C63v61Ev,
  (VTBL_ENTRY)&_ZN6S199C63v62Ev,
  (VTBL_ENTRY)&_ZN6S199C63v63Ev,
  (VTBL_ENTRY)&_ZN6S199C63v64Ev,
  (VTBL_ENTRY)&_ZN6S199C63v65Ev,
  (VTBL_ENTRY)&_ZN6S199C63v66Ev,
  (VTBL_ENTRY)&_ZN6S199C63v67Ev,
  (VTBL_ENTRY)&_ZN6S199C53v68Ev,
  (VTBL_ENTRY)&_ZN6S199C53v69Ev,
  (VTBL_ENTRY)&_ZN6S199C53v70Ev,
  (VTBL_ENTRY)&_ZN6S199C53v71Ev,
  (VTBL_ENTRY)&_ZN6S199C53v72Ev,
  (VTBL_ENTRY)&_ZN6S199C53v73Ev,
  (VTBL_ENTRY)&_ZN6S199C53v74Ev,
  (VTBL_ENTRY)&_ZN6S199C53v75Ev,
  (VTBL_ENTRY)&_ZN6S199C53v76Ev,
  (VTBL_ENTRY)&_ZN6S199C53v77Ev,
  (VTBL_ENTRY)&_ZN6S199C53v78Ev,
  (VTBL_ENTRY)&_ZN6S199C53v79Ev,
  (VTBL_ENTRY)&_ZN6S199C53v80Ev,
  (VTBL_ENTRY)&_ZN6S199C53v81Ev,
  (VTBL_ENTRY)&_ZN6S199C53v82Ev,
  (VTBL_ENTRY)&_ZN6S199C53v83Ev,
  (VTBL_ENTRY)&_ZN6S199C53v84Ev,
  (VTBL_ENTRY)&_ZN6S199C53v85Ev,
  (VTBL_ENTRY)&_ZN6S199C53v86Ev,
  (VTBL_ENTRY)&_ZN6S199C53v87Ev,
  (VTBL_ENTRY)&_ZN6S199C53v88Ev,
  (VTBL_ENTRY)&_ZN6S199C53v89Ev,
  (VTBL_ENTRY)&_ZN6S199C43v90Ev,
  (VTBL_ENTRY)&_ZN6S199C43v91Ev,
  (VTBL_ENTRY)&_ZN6S199C43v92Ev,
  (VTBL_ENTRY)&_ZN6S199C43v93Ev,
  (VTBL_ENTRY)&_ZN6S199C43v94Ev,
  (VTBL_ENTRY)&_ZN6S199C43v95Ev,
  (VTBL_ENTRY)&_ZN6S199C43v96Ev,
  (VTBL_ENTRY)&_ZN6S199C43v97Ev,
  (VTBL_ENTRY)&_ZN6S199C43v98Ev,
  (VTBL_ENTRY)&_ZN6S199C43v99Ev,
  (VTBL_ENTRY)&_ZN6S199C44v100Ev,
  (VTBL_ENTRY)&_ZN6S199C44v101Ev,
  (VTBL_ENTRY)&_ZN6S199C44v102Ev,
  (VTBL_ENTRY)&_ZN6S199C44v103Ev,
  (VTBL_ENTRY)&_ZN6S199C44v104Ev,
  (VTBL_ENTRY)&_ZN6S199C44v105Ev,
  (VTBL_ENTRY)&_ZN6S199C44v106Ev,
  (VTBL_ENTRY)&_ZN6S199C44v107Ev,
  (VTBL_ENTRY)&_ZN6S199C44v108Ev,
  (VTBL_ENTRY)&_ZN6S199C44v109Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v121Ev,
};
extern VTBL_ENTRY _ZTI9S199C2_nt[];
VTBL_ENTRY *P__ZTI9S199C2_nt = _ZTI9S199C2_nt; 
extern  VTBL_ENTRY _ZTV9S199C2_nt[];
Class_Descriptor cd_S199C2_nt = {  "S199C2_nt", // class name
  bases_S199C2_nt, 4,
  &(vtc_S199C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI9S199C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S199C2_nt),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S199C1  : S199C2_nt {
  ::S499C6_nt s199c1f0;
  ::S499C37_nt s199c1f1;
  virtual  ~S199C1(); // _ZN6S199C1D1Ev
  virtual void  v1(); // _ZN6S199C12v1Ev
  virtual void  v2(); // _ZN6S199C12v2Ev
  virtual void  v3(); // _ZN6S199C12v3Ev
  S199C1(); // tgen
};
//SIG(1 S199C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC9 FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC19{ BC20{ BC11}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v1 v2 v3 FC7 FC8}


 S199C1 ::~S199C1(){ note_dtor("S199C1", this);}
void  S199C1 ::v1(){vfunc_called(this, "_ZN6S199C12v1Ev");}
void  S199C1 ::v2(){vfunc_called(this, "_ZN6S199C12v2Ev");}
void  S199C1 ::v3(){vfunc_called(this, "_ZN6S199C12v3Ev");}
S199C1 ::S199C1(){ note_ctor("S199C1", this);} // tgen

static void Test_S199C1()
{
  extern Class_Descriptor cd_S199C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,63)];
    init_test(&cd_S199C1, buf);
    S199C1 *dp, &lv = *(dp=new (buf) S199C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,248), "sizeof(S199C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S199C1)");
    check_base_class_offset(lv, (S199C6*)(S199C5*)(S199C4*)(S199C3_nt*)(S199C2_nt*), 0, "S199C1");
    check_base_class_offset(lv, (S199C5*)(S199C4*)(S199C3_nt*)(S199C2_nt*), 0, "S199C1");
    check_base_class_offset(lv, (S199C4*)(S199C3_nt*)(S199C2_nt*), 0, "S199C1");
    check_base_class_offset(lv, (S199C3_nt*)(S199C2_nt*), 0, "S199C1");
    check_base_class_offset(lv, (S199C2_nt*), 0, "S199C1");
    check_field_offset(lv, s199c1f0, ABISELECT(304,228), "S199C1.s199c1f0");
    check_field_offset(lv, s199c1f1, ABISELECT(312,236), "S199C1.s199c1f1");
    test_class_info(&lv, &cd_S199C1);
    dp->~S199C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS199C1(Test_S199C1, "S199C1", ABISELECT(328,248));

#else // __cplusplus

extern void _ZN6S199C1C1Ev();
extern void _ZN6S199C1D1Ev();
Name_Map name_map_S199C1[] = {
  NSPAIR(_ZN6S199C1C1Ev),
  NSPAIR(_ZN6S199C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S199C6;
extern VTBL_ENTRY _ZTI6S199C6[];
extern  VTBL_ENTRY _ZTV6S199C6[];
extern Class_Descriptor cd_S199C5;
extern VTBL_ENTRY _ZTI6S199C5[];
extern  VTBL_ENTRY _ZTV6S199C5[];
extern Class_Descriptor cd_S199C4;
extern VTBL_ENTRY _ZTI6S199C4[];
extern  VTBL_ENTRY _ZTV6S199C4[];
extern Class_Descriptor cd_S199C3_nt;
extern VTBL_ENTRY _ZTI9S199C3_nt[];
extern  VTBL_ENTRY _ZTV9S199C3_nt[];
extern Class_Descriptor cd_S199C2_nt;
extern VTBL_ENTRY _ZTI9S199C2_nt[];
extern  VTBL_ENTRY _ZTV9S199C2_nt[];
static Base_Class bases_S199C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S199C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S199C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S199C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S199C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S199C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S199C1[];
extern void _ZN6S199C1D1Ev();
extern void _ZN6S199C1D0Ev();
extern void _ZN6S199C62v4Ev();
extern void _ZN6S199C62v5Ev();
extern void _ZN6S199C62v6Ev();
extern void _ZN6S199C62v7Ev();
extern void _ZN6S199C62v8Ev();
extern void _ZN6S199C62v9Ev();
extern void _ZN6S199C63v10Ev();
extern void _ZN6S199C63v11Ev();
extern void _ZN6S199C63v12Ev();
extern void _ZN6S199C63v13Ev();
extern void _ZN6S199C63v14Ev();
extern void _ZN6S199C63v15Ev();
extern void _ZN6S199C63v16Ev();
extern void _ZN6S199C63v17Ev();
extern void _ZN6S199C63v18Ev();
extern void _ZN6S199C63v19Ev();
extern void _ZN6S199C63v20Ev();
extern void _ZN6S199C63v21Ev();
extern void _ZN6S199C63v22Ev();
extern void _ZN6S199C63v23Ev();
extern void _ZN6S199C63v24Ev();
extern void _ZN6S199C63v25Ev();
extern void _ZN6S199C63v26Ev();
extern void _ZN6S199C63v27Ev();
extern void _ZN6S199C63v28Ev();
extern void _ZN6S199C63v29Ev();
extern void _ZN6S199C63v30Ev();
extern void _ZN6S199C63v31Ev();
extern void _ZN6S199C63v32Ev();
extern void _ZN6S199C63v33Ev();
extern void _ZN6S199C63v34Ev();
extern void _ZN6S199C63v35Ev();
extern void _ZN6S199C63v36Ev();
extern void _ZN6S199C63v37Ev();
extern void _ZN6S199C63v38Ev();
extern void _ZN6S199C63v39Ev();
extern void _ZN6S199C63v40Ev();
extern void _ZN6S199C63v41Ev();
extern void _ZN6S199C63v42Ev();
extern void _ZN6S199C63v43Ev();
extern void _ZN6S199C63v44Ev();
extern void _ZN6S199C63v45Ev();
extern void _ZN6S199C63v46Ev();
extern void _ZN6S199C63v47Ev();
extern void _ZN6S199C63v48Ev();
extern void _ZN6S199C63v49Ev();
extern void _ZN6S199C63v50Ev();
extern void _ZN6S199C63v51Ev();
extern void _ZN6S199C63v52Ev();
extern void _ZN6S199C63v53Ev();
extern void _ZN6S199C63v54Ev();
extern void _ZN6S199C63v55Ev();
extern void _ZN6S199C63v56Ev();
extern void _ZN6S199C63v57Ev();
extern void _ZN6S199C63v58Ev();
extern void _ZN6S199C63v59Ev();
extern void _ZN6S199C63v60Ev();
extern void _ZN6S199C63v61Ev();
extern void _ZN6S199C63v62Ev();
extern void _ZN6S199C63v63Ev();
extern void _ZN6S199C63v64Ev();
extern void _ZN6S199C63v65Ev();
extern void _ZN6S199C63v66Ev();
extern void _ZN6S199C63v67Ev();
extern void _ZN6S199C53v68Ev();
extern void _ZN6S199C53v69Ev();
extern void _ZN6S199C53v70Ev();
extern void _ZN6S199C53v71Ev();
extern void _ZN6S199C53v72Ev();
extern void _ZN6S199C53v73Ev();
extern void _ZN6S199C53v74Ev();
extern void _ZN6S199C53v75Ev();
extern void _ZN6S199C53v76Ev();
extern void _ZN6S199C53v77Ev();
extern void _ZN6S199C53v78Ev();
extern void _ZN6S199C53v79Ev();
extern void _ZN6S199C53v80Ev();
extern void _ZN6S199C53v81Ev();
extern void _ZN6S199C53v82Ev();
extern void _ZN6S199C53v83Ev();
extern void _ZN6S199C53v84Ev();
extern void _ZN6S199C53v85Ev();
extern void _ZN6S199C53v86Ev();
extern void _ZN6S199C53v87Ev();
extern void _ZN6S199C53v88Ev();
extern void _ZN6S199C53v89Ev();
extern void _ZN6S199C43v90Ev();
extern void _ZN6S199C43v91Ev();
extern void _ZN6S199C43v92Ev();
extern void _ZN6S199C43v93Ev();
extern void _ZN6S199C43v94Ev();
extern void _ZN6S199C43v95Ev();
extern void _ZN6S199C43v96Ev();
extern void _ZN6S199C43v97Ev();
extern void _ZN6S199C43v98Ev();
extern void _ZN6S199C43v99Ev();
extern void _ZN6S199C44v100Ev();
extern void _ZN6S199C44v101Ev();
extern void _ZN6S199C44v102Ev();
extern void _ZN6S199C44v103Ev();
extern void _ZN6S199C44v104Ev();
extern void _ZN6S199C44v105Ev();
extern void _ZN6S199C44v106Ev();
extern void _ZN6S199C44v107Ev();
extern void _ZN6S199C44v108Ev();
extern void _ZN6S199C44v109Ev();
extern void _ZN9S199C3_nt4v110Ev();
extern void _ZN9S199C3_nt4v111Ev();
extern void _ZN9S199C3_nt4v112Ev();
extern void _ZN9S199C3_nt4v113Ev();
extern void _ZN9S199C2_nt4v114Ev();
extern void _ZN9S199C2_nt4v115Ev();
extern void _ZN9S199C2_nt4v116Ev();
extern void _ZN9S199C2_nt4v117Ev();
extern void _ZN9S199C2_nt4v118Ev();
extern void _ZN9S199C2_nt4v119Ev();
extern void _ZN9S199C2_nt4v120Ev();
extern void _ZN9S199C2_nt4v121Ev();
extern void _ZN6S199C12v1Ev();
extern void _ZN6S199C12v2Ev();
extern void _ZN6S199C12v3Ev();
static  VTBL_ENTRY vtc_S199C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S199C1[0]),
  (VTBL_ENTRY)&_ZN6S199C1D1Ev,
  (VTBL_ENTRY)&_ZN6S199C1D0Ev,
  (VTBL_ENTRY)&_ZN6S199C62v4Ev,
  (VTBL_ENTRY)&_ZN6S199C62v5Ev,
  (VTBL_ENTRY)&_ZN6S199C62v6Ev,
  (VTBL_ENTRY)&_ZN6S199C62v7Ev,
  (VTBL_ENTRY)&_ZN6S199C62v8Ev,
  (VTBL_ENTRY)&_ZN6S199C62v9Ev,
  (VTBL_ENTRY)&_ZN6S199C63v10Ev,
  (VTBL_ENTRY)&_ZN6S199C63v11Ev,
  (VTBL_ENTRY)&_ZN6S199C63v12Ev,
  (VTBL_ENTRY)&_ZN6S199C63v13Ev,
  (VTBL_ENTRY)&_ZN6S199C63v14Ev,
  (VTBL_ENTRY)&_ZN6S199C63v15Ev,
  (VTBL_ENTRY)&_ZN6S199C63v16Ev,
  (VTBL_ENTRY)&_ZN6S199C63v17Ev,
  (VTBL_ENTRY)&_ZN6S199C63v18Ev,
  (VTBL_ENTRY)&_ZN6S199C63v19Ev,
  (VTBL_ENTRY)&_ZN6S199C63v20Ev,
  (VTBL_ENTRY)&_ZN6S199C63v21Ev,
  (VTBL_ENTRY)&_ZN6S199C63v22Ev,
  (VTBL_ENTRY)&_ZN6S199C63v23Ev,
  (VTBL_ENTRY)&_ZN6S199C63v24Ev,
  (VTBL_ENTRY)&_ZN6S199C63v25Ev,
  (VTBL_ENTRY)&_ZN6S199C63v26Ev,
  (VTBL_ENTRY)&_ZN6S199C63v27Ev,
  (VTBL_ENTRY)&_ZN6S199C63v28Ev,
  (VTBL_ENTRY)&_ZN6S199C63v29Ev,
  (VTBL_ENTRY)&_ZN6S199C63v30Ev,
  (VTBL_ENTRY)&_ZN6S199C63v31Ev,
  (VTBL_ENTRY)&_ZN6S199C63v32Ev,
  (VTBL_ENTRY)&_ZN6S199C63v33Ev,
  (VTBL_ENTRY)&_ZN6S199C63v34Ev,
  (VTBL_ENTRY)&_ZN6S199C63v35Ev,
  (VTBL_ENTRY)&_ZN6S199C63v36Ev,
  (VTBL_ENTRY)&_ZN6S199C63v37Ev,
  (VTBL_ENTRY)&_ZN6S199C63v38Ev,
  (VTBL_ENTRY)&_ZN6S199C63v39Ev,
  (VTBL_ENTRY)&_ZN6S199C63v40Ev,
  (VTBL_ENTRY)&_ZN6S199C63v41Ev,
  (VTBL_ENTRY)&_ZN6S199C63v42Ev,
  (VTBL_ENTRY)&_ZN6S199C63v43Ev,
  (VTBL_ENTRY)&_ZN6S199C63v44Ev,
  (VTBL_ENTRY)&_ZN6S199C63v45Ev,
  (VTBL_ENTRY)&_ZN6S199C63v46Ev,
  (VTBL_ENTRY)&_ZN6S199C63v47Ev,
  (VTBL_ENTRY)&_ZN6S199C63v48Ev,
  (VTBL_ENTRY)&_ZN6S199C63v49Ev,
  (VTBL_ENTRY)&_ZN6S199C63v50Ev,
  (VTBL_ENTRY)&_ZN6S199C63v51Ev,
  (VTBL_ENTRY)&_ZN6S199C63v52Ev,
  (VTBL_ENTRY)&_ZN6S199C63v53Ev,
  (VTBL_ENTRY)&_ZN6S199C63v54Ev,
  (VTBL_ENTRY)&_ZN6S199C63v55Ev,
  (VTBL_ENTRY)&_ZN6S199C63v56Ev,
  (VTBL_ENTRY)&_ZN6S199C63v57Ev,
  (VTBL_ENTRY)&_ZN6S199C63v58Ev,
  (VTBL_ENTRY)&_ZN6S199C63v59Ev,
  (VTBL_ENTRY)&_ZN6S199C63v60Ev,
  (VTBL_ENTRY)&_ZN6S199C63v61Ev,
  (VTBL_ENTRY)&_ZN6S199C63v62Ev,
  (VTBL_ENTRY)&_ZN6S199C63v63Ev,
  (VTBL_ENTRY)&_ZN6S199C63v64Ev,
  (VTBL_ENTRY)&_ZN6S199C63v65Ev,
  (VTBL_ENTRY)&_ZN6S199C63v66Ev,
  (VTBL_ENTRY)&_ZN6S199C63v67Ev,
  (VTBL_ENTRY)&_ZN6S199C53v68Ev,
  (VTBL_ENTRY)&_ZN6S199C53v69Ev,
  (VTBL_ENTRY)&_ZN6S199C53v70Ev,
  (VTBL_ENTRY)&_ZN6S199C53v71Ev,
  (VTBL_ENTRY)&_ZN6S199C53v72Ev,
  (VTBL_ENTRY)&_ZN6S199C53v73Ev,
  (VTBL_ENTRY)&_ZN6S199C53v74Ev,
  (VTBL_ENTRY)&_ZN6S199C53v75Ev,
  (VTBL_ENTRY)&_ZN6S199C53v76Ev,
  (VTBL_ENTRY)&_ZN6S199C53v77Ev,
  (VTBL_ENTRY)&_ZN6S199C53v78Ev,
  (VTBL_ENTRY)&_ZN6S199C53v79Ev,
  (VTBL_ENTRY)&_ZN6S199C53v80Ev,
  (VTBL_ENTRY)&_ZN6S199C53v81Ev,
  (VTBL_ENTRY)&_ZN6S199C53v82Ev,
  (VTBL_ENTRY)&_ZN6S199C53v83Ev,
  (VTBL_ENTRY)&_ZN6S199C53v84Ev,
  (VTBL_ENTRY)&_ZN6S199C53v85Ev,
  (VTBL_ENTRY)&_ZN6S199C53v86Ev,
  (VTBL_ENTRY)&_ZN6S199C53v87Ev,
  (VTBL_ENTRY)&_ZN6S199C53v88Ev,
  (VTBL_ENTRY)&_ZN6S199C53v89Ev,
  (VTBL_ENTRY)&_ZN6S199C43v90Ev,
  (VTBL_ENTRY)&_ZN6S199C43v91Ev,
  (VTBL_ENTRY)&_ZN6S199C43v92Ev,
  (VTBL_ENTRY)&_ZN6S199C43v93Ev,
  (VTBL_ENTRY)&_ZN6S199C43v94Ev,
  (VTBL_ENTRY)&_ZN6S199C43v95Ev,
  (VTBL_ENTRY)&_ZN6S199C43v96Ev,
  (VTBL_ENTRY)&_ZN6S199C43v97Ev,
  (VTBL_ENTRY)&_ZN6S199C43v98Ev,
  (VTBL_ENTRY)&_ZN6S199C43v99Ev,
  (VTBL_ENTRY)&_ZN6S199C44v100Ev,
  (VTBL_ENTRY)&_ZN6S199C44v101Ev,
  (VTBL_ENTRY)&_ZN6S199C44v102Ev,
  (VTBL_ENTRY)&_ZN6S199C44v103Ev,
  (VTBL_ENTRY)&_ZN6S199C44v104Ev,
  (VTBL_ENTRY)&_ZN6S199C44v105Ev,
  (VTBL_ENTRY)&_ZN6S199C44v106Ev,
  (VTBL_ENTRY)&_ZN6S199C44v107Ev,
  (VTBL_ENTRY)&_ZN6S199C44v108Ev,
  (VTBL_ENTRY)&_ZN6S199C44v109Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S199C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S199C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN6S199C12v1Ev,
  (VTBL_ENTRY)&_ZN6S199C12v2Ev,
  (VTBL_ENTRY)&_ZN6S199C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S199C1[];
extern  VTBL_ENTRY _ZTV6S199C1[];
Class_Descriptor cd_S199C1 = {  "S199C1", // class name
  bases_S199C1, 5,
  &(vtc_S199C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,248), // object size
  NSPAIRA(_ZTI6S199C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S199C1),125, //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  S584C5  {
  int s584c5f0;
  __tsi64 s584c5f1;
  void *s584c5f2[4];
  int s584c5f3[2];
  void *s584c5f4;
  ::S499C6_nt s584c5f5;
  void *s584c5f6[2];
  virtual  ~S584C5(); // _ZN6S584C5D1Ev
  virtual void  v4(); // _ZN6S584C52v4Ev
  virtual void  v5(); // _ZN6S584C52v5Ev
  virtual void  v6(); // _ZN6S584C52v6Ev
  virtual void  v7(); // _ZN6S584C52v7Ev
  virtual void  v8(); // _ZN6S584C52v8Ev
  virtual void  v9(); // _ZN6S584C52v9Ev
  virtual void  v10(); // _ZN6S584C53v10Ev
  virtual void  v11(); // _ZN6S584C53v11Ev
  virtual void  v12(); // _ZN6S584C53v12Ev
  virtual void  v13(); // _ZN6S584C53v13Ev
  virtual void  v14(); // _ZN6S584C53v14Ev
  virtual void  v15(); // _ZN6S584C53v15Ev
  virtual void  v16(); // _ZN6S584C53v16Ev
  virtual void  v17(); // _ZN6S584C53v17Ev
  virtual void  v18(); // _ZN6S584C53v18Ev
  virtual void  v19(); // _ZN6S584C53v19Ev
  virtual void  v20(); // _ZN6S584C53v20Ev
  virtual void  v21(); // _ZN6S584C53v21Ev
  virtual void  v22(); // _ZN6S584C53v22Ev
  virtual void  v23(); // _ZN6S584C53v23Ev
  virtual void  v24(); // _ZN6S584C53v24Ev
  virtual void  v25(); // _ZN6S584C53v25Ev
  virtual void  v26(); // _ZN6S584C53v26Ev
  virtual void  v27(); // _ZN6S584C53v27Ev
  virtual void  v28(); // _ZN6S584C53v28Ev
  virtual void  v29(); // _ZN6S584C53v29Ev
  virtual void  v30(); // _ZN6S584C53v30Ev
  virtual void  v31(); // _ZN6S584C53v31Ev
  virtual void  v32(); // _ZN6S584C53v32Ev
  virtual void  v33(); // _ZN6S584C53v33Ev
  virtual void  v34(); // _ZN6S584C53v34Ev
  virtual void  v35(); // _ZN6S584C53v35Ev
  virtual void  v36(); // _ZN6S584C53v36Ev
  virtual void  v37(); // _ZN6S584C53v37Ev
  virtual void  v38(); // _ZN6S584C53v38Ev
  virtual void  v39(); // _ZN6S584C53v39Ev
  virtual void  v40(); // _ZN6S584C53v40Ev
  virtual void  v41(); // _ZN6S584C53v41Ev
  virtual void  v42(); // _ZN6S584C53v42Ev
  virtual void  v43(); // _ZN6S584C53v43Ev
  virtual void  v44(); // _ZN6S584C53v44Ev
  virtual void  v45(); // _ZN6S584C53v45Ev
  virtual void  v46(); // _ZN6S584C53v46Ev
  virtual void  v47(); // _ZN6S584C53v47Ev
  virtual void  v48(); // _ZN6S584C53v48Ev
  virtual void  v49(); // _ZN6S584C53v49Ev
  virtual void  v50(); // _ZN6S584C53v50Ev
  virtual void  v51(); // _ZN6S584C53v51Ev
  virtual void  v52(); // _ZN6S584C53v52Ev
  virtual void  v53(); // _ZN6S584C53v53Ev
  virtual void  v54(); // _ZN6S584C53v54Ev
  virtual void  v55(); // _ZN6S584C53v55Ev
  virtual void  v56(); // _ZN6S584C53v56Ev
  virtual void  v57(); // _ZN6S584C53v57Ev
  virtual void  v58(); // _ZN6S584C53v58Ev
  virtual void  v59(); // _ZN6S584C53v59Ev
  virtual void  v60(); // _ZN6S584C53v60Ev
  virtual void  v61(); // _ZN6S584C53v61Ev
  virtual void  v62(); // _ZN6S584C53v62Ev
  virtual void  v63(); // _ZN6S584C53v63Ev
  virtual void  v64(); // _ZN6S584C53v64Ev
  virtual void  v65(); // _ZN6S584C53v65Ev
  virtual void  v66(); // _ZN6S584C53v66Ev
  virtual void  v67(); // _ZN6S584C53v67Ev
  S584C5(); // tgen
};
//SIG(-1 S584C5) 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]}


 S584C5 ::~S584C5(){ note_dtor("S584C5", this);}
void  S584C5 ::v4(){vfunc_called(this, "_ZN6S584C52v4Ev");}
void  S584C5 ::v5(){vfunc_called(this, "_ZN6S584C52v5Ev");}
void  S584C5 ::v6(){vfunc_called(this, "_ZN6S584C52v6Ev");}
void  S584C5 ::v7(){vfunc_called(this, "_ZN6S584C52v7Ev");}
void  S584C5 ::v8(){vfunc_called(this, "_ZN6S584C52v8Ev");}
void  S584C5 ::v9(){vfunc_called(this, "_ZN6S584C52v9Ev");}
void  S584C5 ::v10(){vfunc_called(this, "_ZN6S584C53v10Ev");}
void  S584C5 ::v11(){vfunc_called(this, "_ZN6S584C53v11Ev");}
void  S584C5 ::v12(){vfunc_called(this, "_ZN6S584C53v12Ev");}
void  S584C5 ::v13(){vfunc_called(this, "_ZN6S584C53v13Ev");}
void  S584C5 ::v14(){vfunc_called(this, "_ZN6S584C53v14Ev");}
void  S584C5 ::v15(){vfunc_called(this, "_ZN6S584C53v15Ev");}
void  S584C5 ::v16(){vfunc_called(this, "_ZN6S584C53v16Ev");}
void  S584C5 ::v17(){vfunc_called(this, "_ZN6S584C53v17Ev");}
void  S584C5 ::v18(){vfunc_called(this, "_ZN6S584C53v18Ev");}
void  S584C5 ::v19(){vfunc_called(this, "_ZN6S584C53v19Ev");}
void  S584C5 ::v20(){vfunc_called(this, "_ZN6S584C53v20Ev");}
void  S584C5 ::v21(){vfunc_called(this, "_ZN6S584C53v21Ev");}
void  S584C5 ::v22(){vfunc_called(this, "_ZN6S584C53v22Ev");}
void  S584C5 ::v23(){vfunc_called(this, "_ZN6S584C53v23Ev");}
void  S584C5 ::v24(){vfunc_called(this, "_ZN6S584C53v24Ev");}
void  S584C5 ::v25(){vfunc_called(this, "_ZN6S584C53v25Ev");}
void  S584C5 ::v26(){vfunc_called(this, "_ZN6S584C53v26Ev");}
void  S584C5 ::v27(){vfunc_called(this, "_ZN6S584C53v27Ev");}
void  S584C5 ::v28(){vfunc_called(this, "_ZN6S584C53v28Ev");}
void  S584C5 ::v29(){vfunc_called(this, "_ZN6S584C53v29Ev");}
void  S584C5 ::v30(){vfunc_called(this, "_ZN6S584C53v30Ev");}
void  S584C5 ::v31(){vfunc_called(this, "_ZN6S584C53v31Ev");}
void  S584C5 ::v32(){vfunc_called(this, "_ZN6S584C53v32Ev");}
void  S584C5 ::v33(){vfunc_called(this, "_ZN6S584C53v33Ev");}
void  S584C5 ::v34(){vfunc_called(this, "_ZN6S584C53v34Ev");}
void  S584C5 ::v35(){vfunc_called(this, "_ZN6S584C53v35Ev");}
void  S584C5 ::v36(){vfunc_called(this, "_ZN6S584C53v36Ev");}
void  S584C5 ::v37(){vfunc_called(this, "_ZN6S584C53v37Ev");}
void  S584C5 ::v38(){vfunc_called(this, "_ZN6S584C53v38Ev");}
void  S584C5 ::v39(){vfunc_called(this, "_ZN6S584C53v39Ev");}
void  S584C5 ::v40(){vfunc_called(this, "_ZN6S584C53v40Ev");}
void  S584C5 ::v41(){vfunc_called(this, "_ZN6S584C53v41Ev");}
void  S584C5 ::v42(){vfunc_called(this, "_ZN6S584C53v42Ev");}
void  S584C5 ::v43(){vfunc_called(this, "_ZN6S584C53v43Ev");}
void  S584C5 ::v44(){vfunc_called(this, "_ZN6S584C53v44Ev");}
void  S584C5 ::v45(){vfunc_called(this, "_ZN6S584C53v45Ev");}
void  S584C5 ::v46(){vfunc_called(this, "_ZN6S584C53v46Ev");}
void  S584C5 ::v47(){vfunc_called(this, "_ZN6S584C53v47Ev");}
void  S584C5 ::v48(){vfunc_called(this, "_ZN6S584C53v48Ev");}
void  S584C5 ::v49(){vfunc_called(this, "_ZN6S584C53v49Ev");}
void  S584C5 ::v50(){vfunc_called(this, "_ZN6S584C53v50Ev");}
void  S584C5 ::v51(){vfunc_called(this, "_ZN6S584C53v51Ev");}
void  S584C5 ::v52(){vfunc_called(this, "_ZN6S584C53v52Ev");}
void  S584C5 ::v53(){vfunc_called(this, "_ZN6S584C53v53Ev");}
void  S584C5 ::v54(){vfunc_called(this, "_ZN6S584C53v54Ev");}
void  S584C5 ::v55(){vfunc_called(this, "_ZN6S584C53v55Ev");}
void  S584C5 ::v56(){vfunc_called(this, "_ZN6S584C53v56Ev");}
void  S584C5 ::v57(){vfunc_called(this, "_ZN6S584C53v57Ev");}
void  S584C5 ::v58(){vfunc_called(this, "_ZN6S584C53v58Ev");}
void  S584C5 ::v59(){vfunc_called(this, "_ZN6S584C53v59Ev");}
void  S584C5 ::v60(){vfunc_called(this, "_ZN6S584C53v60Ev");}
void  S584C5 ::v61(){vfunc_called(this, "_ZN6S584C53v61Ev");}
void  S584C5 ::v62(){vfunc_called(this, "_ZN6S584C53v62Ev");}
void  S584C5 ::v63(){vfunc_called(this, "_ZN6S584C53v63Ev");}
void  S584C5 ::v64(){vfunc_called(this, "_ZN6S584C53v64Ev");}
void  S584C5 ::v65(){vfunc_called(this, "_ZN6S584C53v65Ev");}
void  S584C5 ::v66(){vfunc_called(this, "_ZN6S584C53v66Ev");}
void  S584C5 ::v67(){vfunc_called(this, "_ZN6S584C53v67Ev");}
S584C5 ::S584C5(){ note_ctor("S584C5", this);} // tgen

static void Test_S584C5()
{
  extern Class_Descriptor cd_S584C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S584C5, buf);
    S584C5 *dp, &lv = *(dp=new (buf) S584C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S584C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S584C5)");
    check_field_offset(lv, s584c5f0, ABISELECT(8,4), "S584C5.s584c5f0");
    check_field_offset(lv, s584c5f1, ABISELECT(16,8), "S584C5.s584c5f1");
    check_field_offset(lv, s584c5f2, ABISELECT(24,16), "S584C5.s584c5f2");
    check_field_offset(lv, s584c5f3, ABISELECT(56,32), "S584C5.s584c5f3");
    check_field_offset(lv, s584c5f4, ABISELECT(64,40), "S584C5.s584c5f4");
    check_field_offset(lv, s584c5f5, ABISELECT(72,44), "S584C5.s584c5f5");
    check_field_offset(lv, s584c5f6, ABISELECT(80,52), "S584C5.s584c5f6");
    test_class_info(&lv, &cd_S584C5);
    dp->~S584C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS584C5(Test_S584C5, "S584C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S584C5C1Ev();
extern void _ZN6S584C5D1Ev();
Name_Map name_map_S584C5[] = {
  NSPAIR(_ZN6S584C5C1Ev),
  NSPAIR(_ZN6S584C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S584C5[];
extern void _ZN6S584C5D1Ev();
extern void _ZN6S584C5D0Ev();
extern void _ZN6S584C52v4Ev();
extern void _ZN6S584C52v5Ev();
extern void _ZN6S584C52v6Ev();
extern void _ZN6S584C52v7Ev();
extern void _ZN6S584C52v8Ev();
extern void _ZN6S584C52v9Ev();
extern void _ZN6S584C53v10Ev();
extern void _ZN6S584C53v11Ev();
extern void _ZN6S584C53v12Ev();
extern void _ZN6S584C53v13Ev();
extern void _ZN6S584C53v14Ev();
extern void _ZN6S584C53v15Ev();
extern void _ZN6S584C53v16Ev();
extern void _ZN6S584C53v17Ev();
extern void _ZN6S584C53v18Ev();
extern void _ZN6S584C53v19Ev();
extern void _ZN6S584C53v20Ev();
extern void _ZN6S584C53v21Ev();
extern void _ZN6S584C53v22Ev();
extern void _ZN6S584C53v23Ev();
extern void _ZN6S584C53v24Ev();
extern void _ZN6S584C53v25Ev();
extern void _ZN6S584C53v26Ev();
extern void _ZN6S584C53v27Ev();
extern void _ZN6S584C53v28Ev();
extern void _ZN6S584C53v29Ev();
extern void _ZN6S584C53v30Ev();
extern void _ZN6S584C53v31Ev();
extern void _ZN6S584C53v32Ev();
extern void _ZN6S584C53v33Ev();
extern void _ZN6S584C53v34Ev();
extern void _ZN6S584C53v35Ev();
extern void _ZN6S584C53v36Ev();
extern void _ZN6S584C53v37Ev();
extern void _ZN6S584C53v38Ev();
extern void _ZN6S584C53v39Ev();
extern void _ZN6S584C53v40Ev();
extern void _ZN6S584C53v41Ev();
extern void _ZN6S584C53v42Ev();
extern void _ZN6S584C53v43Ev();
extern void _ZN6S584C53v44Ev();
extern void _ZN6S584C53v45Ev();
extern void _ZN6S584C53v46Ev();
extern void _ZN6S584C53v47Ev();
extern void _ZN6S584C53v48Ev();
extern void _ZN6S584C53v49Ev();
extern void _ZN6S584C53v50Ev();
extern void _ZN6S584C53v51Ev();
extern void _ZN6S584C53v52Ev();
extern void _ZN6S584C53v53Ev();
extern void _ZN6S584C53v54Ev();
extern void _ZN6S584C53v55Ev();
extern void _ZN6S584C53v56Ev();
extern void _ZN6S584C53v57Ev();
extern void _ZN6S584C53v58Ev();
extern void _ZN6S584C53v59Ev();
extern void _ZN6S584C53v60Ev();
extern void _ZN6S584C53v61Ev();
extern void _ZN6S584C53v62Ev();
extern void _ZN6S584C53v63Ev();
extern void _ZN6S584C53v64Ev();
extern void _ZN6S584C53v65Ev();
extern void _ZN6S584C53v66Ev();
extern void _ZN6S584C53v67Ev();
static  VTBL_ENTRY vtc_S584C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S584C5[0]),
  (VTBL_ENTRY)&_ZN6S584C5D1Ev,
  (VTBL_ENTRY)&_ZN6S584C5D0Ev,
  (VTBL_ENTRY)&_ZN6S584C52v4Ev,
  (VTBL_ENTRY)&_ZN6S584C52v5Ev,
  (VTBL_ENTRY)&_ZN6S584C52v6Ev,
  (VTBL_ENTRY)&_ZN6S584C52v7Ev,
  (VTBL_ENTRY)&_ZN6S584C52v8Ev,
  (VTBL_ENTRY)&_ZN6S584C52v9Ev,
  (VTBL_ENTRY)&_ZN6S584C53v10Ev,
  (VTBL_ENTRY)&_ZN6S584C53v11Ev,
  (VTBL_ENTRY)&_ZN6S584C53v12Ev,
  (VTBL_ENTRY)&_ZN6S584C53v13Ev,
  (VTBL_ENTRY)&_ZN6S584C53v14Ev,
  (VTBL_ENTRY)&_ZN6S584C53v15Ev,
  (VTBL_ENTRY)&_ZN6S584C53v16Ev,
  (VTBL_ENTRY)&_ZN6S584C53v17Ev,
  (VTBL_ENTRY)&_ZN6S584C53v18Ev,
  (VTBL_ENTRY)&_ZN6S584C53v19Ev,
  (VTBL_ENTRY)&_ZN6S584C53v20Ev,
  (VTBL_ENTRY)&_ZN6S584C53v21Ev,
  (VTBL_ENTRY)&_ZN6S584C53v22Ev,
  (VTBL_ENTRY)&_ZN6S584C53v23Ev,
  (VTBL_ENTRY)&_ZN6S584C53v24Ev,
  (VTBL_ENTRY)&_ZN6S584C53v25Ev,
  (VTBL_ENTRY)&_ZN6S584C53v26Ev,
  (VTBL_ENTRY)&_ZN6S584C53v27Ev,
  (VTBL_ENTRY)&_ZN6S584C53v28Ev,
  (VTBL_ENTRY)&_ZN6S584C53v29Ev,
  (VTBL_ENTRY)&_ZN6S584C53v30Ev,
  (VTBL_ENTRY)&_ZN6S584C53v31Ev,
  (VTBL_ENTRY)&_ZN6S584C53v32Ev,
  (VTBL_ENTRY)&_ZN6S584C53v33Ev,
  (VTBL_ENTRY)&_ZN6S584C53v34Ev,
  (VTBL_ENTRY)&_ZN6S584C53v35Ev,
  (VTBL_ENTRY)&_ZN6S584C53v36Ev,
  (VTBL_ENTRY)&_ZN6S584C53v37Ev,
  (VTBL_ENTRY)&_ZN6S584C53v38Ev,
  (VTBL_ENTRY)&_ZN6S584C53v39Ev,
  (VTBL_ENTRY)&_ZN6S584C53v40Ev,
  (VTBL_ENTRY)&_ZN6S584C53v41Ev,
  (VTBL_ENTRY)&_ZN6S584C53v42Ev,
  (VTBL_ENTRY)&_ZN6S584C53v43Ev,
  (VTBL_ENTRY)&_ZN6S584C53v44Ev,
  (VTBL_ENTRY)&_ZN6S584C53v45Ev,
  (VTBL_ENTRY)&_ZN6S584C53v46Ev,
  (VTBL_ENTRY)&_ZN6S584C53v47Ev,
  (VTBL_ENTRY)&_ZN6S584C53v48Ev,
  (VTBL_ENTRY)&_ZN6S584C53v49Ev,
  (VTBL_ENTRY)&_ZN6S584C53v50Ev,
  (VTBL_ENTRY)&_ZN6S584C53v51Ev,
  (VTBL_ENTRY)&_ZN6S584C53v52Ev,
  (VTBL_ENTRY)&_ZN6S584C53v53Ev,
  (VTBL_ENTRY)&_ZN6S584C53v54Ev,
  (VTBL_ENTRY)&_ZN6S584C53v55Ev,
  (VTBL_ENTRY)&_ZN6S584C53v56Ev,
  (VTBL_ENTRY)&_ZN6S584C53v57Ev,
  (VTBL_ENTRY)&_ZN6S584C53v58Ev,
  (VTBL_ENTRY)&_ZN6S584C53v59Ev,
  (VTBL_ENTRY)&_ZN6S584C53v60Ev,
  (VTBL_ENTRY)&_ZN6S584C53v61Ev,
  (VTBL_ENTRY)&_ZN6S584C53v62Ev,
  (VTBL_ENTRY)&_ZN6S584C53v63Ev,
  (VTBL_ENTRY)&_ZN6S584C53v64Ev,
  (VTBL_ENTRY)&_ZN6S584C53v65Ev,
  (VTBL_ENTRY)&_ZN6S584C53v66Ev,
  (VTBL_ENTRY)&_ZN6S584C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S584C5[];
extern  VTBL_ENTRY _ZTV6S584C5[];
Class_Descriptor cd_S584C5 = {  "S584C5", // class name
  0,0,//no base classes
  &(vtc_S584C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S584C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S584C5),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  S584C4  : S584C5 {
  int s584c4f0[2];
  void *s584c4f1;
  int s584c4f2[2];
  ::S499C37_nt s584c4f3;
  ::S499C37_nt s584c4f4;
  ::S7368C78 s584c4f5;
  ::S499C37_nt s584c4f6;
  unsigned int s584c4f7:1;
  unsigned int s584c4f8:1;
  unsigned int s584c4f9:1;
  unsigned int s584c4f10:1;
  unsigned int s584c4f11:1;
  int s584c4f12[2];
  virtual  ~S584C4(); // _ZN6S584C4D1Ev
  virtual void  v68(); // _ZN6S584C43v68Ev
  virtual void  v69(); // _ZN6S584C43v69Ev
  virtual void  v70(); // _ZN6S584C43v70Ev
  virtual void  v71(); // _ZN6S584C43v71Ev
  virtual void  v72(); // _ZN6S584C43v72Ev
  virtual void  v73(); // _ZN6S584C43v73Ev
  virtual void  v74(); // _ZN6S584C43v74Ev
  virtual void  v75(); // _ZN6S584C43v75Ev
  virtual void  v76(); // _ZN6S584C43v76Ev
  virtual void  v77(); // _ZN6S584C43v77Ev
  virtual void  v78(); // _ZN6S584C43v78Ev
  virtual void  v79(); // _ZN6S584C43v79Ev
  virtual void  v80(); // _ZN6S584C43v80Ev
  virtual void  v81(); // _ZN6S584C43v81Ev
  virtual void  v82(); // _ZN6S584C43v82Ev
  virtual void  v83(); // _ZN6S584C43v83Ev
  virtual void  v84(); // _ZN6S584C43v84Ev
  virtual void  v85(); // _ZN6S584C43v85Ev
  virtual void  v86(); // _ZN6S584C43v86Ev
  virtual void  v87(); // _ZN6S584C43v87Ev
  virtual void  v88(); // _ZN6S584C43v88Ev
  virtual void  v89(); // _ZN6S584C43v89Ev
  S584C4(); // tgen
};
//SIG(-1 S584C4) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S584C4 ::~S584C4(){ note_dtor("S584C4", this);}
void  S584C4 ::v68(){vfunc_called(this, "_ZN6S584C43v68Ev");}
void  S584C4 ::v69(){vfunc_called(this, "_ZN6S584C43v69Ev");}
void  S584C4 ::v70(){vfunc_called(this, "_ZN6S584C43v70Ev");}
void  S584C4 ::v71(){vfunc_called(this, "_ZN6S584C43v71Ev");}
void  S584C4 ::v72(){vfunc_called(this, "_ZN6S584C43v72Ev");}
void  S584C4 ::v73(){vfunc_called(this, "_ZN6S584C43v73Ev");}
void  S584C4 ::v74(){vfunc_called(this, "_ZN6S584C43v74Ev");}
void  S584C4 ::v75(){vfunc_called(this, "_ZN6S584C43v75Ev");}
void  S584C4 ::v76(){vfunc_called(this, "_ZN6S584C43v76Ev");}
void  S584C4 ::v77(){vfunc_called(this, "_ZN6S584C43v77Ev");}
void  S584C4 ::v78(){vfunc_called(this, "_ZN6S584C43v78Ev");}
void  S584C4 ::v79(){vfunc_called(this, "_ZN6S584C43v79Ev");}
void  S584C4 ::v80(){vfunc_called(this, "_ZN6S584C43v80Ev");}
void  S584C4 ::v81(){vfunc_called(this, "_ZN6S584C43v81Ev");}
void  S584C4 ::v82(){vfunc_called(this, "_ZN6S584C43v82Ev");}
void  S584C4 ::v83(){vfunc_called(this, "_ZN6S584C43v83Ev");}
void  S584C4 ::v84(){vfunc_called(this, "_ZN6S584C43v84Ev");}
void  S584C4 ::v85(){vfunc_called(this, "_ZN6S584C43v85Ev");}
void  S584C4 ::v86(){vfunc_called(this, "_ZN6S584C43v86Ev");}
void  S584C4 ::v87(){vfunc_called(this, "_ZN6S584C43v87Ev");}
void  S584C4 ::v88(){vfunc_called(this, "_ZN6S584C43v88Ev");}
void  S584C4 ::v89(){vfunc_called(this, "_ZN6S584C43v89Ev");}
S584C4 ::S584C4(){ note_ctor("S584C4", this);} // tgen

static void Test_S584C4()
{
  extern Class_Descriptor cd_S584C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S584C4, buf);
    S584C4 *dp, &lv = *(dp=new (buf) S584C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S584C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S584C4)");
    check_base_class_offset(lv, (S584C5*), 0, "S584C4");
    check_field_offset(lv, s584c4f0, ABISELECT(96,60), "S584C4.s584c4f0");
    check_field_offset(lv, s584c4f1, ABISELECT(104,68), "S584C4.s584c4f1");
    check_field_offset(lv, s584c4f2, ABISELECT(112,72), "S584C4.s584c4f2");
    check_field_offset(lv, s584c4f3, ABISELECT(120,80), "S584C4.s584c4f3");
    check_field_offset(lv, s584c4f4, ABISELECT(136,92), "S584C4.s584c4f4");
    check_field_offset(lv, s584c4f5, ABISELECT(152,104), "S584C4.s584c4f5");
    check_field_offset(lv, s584c4f6, ABISELECT(160,108), "S584C4.s584c4f6");
    set_bf_and_test(lv, s584c4f7, ABISELECT(176,120), 0, 1, 1, "S584C4");
    set_bf_and_test(lv, s584c4f8, ABISELECT(176,120), 1, 1, 1, "S584C4");
    set_bf_and_test(lv, s584c4f9, ABISELECT(176,120), 2, 1, 1, "S584C4");
    set_bf_and_test(lv, s584c4f10, ABISELECT(176,120), 3, 1, 1, "S584C4");
    set_bf_and_test(lv, s584c4f11, ABISELECT(176,120), 4, 1, 1, "S584C4");
    check_field_offset(lv, s584c4f12, ABISELECT(180,124), "S584C4.s584c4f12");
    test_class_info(&lv, &cd_S584C4);
    dp->~S584C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS584C4(Test_S584C4, "S584C4", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S584C4C1Ev();
extern void _ZN6S584C4D1Ev();
Name_Map name_map_S584C4[] = {
  NSPAIR(_ZN6S584C4C1Ev),
  NSPAIR(_ZN6S584C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S584C5;
extern VTBL_ENTRY _ZTI6S584C5[];
extern  VTBL_ENTRY _ZTV6S584C5[];
static Base_Class bases_S584C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S584C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S584C4[];
extern void _ZN6S584C4D1Ev();
extern void _ZN6S584C4D0Ev();
extern void _ZN6S584C52v4Ev();
extern void _ZN6S584C52v5Ev();
extern void _ZN6S584C52v6Ev();
extern void _ZN6S584C52v7Ev();
extern void _ZN6S584C52v8Ev();
extern void _ZN6S584C52v9Ev();
extern void _ZN6S584C53v10Ev();
extern void _ZN6S584C53v11Ev();
extern void _ZN6S584C53v12Ev();
extern void _ZN6S584C53v13Ev();
extern void _ZN6S584C53v14Ev();
extern void _ZN6S584C53v15Ev();
extern void _ZN6S584C53v16Ev();
extern void _ZN6S584C53v17Ev();
extern void _ZN6S584C53v18Ev();
extern void _ZN6S584C53v19Ev();
extern void _ZN6S584C53v20Ev();
extern void _ZN6S584C53v21Ev();
extern void _ZN6S584C53v22Ev();
extern void _ZN6S584C53v23Ev();
extern void _ZN6S584C53v24Ev();
extern void _ZN6S584C53v25Ev();
extern void _ZN6S584C53v26Ev();
extern void _ZN6S584C53v27Ev();
extern void _ZN6S584C53v28Ev();
extern void _ZN6S584C53v29Ev();
extern void _ZN6S584C53v30Ev();
extern void _ZN6S584C53v31Ev();
extern void _ZN6S584C53v32Ev();
extern void _ZN6S584C53v33Ev();
extern void _ZN6S584C53v34Ev();
extern void _ZN6S584C53v35Ev();
extern void _ZN6S584C53v36Ev();
extern void _ZN6S584C53v37Ev();
extern void _ZN6S584C53v38Ev();
extern void _ZN6S584C53v39Ev();
extern void _ZN6S584C53v40Ev();
extern void _ZN6S584C53v41Ev();
extern void _ZN6S584C53v42Ev();
extern void _ZN6S584C53v43Ev();
extern void _ZN6S584C53v44Ev();
extern void _ZN6S584C53v45Ev();
extern void _ZN6S584C53v46Ev();
extern void _ZN6S584C53v47Ev();
extern void _ZN6S584C53v48Ev();
extern void _ZN6S584C53v49Ev();
extern void _ZN6S584C53v50Ev();
extern void _ZN6S584C53v51Ev();
extern void _ZN6S584C53v52Ev();
extern void _ZN6S584C53v53Ev();
extern void _ZN6S584C53v54Ev();
extern void _ZN6S584C53v55Ev();
extern void _ZN6S584C53v56Ev();
extern void _ZN6S584C53v57Ev();
extern void _ZN6S584C53v58Ev();
extern void _ZN6S584C53v59Ev();
extern void _ZN6S584C53v60Ev();
extern void _ZN6S584C53v61Ev();
extern void _ZN6S584C53v62Ev();
extern void _ZN6S584C53v63Ev();
extern void _ZN6S584C53v64Ev();
extern void _ZN6S584C53v65Ev();
extern void _ZN6S584C53v66Ev();
extern void _ZN6S584C53v67Ev();
extern void _ZN6S584C43v68Ev();
extern void _ZN6S584C43v69Ev();
extern void _ZN6S584C43v70Ev();
extern void _ZN6S584C43v71Ev();
extern void _ZN6S584C43v72Ev();
extern void _ZN6S584C43v73Ev();
extern void _ZN6S584C43v74Ev();
extern void _ZN6S584C43v75Ev();
extern void _ZN6S584C43v76Ev();
extern void _ZN6S584C43v77Ev();
extern void _ZN6S584C43v78Ev();
extern void _ZN6S584C43v79Ev();
extern void _ZN6S584C43v80Ev();
extern void _ZN6S584C43v81Ev();
extern void _ZN6S584C43v82Ev();
extern void _ZN6S584C43v83Ev();
extern void _ZN6S584C43v84Ev();
extern void _ZN6S584C43v85Ev();
extern void _ZN6S584C43v86Ev();
extern void _ZN6S584C43v87Ev();
extern void _ZN6S584C43v88Ev();
extern void _ZN6S584C43v89Ev();
static  VTBL_ENTRY vtc_S584C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S584C4[0]),
  (VTBL_ENTRY)&_ZN6S584C4D1Ev,
  (VTBL_ENTRY)&_ZN6S584C4D0Ev,
  (VTBL_ENTRY)&_ZN6S584C52v4Ev,
  (VTBL_ENTRY)&_ZN6S584C52v5Ev,
  (VTBL_ENTRY)&_ZN6S584C52v6Ev,
  (VTBL_ENTRY)&_ZN6S584C52v7Ev,
  (VTBL_ENTRY)&_ZN6S584C52v8Ev,
  (VTBL_ENTRY)&_ZN6S584C52v9Ev,
  (VTBL_ENTRY)&_ZN6S584C53v10Ev,
  (VTBL_ENTRY)&_ZN6S584C53v11Ev,
  (VTBL_ENTRY)&_ZN6S584C53v12Ev,
  (VTBL_ENTRY)&_ZN6S584C53v13Ev,
  (VTBL_ENTRY)&_ZN6S584C53v14Ev,
  (VTBL_ENTRY)&_ZN6S584C53v15Ev,
  (VTBL_ENTRY)&_ZN6S584C53v16Ev,
  (VTBL_ENTRY)&_ZN6S584C53v17Ev,
  (VTBL_ENTRY)&_ZN6S584C53v18Ev,
  (VTBL_ENTRY)&_ZN6S584C53v19Ev,
  (VTBL_ENTRY)&_ZN6S584C53v20Ev,
  (VTBL_ENTRY)&_ZN6S584C53v21Ev,
  (VTBL_ENTRY)&_ZN6S584C53v22Ev,
  (VTBL_ENTRY)&_ZN6S584C53v23Ev,
  (VTBL_ENTRY)&_ZN6S584C53v24Ev,
  (VTBL_ENTRY)&_ZN6S584C53v25Ev,
  (VTBL_ENTRY)&_ZN6S584C53v26Ev,
  (VTBL_ENTRY)&_ZN6S584C53v27Ev,
  (VTBL_ENTRY)&_ZN6S584C53v28Ev,
  (VTBL_ENTRY)&_ZN6S584C53v29Ev,
  (VTBL_ENTRY)&_ZN6S584C53v30Ev,
  (VTBL_ENTRY)&_ZN6S584C53v31Ev,
  (VTBL_ENTRY)&_ZN6S584C53v32Ev,
  (VTBL_ENTRY)&_ZN6S584C53v33Ev,
  (VTBL_ENTRY)&_ZN6S584C53v34Ev,
  (VTBL_ENTRY)&_ZN6S584C53v35Ev,
  (VTBL_ENTRY)&_ZN6S584C53v36Ev,
  (VTBL_ENTRY)&_ZN6S584C53v37Ev,
  (VTBL_ENTRY)&_ZN6S584C53v38Ev,
  (VTBL_ENTRY)&_ZN6S584C53v39Ev,
  (VTBL_ENTRY)&_ZN6S584C53v40Ev,
  (VTBL_ENTRY)&_ZN6S584C53v41Ev,
  (VTBL_ENTRY)&_ZN6S584C53v42Ev,
  (VTBL_ENTRY)&_ZN6S584C53v43Ev,
  (VTBL_ENTRY)&_ZN6S584C53v44Ev,
  (VTBL_ENTRY)&_ZN6S584C53v45Ev,
  (VTBL_ENTRY)&_ZN6S584C53v46Ev,
  (VTBL_ENTRY)&_ZN6S584C53v47Ev,
  (VTBL_ENTRY)&_ZN6S584C53v48Ev,
  (VTBL_ENTRY)&_ZN6S584C53v49Ev,
  (VTBL_ENTRY)&_ZN6S584C53v50Ev,
  (VTBL_ENTRY)&_ZN6S584C53v51Ev,
  (VTBL_ENTRY)&_ZN6S584C53v52Ev,
  (VTBL_ENTRY)&_ZN6S584C53v53Ev,
  (VTBL_ENTRY)&_ZN6S584C53v54Ev,
  (VTBL_ENTRY)&_ZN6S584C53v55Ev,
  (VTBL_ENTRY)&_ZN6S584C53v56Ev,
  (VTBL_ENTRY)&_ZN6S584C53v57Ev,
  (VTBL_ENTRY)&_ZN6S584C53v58Ev,
  (VTBL_ENTRY)&_ZN6S584C53v59Ev,
  (VTBL_ENTRY)&_ZN6S584C53v60Ev,
  (VTBL_ENTRY)&_ZN6S584C53v61Ev,
  (VTBL_ENTRY)&_ZN6S584C53v62Ev,
  (VTBL_ENTRY)&_ZN6S584C53v63Ev,
  (VTBL_ENTRY)&_ZN6S584C53v64Ev,
  (VTBL_ENTRY)&_ZN6S584C53v65Ev,
  (VTBL_ENTRY)&_ZN6S584C53v66Ev,
  (VTBL_ENTRY)&_ZN6S584C53v67Ev,
  (VTBL_ENTRY)&_ZN6S584C43v68Ev,
  (VTBL_ENTRY)&_ZN6S584C43v69Ev,
  (VTBL_ENTRY)&_ZN6S584C43v70Ev,
  (VTBL_ENTRY)&_ZN6S584C43v71Ev,
  (VTBL_ENTRY)&_ZN6S584C43v72Ev,
  (VTBL_ENTRY)&_ZN6S584C43v73Ev,
  (VTBL_ENTRY)&_ZN6S584C43v74Ev,
  (VTBL_ENTRY)&_ZN6S584C43v75Ev,
  (VTBL_ENTRY)&_ZN6S584C43v76Ev,
  (VTBL_ENTRY)&_ZN6S584C43v77Ev,
  (VTBL_ENTRY)&_ZN6S584C43v78Ev,
  (VTBL_ENTRY)&_ZN6S584C43v79Ev,
  (VTBL_ENTRY)&_ZN6S584C43v80Ev,
  (VTBL_ENTRY)&_ZN6S584C43v81Ev,
  (VTBL_ENTRY)&_ZN6S584C43v82Ev,
  (VTBL_ENTRY)&_ZN6S584C43v83Ev,
  (VTBL_ENTRY)&_ZN6S584C43v84Ev,
  (VTBL_ENTRY)&_ZN6S584C43v85Ev,
  (VTBL_ENTRY)&_ZN6S584C43v86Ev,
  (VTBL_ENTRY)&_ZN6S584C43v87Ev,
  (VTBL_ENTRY)&_ZN6S584C43v88Ev,
  (VTBL_ENTRY)&_ZN6S584C43v89Ev,
};
extern VTBL_ENTRY _ZTI6S584C4[];
extern  VTBL_ENTRY _ZTV6S584C4[];
Class_Descriptor cd_S584C4 = {  "S584C4", // class name
  bases_S584C4, 1,
  &(vtc_S584C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S584C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S584C4),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S584C3  : S584C4 {
  unsigned int s584c3f0:1;
  unsigned int s584c3f1:1;
  unsigned int s584c3f2:1;
  ::S499C42 s584c3f3;
  ::S499C38 s584c3f4;
  ::S499C17 s584c3f5;
  ::S499C13 s584c3f6;
  int s584c3f7[3];
  virtual  ~S584C3(); // _ZN6S584C3D1Ev
  virtual void  v90(); // _ZN6S584C33v90Ev
  virtual void  v91(); // _ZN6S584C33v91Ev
  virtual void  v92(); // _ZN6S584C33v92Ev
  virtual void  v93(); // _ZN6S584C33v93Ev
  virtual void  v94(); // _ZN6S584C33v94Ev
  virtual void  v95(); // _ZN6S584C33v95Ev
  virtual void  v96(); // _ZN6S584C33v96Ev
  virtual void  v97(); // _ZN6S584C33v97Ev
  virtual void  v98(); // _ZN6S584C33v98Ev
  virtual void  v99(); // _ZN6S584C33v99Ev
  virtual void  v100(); // _ZN6S584C34v100Ev
  virtual void  v101(); // _ZN6S584C34v101Ev
  virtual void  v102(); // _ZN6S584C34v102Ev
  virtual void  v103(); // _ZN6S584C34v103Ev
  virtual void  v104(); // _ZN6S584C34v104Ev
  virtual void  v105(); // _ZN6S584C34v105Ev
  virtual void  v106(); // _ZN6S584C34v106Ev
  virtual void  v107(); // _ZN6S584C34v107Ev
  virtual void  v108(); // _ZN6S584C34v108Ev
  virtual void  v109(); // _ZN6S584C34v109Ev
  S584C3(); // tgen
};
//SIG(-1 S584C3) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC6 FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} Fi[3]}


 S584C3 ::~S584C3(){ note_dtor("S584C3", this);}
void  S584C3 ::v90(){vfunc_called(this, "_ZN6S584C33v90Ev");}
void  S584C3 ::v91(){vfunc_called(this, "_ZN6S584C33v91Ev");}
void  S584C3 ::v92(){vfunc_called(this, "_ZN6S584C33v92Ev");}
void  S584C3 ::v93(){vfunc_called(this, "_ZN6S584C33v93Ev");}
void  S584C3 ::v94(){vfunc_called(this, "_ZN6S584C33v94Ev");}
void  S584C3 ::v95(){vfunc_called(this, "_ZN6S584C33v95Ev");}
void  S584C3 ::v96(){vfunc_called(this, "_ZN6S584C33v96Ev");}
void  S584C3 ::v97(){vfunc_called(this, "_ZN6S584C33v97Ev");}
void  S584C3 ::v98(){vfunc_called(this, "_ZN6S584C33v98Ev");}
void  S584C3 ::v99(){vfunc_called(this, "_ZN6S584C33v99Ev");}
void  S584C3 ::v100(){vfunc_called(this, "_ZN6S584C34v100Ev");}
void  S584C3 ::v101(){vfunc_called(this, "_ZN6S584C34v101Ev");}
void  S584C3 ::v102(){vfunc_called(this, "_ZN6S584C34v102Ev");}
void  S584C3 ::v103(){vfunc_called(this, "_ZN6S584C34v103Ev");}
void  S584C3 ::v104(){vfunc_called(this, "_ZN6S584C34v104Ev");}
void  S584C3 ::v105(){vfunc_called(this, "_ZN6S584C34v105Ev");}
void  S584C3 ::v106(){vfunc_called(this, "_ZN6S584C34v106Ev");}
void  S584C3 ::v107(){vfunc_called(this, "_ZN6S584C34v107Ev");}
void  S584C3 ::v108(){vfunc_called(this, "_ZN6S584C34v108Ev");}
void  S584C3 ::v109(){vfunc_called(this, "_ZN6S584C34v109Ev");}
S584C3 ::S584C3(){ note_ctor("S584C3", this);} // tgen

static void Test_S584C3()
{
  extern Class_Descriptor cd_S584C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S584C3, buf);
    S584C3 *dp, &lv = *(dp=new (buf) S584C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S584C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S584C3)");
    check_base_class_offset(lv, (S584C5*)(S584C4*), 0, "S584C3");
    check_base_class_offset(lv, (S584C4*), 0, "S584C3");
    set_bf_and_test(lv, s584c3f0, ABISELECT(188,132), 0, 1, 1, "S584C3");
    set_bf_and_test(lv, s584c3f1, ABISELECT(188,132), 1, 1, 1, "S584C3");
    set_bf_and_test(lv, s584c3f2, ABISELECT(188,132), 2, 1, 1, "S584C3");
    check_field_offset(lv, s584c3f3, ABISELECT(192,136), "S584C3.s584c3f3");
    check_field_offset(lv, s584c3f4, ABISELECT(208,148), "S584C3.s584c3f4");
    check_field_offset(lv, s584c3f5, ABISELECT(224,160), "S584C3.s584c3f5");
    check_field_offset(lv, s584c3f6, ABISELECT(240,172), "S584C3.s584c3f6");
    check_field_offset(lv, s584c3f7, ABISELECT(256,184), "S584C3.s584c3f7");
    test_class_info(&lv, &cd_S584C3);
    dp->~S584C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS584C3(Test_S584C3, "S584C3", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S584C3C1Ev();
extern void _ZN6S584C3D1Ev();
Name_Map name_map_S584C3[] = {
  NSPAIR(_ZN6S584C3C1Ev),
  NSPAIR(_ZN6S584C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S584C5;
extern VTBL_ENTRY _ZTI6S584C5[];
extern  VTBL_ENTRY _ZTV6S584C5[];
extern Class_Descriptor cd_S584C4;
extern VTBL_ENTRY _ZTI6S584C4[];
extern  VTBL_ENTRY _ZTV6S584C4[];
static Base_Class bases_S584C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S584C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S584C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S584C3[];
extern void _ZN6S584C3D1Ev();
extern void _ZN6S584C3D0Ev();
extern void _ZN6S584C52v4Ev();
extern void _ZN6S584C52v5Ev();
extern void _ZN6S584C52v6Ev();
extern void _ZN6S584C52v7Ev();
extern void _ZN6S584C52v8Ev();
extern void _ZN6S584C52v9Ev();
extern void _ZN6S584C53v10Ev();
extern void _ZN6S584C53v11Ev();
extern void _ZN6S584C53v12Ev();
extern void _ZN6S584C53v13Ev();
extern void _ZN6S584C53v14Ev();
extern void _ZN6S584C53v15Ev();
extern void _ZN6S584C53v16Ev();
extern void _ZN6S584C53v17Ev();
extern void _ZN6S584C53v18Ev();
extern void _ZN6S584C53v19Ev();
extern void _ZN6S584C53v20Ev();
extern void _ZN6S584C53v21Ev();
extern void _ZN6S584C53v22Ev();
extern void _ZN6S584C53v23Ev();
extern void _ZN6S584C53v24Ev();
extern void _ZN6S584C53v25Ev();
extern void _ZN6S584C53v26Ev();
extern void _ZN6S584C53v27Ev();
extern void _ZN6S584C53v28Ev();
extern void _ZN6S584C53v29Ev();
extern void _ZN6S584C53v30Ev();
extern void _ZN6S584C53v31Ev();
extern void _ZN6S584C53v32Ev();
extern void _ZN6S584C53v33Ev();
extern void _ZN6S584C53v34Ev();
extern void _ZN6S584C53v35Ev();
extern void _ZN6S584C53v36Ev();
extern void _ZN6S584C53v37Ev();
extern void _ZN6S584C53v38Ev();
extern void _ZN6S584C53v39Ev();
extern void _ZN6S584C53v40Ev();
extern void _ZN6S584C53v41Ev();
extern void _ZN6S584C53v42Ev();
extern void _ZN6S584C53v43Ev();
extern void _ZN6S584C53v44Ev();
extern void _ZN6S584C53v45Ev();
extern void _ZN6S584C53v46Ev();
extern void _ZN6S584C53v47Ev();
extern void _ZN6S584C53v48Ev();
extern void _ZN6S584C53v49Ev();
extern void _ZN6S584C53v50Ev();
extern void _ZN6S584C53v51Ev();
extern void _ZN6S584C53v52Ev();
extern void _ZN6S584C53v53Ev();
extern void _ZN6S584C53v54Ev();
extern void _ZN6S584C53v55Ev();
extern void _ZN6S584C53v56Ev();
extern void _ZN6S584C53v57Ev();
extern void _ZN6S584C53v58Ev();
extern void _ZN6S584C53v59Ev();
extern void _ZN6S584C53v60Ev();
extern void _ZN6S584C53v61Ev();
extern void _ZN6S584C53v62Ev();
extern void _ZN6S584C53v63Ev();
extern void _ZN6S584C53v64Ev();
extern void _ZN6S584C53v65Ev();
extern void _ZN6S584C53v66Ev();
extern void _ZN6S584C53v67Ev();
extern void _ZN6S584C43v68Ev();
extern void _ZN6S584C43v69Ev();
extern void _ZN6S584C43v70Ev();
extern void _ZN6S584C43v71Ev();
extern void _ZN6S584C43v72Ev();
extern void _ZN6S584C43v73Ev();
extern void _ZN6S584C43v74Ev();
extern void _ZN6S584C43v75Ev();
extern void _ZN6S584C43v76Ev();
extern void _ZN6S584C43v77Ev();
extern void _ZN6S584C43v78Ev();
extern void _ZN6S584C43v79Ev();
extern void _ZN6S584C43v80Ev();
extern void _ZN6S584C43v81Ev();
extern void _ZN6S584C43v82Ev();
extern void _ZN6S584C43v83Ev();
extern void _ZN6S584C43v84Ev();
extern void _ZN6S584C43v85Ev();
extern void _ZN6S584C43v86Ev();
extern void _ZN6S584C43v87Ev();
extern void _ZN6S584C43v88Ev();
extern void _ZN6S584C43v89Ev();
extern void _ZN6S584C33v90Ev();
extern void _ZN6S584C33v91Ev();
extern void _ZN6S584C33v92Ev();
extern void _ZN6S584C33v93Ev();
extern void _ZN6S584C33v94Ev();
extern void _ZN6S584C33v95Ev();
extern void _ZN6S584C33v96Ev();
extern void _ZN6S584C33v97Ev();
extern void _ZN6S584C33v98Ev();
extern void _ZN6S584C33v99Ev();
extern void _ZN6S584C34v100Ev();
extern void _ZN6S584C34v101Ev();
extern void _ZN6S584C34v102Ev();
extern void _ZN6S584C34v103Ev();
extern void _ZN6S584C34v104Ev();
extern void _ZN6S584C34v105Ev();
extern void _ZN6S584C34v106Ev();
extern void _ZN6S584C34v107Ev();
extern void _ZN6S584C34v108Ev();
extern void _ZN6S584C34v109Ev();
static  VTBL_ENTRY vtc_S584C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S584C3[0]),
  (VTBL_ENTRY)&_ZN6S584C3D1Ev,
  (VTBL_ENTRY)&_ZN6S584C3D0Ev,
  (VTBL_ENTRY)&_ZN6S584C52v4Ev,
  (VTBL_ENTRY)&_ZN6S584C52v5Ev,
  (VTBL_ENTRY)&_ZN6S584C52v6Ev,
  (VTBL_ENTRY)&_ZN6S584C52v7Ev,
  (VTBL_ENTRY)&_ZN6S584C52v8Ev,
  (VTBL_ENTRY)&_ZN6S584C52v9Ev,
  (VTBL_ENTRY)&_ZN6S584C53v10Ev,
  (VTBL_ENTRY)&_ZN6S584C53v11Ev,
  (VTBL_ENTRY)&_ZN6S584C53v12Ev,
  (VTBL_ENTRY)&_ZN6S584C53v13Ev,
  (VTBL_ENTRY)&_ZN6S584C53v14Ev,
  (VTBL_ENTRY)&_ZN6S584C53v15Ev,
  (VTBL_ENTRY)&_ZN6S584C53v16Ev,
  (VTBL_ENTRY)&_ZN6S584C53v17Ev,
  (VTBL_ENTRY)&_ZN6S584C53v18Ev,
  (VTBL_ENTRY)&_ZN6S584C53v19Ev,
  (VTBL_ENTRY)&_ZN6S584C53v20Ev,
  (VTBL_ENTRY)&_ZN6S584C53v21Ev,
  (VTBL_ENTRY)&_ZN6S584C53v22Ev,
  (VTBL_ENTRY)&_ZN6S584C53v23Ev,
  (VTBL_ENTRY)&_ZN6S584C53v24Ev,
  (VTBL_ENTRY)&_ZN6S584C53v25Ev,
  (VTBL_ENTRY)&_ZN6S584C53v26Ev,
  (VTBL_ENTRY)&_ZN6S584C53v27Ev,
  (VTBL_ENTRY)&_ZN6S584C53v28Ev,
  (VTBL_ENTRY)&_ZN6S584C53v29Ev,
  (VTBL_ENTRY)&_ZN6S584C53v30Ev,
  (VTBL_ENTRY)&_ZN6S584C53v31Ev,
  (VTBL_ENTRY)&_ZN6S584C53v32Ev,
  (VTBL_ENTRY)&_ZN6S584C53v33Ev,
  (VTBL_ENTRY)&_ZN6S584C53v34Ev,
  (VTBL_ENTRY)&_ZN6S584C53v35Ev,
  (VTBL_ENTRY)&_ZN6S584C53v36Ev,
  (VTBL_ENTRY)&_ZN6S584C53v37Ev,
  (VTBL_ENTRY)&_ZN6S584C53v38Ev,
  (VTBL_ENTRY)&_ZN6S584C53v39Ev,
  (VTBL_ENTRY)&_ZN6S584C53v40Ev,
  (VTBL_ENTRY)&_ZN6S584C53v41Ev,
  (VTBL_ENTRY)&_ZN6S584C53v42Ev,
  (VTBL_ENTRY)&_ZN6S584C53v43Ev,
  (VTBL_ENTRY)&_ZN6S584C53v44Ev,
  (VTBL_ENTRY)&_ZN6S584C53v45Ev,
  (VTBL_ENTRY)&_ZN6S584C53v46Ev,
  (VTBL_ENTRY)&_ZN6S584C53v47Ev,
  (VTBL_ENTRY)&_ZN6S584C53v48Ev,
  (VTBL_ENTRY)&_ZN6S584C53v49Ev,
  (VTBL_ENTRY)&_ZN6S584C53v50Ev,
  (VTBL_ENTRY)&_ZN6S584C53v51Ev,
  (VTBL_ENTRY)&_ZN6S584C53v52Ev,
  (VTBL_ENTRY)&_ZN6S584C53v53Ev,
  (VTBL_ENTRY)&_ZN6S584C53v54Ev,
  (VTBL_ENTRY)&_ZN6S584C53v55Ev,
  (VTBL_ENTRY)&_ZN6S584C53v56Ev,
  (VTBL_ENTRY)&_ZN6S584C53v57Ev,
  (VTBL_ENTRY)&_ZN6S584C53v58Ev,
  (VTBL_ENTRY)&_ZN6S584C53v59Ev,
  (VTBL_ENTRY)&_ZN6S584C53v60Ev,
  (VTBL_ENTRY)&_ZN6S584C53v61Ev,
  (VTBL_ENTRY)&_ZN6S584C53v62Ev,
  (VTBL_ENTRY)&_ZN6S584C53v63Ev,
  (VTBL_ENTRY)&_ZN6S584C53v64Ev,
  (VTBL_ENTRY)&_ZN6S584C53v65Ev,
  (VTBL_ENTRY)&_ZN6S584C53v66Ev,
  (VTBL_ENTRY)&_ZN6S584C53v67Ev,
  (VTBL_ENTRY)&_ZN6S584C43v68Ev,
  (VTBL_ENTRY)&_ZN6S584C43v69Ev,
  (VTBL_ENTRY)&_ZN6S584C43v70Ev,
  (VTBL_ENTRY)&_ZN6S584C43v71Ev,
  (VTBL_ENTRY)&_ZN6S584C43v72Ev,
  (VTBL_ENTRY)&_ZN6S584C43v73Ev,
  (VTBL_ENTRY)&_ZN6S584C43v74Ev,
  (VTBL_ENTRY)&_ZN6S584C43v75Ev,
  (VTBL_ENTRY)&_ZN6S584C43v76Ev,
  (VTBL_ENTRY)&_ZN6S584C43v77Ev,
  (VTBL_ENTRY)&_ZN6S584C43v78Ev,
  (VTBL_ENTRY)&_ZN6S584C43v79Ev,
  (VTBL_ENTRY)&_ZN6S584C43v80Ev,
  (VTBL_ENTRY)&_ZN6S584C43v81Ev,
  (VTBL_ENTRY)&_ZN6S584C43v82Ev,
  (VTBL_ENTRY)&_ZN6S584C43v83Ev,
  (VTBL_ENTRY)&_ZN6S584C43v84Ev,
  (VTBL_ENTRY)&_ZN6S584C43v85Ev,
  (VTBL_ENTRY)&_ZN6S584C43v86Ev,
  (VTBL_ENTRY)&_ZN6S584C43v87Ev,
  (VTBL_ENTRY)&_ZN6S584C43v88Ev,
  (VTBL_ENTRY)&_ZN6S584C43v89Ev,
  (VTBL_ENTRY)&_ZN6S584C33v90Ev,
  (VTBL_ENTRY)&_ZN6S584C33v91Ev,
  (VTBL_ENTRY)&_ZN6S584C33v92Ev,
  (VTBL_ENTRY)&_ZN6S584C33v93Ev,
  (VTBL_ENTRY)&_ZN6S584C33v94Ev,
  (VTBL_ENTRY)&_ZN6S584C33v95Ev,
  (VTBL_ENTRY)&_ZN6S584C33v96Ev,
  (VTBL_ENTRY)&_ZN6S584C33v97Ev,
  (VTBL_ENTRY)&_ZN6S584C33v98Ev,
  (VTBL_ENTRY)&_ZN6S584C33v99Ev,
  (VTBL_ENTRY)&_ZN6S584C34v100Ev,
  (VTBL_ENTRY)&_ZN6S584C34v101Ev,
  (VTBL_ENTRY)&_ZN6S584C34v102Ev,
  (VTBL_ENTRY)&_ZN6S584C34v103Ev,
  (VTBL_ENTRY)&_ZN6S584C34v104Ev,
  (VTBL_ENTRY)&_ZN6S584C34v105Ev,
  (VTBL_ENTRY)&_ZN6S584C34v106Ev,
  (VTBL_ENTRY)&_ZN6S584C34v107Ev,
  (VTBL_ENTRY)&_ZN6S584C34v108Ev,
  (VTBL_ENTRY)&_ZN6S584C34v109Ev,
};
extern VTBL_ENTRY _ZTI6S584C3[];
extern  VTBL_ENTRY _ZTV6S584C3[];
Class_Descriptor cd_S584C3 = {  "S584C3", // class name
  bases_S584C3, 2,
  &(vtc_S584C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S584C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S584C3),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S584C2 ::~S584C2(){ note_dtor("S584C2", this);}
void  S584C2 ::v110(){vfunc_called(this, "_ZN6S584C24v110Ev");}
void  S584C2 ::v111(){vfunc_called(this, "_ZN6S584C24v111Ev");}
void  S584C2 ::v112(){vfunc_called(this, "_ZN6S584C24v112Ev");}
void  S584C2 ::v113(){vfunc_called(this, "_ZN6S584C24v113Ev");}
S584C2 ::S584C2(){ note_ctor("S584C2", this);} // tgen

static void Test_S584C2()
{
  extern Class_Descriptor cd_S584C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S584C2, buf);
    S584C2 *dp, &lv = *(dp=new (buf) S584C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S584C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S584C2)");
    check_base_class_offset(lv, (S584C5*)(S584C4*)(S584C3*), 0, "S584C2");
    check_base_class_offset(lv, (S584C4*)(S584C3*), 0, "S584C2");
    check_base_class_offset(lv, (S584C3*), 0, "S584C2");
    check_field_offset(lv, s584c2f0, ABISELECT(268,196), "S584C2.s584c2f0");
    set_bf_and_test(lv, s584c2f1, ABISELECT(276,204), 0, 1, 1, "S584C2");
    check_field_offset(lv, s584c2f2, ABISELECT(280,208), "S584C2.s584c2f2");
    test_class_info(&lv, &cd_S584C2);
    dp->~S584C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS584C2(Test_S584C2, "S584C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S584C2C1Ev();
extern void _ZN6S584C2D1Ev();
Name_Map name_map_S584C2[] = {
  NSPAIR(_ZN6S584C2C1Ev),
  NSPAIR(_ZN6S584C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S584C5;
extern VTBL_ENTRY _ZTI6S584C5[];
extern  VTBL_ENTRY _ZTV6S584C5[];
extern Class_Descriptor cd_S584C4;
extern VTBL_ENTRY _ZTI6S584C4[];
extern  VTBL_ENTRY _ZTV6S584C4[];
extern Class_Descriptor cd_S584C3;
extern VTBL_ENTRY _ZTI6S584C3[];
extern  VTBL_ENTRY _ZTV6S584C3[];
static Base_Class bases_S584C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S584C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S584C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S584C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S584C2[];
extern void _ZN6S584C2D1Ev();
extern void _ZN6S584C2D0Ev();
extern void _ZN6S584C52v4Ev();
extern void _ZN6S584C52v5Ev();
extern void _ZN6S584C52v6Ev();
extern void _ZN6S584C52v7Ev();
extern void _ZN6S584C52v8Ev();
extern void _ZN6S584C52v9Ev();
extern void _ZN6S584C53v10Ev();
extern void _ZN6S584C53v11Ev();
extern void _ZN6S584C53v12Ev();
extern void _ZN6S584C53v13Ev();
extern void _ZN6S584C53v14Ev();
extern void _ZN6S584C53v15Ev();
extern void _ZN6S584C53v16Ev();
extern void _ZN6S584C53v17Ev();
extern void _ZN6S584C53v18Ev();
extern void _ZN6S584C53v19Ev();
extern void _ZN6S584C53v20Ev();
extern void _ZN6S584C53v21Ev();
extern void _ZN6S584C53v22Ev();
extern void _ZN6S584C53v23Ev();
extern void _ZN6S584C53v24Ev();
extern void _ZN6S584C53v25Ev();
extern void _ZN6S584C53v26Ev();
extern void _ZN6S584C53v27Ev();
extern void _ZN6S584C53v28Ev();
extern void _ZN6S584C53v29Ev();
extern void _ZN6S584C53v30Ev();
extern void _ZN6S584C53v31Ev();
extern void _ZN6S584C53v32Ev();
extern void _ZN6S584C53v33Ev();
extern void _ZN6S584C53v34Ev();
extern void _ZN6S584C53v35Ev();
extern void _ZN6S584C53v36Ev();
extern void _ZN6S584C53v37Ev();
extern void _ZN6S584C53v38Ev();
extern void _ZN6S584C53v39Ev();
extern void _ZN6S584C53v40Ev();
extern void _ZN6S584C53v41Ev();
extern void _ZN6S584C53v42Ev();
extern void _ZN6S584C53v43Ev();
extern void _ZN6S584C53v44Ev();
extern void _ZN6S584C53v45Ev();
extern void _ZN6S584C53v46Ev();
extern void _ZN6S584C53v47Ev();
extern void _ZN6S584C53v48Ev();
extern void _ZN6S584C53v49Ev();
extern void _ZN6S584C53v50Ev();
extern void _ZN6S584C53v51Ev();
extern void _ZN6S584C53v52Ev();
extern void _ZN6S584C53v53Ev();
extern void _ZN6S584C53v54Ev();
extern void _ZN6S584C53v55Ev();
extern void _ZN6S584C53v56Ev();
extern void _ZN6S584C53v57Ev();
extern void _ZN6S584C53v58Ev();
extern void _ZN6S584C53v59Ev();
extern void _ZN6S584C53v60Ev();
extern void _ZN6S584C53v61Ev();
extern void _ZN6S584C53v62Ev();
extern void _ZN6S584C53v63Ev();
extern void _ZN6S584C53v64Ev();
extern void _ZN6S584C53v65Ev();
extern void _ZN6S584C53v66Ev();
extern void _ZN6S584C53v67Ev();
extern void _ZN6S584C43v68Ev();
extern void _ZN6S584C43v69Ev();
extern void _ZN6S584C43v70Ev();
extern void _ZN6S584C43v71Ev();
extern void _ZN6S584C43v72Ev();
extern void _ZN6S584C43v73Ev();
extern void _ZN6S584C43v74Ev();
extern void _ZN6S584C43v75Ev();
extern void _ZN6S584C43v76Ev();
extern void _ZN6S584C43v77Ev();
extern void _ZN6S584C43v78Ev();
extern void _ZN6S584C43v79Ev();
extern void _ZN6S584C43v80Ev();
extern void _ZN6S584C43v81Ev();
extern void _ZN6S584C43v82Ev();
extern void _ZN6S584C43v83Ev();
extern void _ZN6S584C43v84Ev();
extern void _ZN6S584C43v85Ev();
extern void _ZN6S584C43v86Ev();
extern void _ZN6S584C43v87Ev();
extern void _ZN6S584C43v88Ev();
extern void _ZN6S584C43v89Ev();
extern void _ZN6S584C33v90Ev();
extern void _ZN6S584C33v91Ev();
extern void _ZN6S584C33v92Ev();
extern void _ZN6S584C33v93Ev();
extern void _ZN6S584C33v94Ev();
extern void _ZN6S584C33v95Ev();
extern void _ZN6S584C33v96Ev();
extern void _ZN6S584C33v97Ev();
extern void _ZN6S584C33v98Ev();
extern void _ZN6S584C33v99Ev();
extern void _ZN6S584C34v100Ev();
extern void _ZN6S584C34v101Ev();
extern void _ZN6S584C34v102Ev();
extern void _ZN6S584C34v103Ev();
extern void _ZN6S584C34v104Ev();
extern void _ZN6S584C34v105Ev();
extern void _ZN6S584C34v106Ev();
extern void _ZN6S584C34v107Ev();
extern void _ZN6S584C34v108Ev();
extern void _ZN6S584C34v109Ev();
extern void _ZN6S584C24v110Ev();
extern void _ZN6S584C24v111Ev();
extern void _ZN6S584C24v112Ev();
extern void _ZN6S584C24v113Ev();
static  VTBL_ENTRY vtc_S584C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S584C2[0]),
  (VTBL_ENTRY)&_ZN6S584C2D1Ev,
  (VTBL_ENTRY)&_ZN6S584C2D0Ev,
  (VTBL_ENTRY)&_ZN6S584C52v4Ev,
  (VTBL_ENTRY)&_ZN6S584C52v5Ev,
  (VTBL_ENTRY)&_ZN6S584C52v6Ev,
  (VTBL_ENTRY)&_ZN6S584C52v7Ev,
  (VTBL_ENTRY)&_ZN6S584C52v8Ev,
  (VTBL_ENTRY)&_ZN6S584C52v9Ev,
  (VTBL_ENTRY)&_ZN6S584C53v10Ev,
  (VTBL_ENTRY)&_ZN6S584C53v11Ev,
  (VTBL_ENTRY)&_ZN6S584C53v12Ev,
  (VTBL_ENTRY)&_ZN6S584C53v13Ev,
  (VTBL_ENTRY)&_ZN6S584C53v14Ev,
  (VTBL_ENTRY)&_ZN6S584C53v15Ev,
  (VTBL_ENTRY)&_ZN6S584C53v16Ev,
  (VTBL_ENTRY)&_ZN6S584C53v17Ev,
  (VTBL_ENTRY)&_ZN6S584C53v18Ev,
  (VTBL_ENTRY)&_ZN6S584C53v19Ev,
  (VTBL_ENTRY)&_ZN6S584C53v20Ev,
  (VTBL_ENTRY)&_ZN6S584C53v21Ev,
  (VTBL_ENTRY)&_ZN6S584C53v22Ev,
  (VTBL_ENTRY)&_ZN6S584C53v23Ev,
  (VTBL_ENTRY)&_ZN6S584C53v24Ev,
  (VTBL_ENTRY)&_ZN6S584C53v25Ev,
  (VTBL_ENTRY)&_ZN6S584C53v26Ev,
  (VTBL_ENTRY)&_ZN6S584C53v27Ev,
  (VTBL_ENTRY)&_ZN6S584C53v28Ev,
  (VTBL_ENTRY)&_ZN6S584C53v29Ev,
  (VTBL_ENTRY)&_ZN6S584C53v30Ev,
  (VTBL_ENTRY)&_ZN6S584C53v31Ev,
  (VTBL_ENTRY)&_ZN6S584C53v32Ev,
  (VTBL_ENTRY)&_ZN6S584C53v33Ev,
  (VTBL_ENTRY)&_ZN6S584C53v34Ev,
  (VTBL_ENTRY)&_ZN6S584C53v35Ev,
  (VTBL_ENTRY)&_ZN6S584C53v36Ev,
  (VTBL_ENTRY)&_ZN6S584C53v37Ev,
  (VTBL_ENTRY)&_ZN6S584C53v38Ev,
  (VTBL_ENTRY)&_ZN6S584C53v39Ev,
  (VTBL_ENTRY)&_ZN6S584C53v40Ev,
  (VTBL_ENTRY)&_ZN6S584C53v41Ev,
  (VTBL_ENTRY)&_ZN6S584C53v42Ev,
  (VTBL_ENTRY)&_ZN6S584C53v43Ev,
  (VTBL_ENTRY)&_ZN6S584C53v44Ev,
  (VTBL_ENTRY)&_ZN6S584C53v45Ev,
  (VTBL_ENTRY)&_ZN6S584C53v46Ev,
  (VTBL_ENTRY)&_ZN6S584C53v47Ev,
  (VTBL_ENTRY)&_ZN6S584C53v48Ev,
  (VTBL_ENTRY)&_ZN6S584C53v49Ev,
  (VTBL_ENTRY)&_ZN6S584C53v50Ev,
  (VTBL_ENTRY)&_ZN6S584C53v51Ev,
  (VTBL_ENTRY)&_ZN6S584C53v52Ev,
  (VTBL_ENTRY)&_ZN6S584C53v53Ev,
  (VTBL_ENTRY)&_ZN6S584C53v54Ev,
  (VTBL_ENTRY)&_ZN6S584C53v55Ev,
  (VTBL_ENTRY)&_ZN6S584C53v56Ev,
  (VTBL_ENTRY)&_ZN6S584C53v57Ev,
  (VTBL_ENTRY)&_ZN6S584C53v58Ev,
  (VTBL_ENTRY)&_ZN6S584C53v59Ev,
  (VTBL_ENTRY)&_ZN6S584C53v60Ev,
  (VTBL_ENTRY)&_ZN6S584C53v61Ev,
  (VTBL_ENTRY)&_ZN6S584C53v62Ev,
  (VTBL_ENTRY)&_ZN6S584C53v63Ev,
  (VTBL_ENTRY)&_ZN6S584C53v64Ev,
  (VTBL_ENTRY)&_ZN6S584C53v65Ev,
  (VTBL_ENTRY)&_ZN6S584C53v66Ev,
  (VTBL_ENTRY)&_ZN6S584C53v67Ev,
  (VTBL_ENTRY)&_ZN6S584C43v68Ev,
  (VTBL_ENTRY)&_ZN6S584C43v69Ev,
  (VTBL_ENTRY)&_ZN6S584C43v70Ev,
  (VTBL_ENTRY)&_ZN6S584C43v71Ev,
  (VTBL_ENTRY)&_ZN6S584C43v72Ev,
  (VTBL_ENTRY)&_ZN6S584C43v73Ev,
  (VTBL_ENTRY)&_ZN6S584C43v74Ev,
  (VTBL_ENTRY)&_ZN6S584C43v75Ev,
  (VTBL_ENTRY)&_ZN6S584C43v76Ev,
  (VTBL_ENTRY)&_ZN6S584C43v77Ev,
  (VTBL_ENTRY)&_ZN6S584C43v78Ev,
  (VTBL_ENTRY)&_ZN6S584C43v79Ev,
  (VTBL_ENTRY)&_ZN6S584C43v80Ev,
  (VTBL_ENTRY)&_ZN6S584C43v81Ev,
  (VTBL_ENTRY)&_ZN6S584C43v82Ev,
  (VTBL_ENTRY)&_ZN6S584C43v83Ev,
  (VTBL_ENTRY)&_ZN6S584C43v84Ev,
  (VTBL_ENTRY)&_ZN6S584C43v85Ev,
  (VTBL_ENTRY)&_ZN6S584C43v86Ev,
  (VTBL_ENTRY)&_ZN6S584C43v87Ev,
  (VTBL_ENTRY)&_ZN6S584C43v88Ev,
  (VTBL_ENTRY)&_ZN6S584C43v89Ev,
  (VTBL_ENTRY)&_ZN6S584C33v90Ev,
  (VTBL_ENTRY)&_ZN6S584C33v91Ev,
  (VTBL_ENTRY)&_ZN6S584C33v92Ev,
  (VTBL_ENTRY)&_ZN6S584C33v93Ev,
  (VTBL_ENTRY)&_ZN6S584C33v94Ev,
  (VTBL_ENTRY)&_ZN6S584C33v95Ev,
  (VTBL_ENTRY)&_ZN6S584C33v96Ev,
  (VTBL_ENTRY)&_ZN6S584C33v97Ev,
  (VTBL_ENTRY)&_ZN6S584C33v98Ev,
  (VTBL_ENTRY)&_ZN6S584C33v99Ev,
  (VTBL_ENTRY)&_ZN6S584C34v100Ev,
  (VTBL_ENTRY)&_ZN6S584C34v101Ev,
  (VTBL_ENTRY)&_ZN6S584C34v102Ev,
  (VTBL_ENTRY)&_ZN6S584C34v103Ev,
  (VTBL_ENTRY)&_ZN6S584C34v104Ev,
  (VTBL_ENTRY)&_ZN6S584C34v105Ev,
  (VTBL_ENTRY)&_ZN6S584C34v106Ev,
  (VTBL_ENTRY)&_ZN6S584C34v107Ev,
  (VTBL_ENTRY)&_ZN6S584C34v108Ev,
  (VTBL_ENTRY)&_ZN6S584C34v109Ev,
  (VTBL_ENTRY)&_ZN6S584C24v110Ev,
  (VTBL_ENTRY)&_ZN6S584C24v111Ev,
  (VTBL_ENTRY)&_ZN6S584C24v112Ev,
  (VTBL_ENTRY)&_ZN6S584C24v113Ev,
};
extern VTBL_ENTRY _ZTI6S584C2[];
extern  VTBL_ENTRY _ZTV6S584C2[];
Class_Descriptor cd_S584C2 = {  "S584C2", // class name
  bases_S584C2, 3,
  &(vtc_S584C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S584C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S584C2),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S584C1 ::~S584C1(){ note_dtor("S584C1", this);}
void  S584C1 ::v1(){vfunc_called(this, "_ZN6S584C12v1Ev");}
void  S584C1 ::v2(){vfunc_called(this, "_ZN6S584C12v2Ev");}
void  S584C1 ::v3(){vfunc_called(this, "_ZN6S584C12v3Ev");}
S584C1 ::S584C1(){ note_ctor("S584C1", this);} // tgen

static void Test_S584C1()
{
  extern Class_Descriptor cd_S584C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,58)];
    init_test(&cd_S584C1, buf);
    S584C1 *dp, &lv = *(dp=new (buf) S584C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,228), "sizeof(S584C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S584C1)");
    check_base_class_offset(lv, (S584C5*)(S584C4*)(S584C3*)(S584C2*), 0, "S584C1");
    check_base_class_offset(lv, (S584C4*)(S584C3*)(S584C2*), 0, "S584C1");
    check_base_class_offset(lv, (S584C3*)(S584C2*), 0, "S584C1");
    check_base_class_offset(lv, (S584C2*), 0, "S584C1");
    check_field_offset(lv, s584c1f0, ABISELECT(296,220), "S584C1.s584c1f0");
    set_bf_and_test(lv, s584c1f1, ABISELECT(304,224), 0, 1, 1, "S584C1");
    set_bf_and_test(lv, s584c1f2, ABISELECT(304,224), 1, 1, 1, "S584C1");
    test_class_info(&lv, &cd_S584C1);
    dp->~S584C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS584C1(Test_S584C1, "S584C1", ABISELECT(312,228));

#else // __cplusplus

extern void _ZN6S584C1C1Ev();
extern void _ZN6S584C1D1Ev();
Name_Map name_map_S584C1[] = {
  NSPAIR(_ZN6S584C1C1Ev),
  NSPAIR(_ZN6S584C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S584C5;
extern VTBL_ENTRY _ZTI6S584C5[];
extern  VTBL_ENTRY _ZTV6S584C5[];
extern Class_Descriptor cd_S584C4;
extern VTBL_ENTRY _ZTI6S584C4[];
extern  VTBL_ENTRY _ZTV6S584C4[];
extern Class_Descriptor cd_S584C3;
extern VTBL_ENTRY _ZTI6S584C3[];
extern  VTBL_ENTRY _ZTV6S584C3[];
extern Class_Descriptor cd_S584C2;
extern VTBL_ENTRY _ZTI6S584C2[];
extern  VTBL_ENTRY _ZTV6S584C2[];
static Base_Class bases_S584C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S584C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S584C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S584C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S584C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S584C1[];
extern void _ZN6S584C1D1Ev();
extern void _ZN6S584C1D0Ev();
extern void _ZN6S584C52v4Ev();
extern void _ZN6S584C52v5Ev();
extern void _ZN6S584C52v6Ev();
extern void _ZN6S584C52v7Ev();
extern void _ZN6S584C52v8Ev();
extern void _ZN6S584C52v9Ev();
extern void _ZN6S584C53v10Ev();
extern void _ZN6S584C53v11Ev();
extern void _ZN6S584C53v12Ev();
extern void _ZN6S584C53v13Ev();
extern void _ZN6S584C53v14Ev();
extern void _ZN6S584C53v15Ev();
extern void _ZN6S584C53v16Ev();
extern void _ZN6S584C53v17Ev();
extern void _ZN6S584C53v18Ev();
extern void _ZN6S584C53v19Ev();
extern void _ZN6S584C53v20Ev();
extern void _ZN6S584C53v21Ev();
extern void _ZN6S584C53v22Ev();
extern void _ZN6S584C53v23Ev();
extern void _ZN6S584C53v24Ev();
extern void _ZN6S584C53v25Ev();
extern void _ZN6S584C53v26Ev();
extern void _ZN6S584C53v27Ev();
extern void _ZN6S584C53v28Ev();
extern void _ZN6S584C53v29Ev();
extern void _ZN6S584C53v30Ev();
extern void _ZN6S584C53v31Ev();
extern void _ZN6S584C53v32Ev();
extern void _ZN6S584C53v33Ev();
extern void _ZN6S584C53v34Ev();
extern void _ZN6S584C53v35Ev();
extern void _ZN6S584C53v36Ev();
extern void _ZN6S584C53v37Ev();
extern void _ZN6S584C53v38Ev();
extern void _ZN6S584C53v39Ev();
extern void _ZN6S584C53v40Ev();
extern void _ZN6S584C53v41Ev();
extern void _ZN6S584C53v42Ev();
extern void _ZN6S584C53v43Ev();
extern void _ZN6S584C53v44Ev();
extern void _ZN6S584C53v45Ev();
extern void _ZN6S584C53v46Ev();
extern void _ZN6S584C53v47Ev();
extern void _ZN6S584C53v48Ev();
extern void _ZN6S584C53v49Ev();
extern void _ZN6S584C53v50Ev();
extern void _ZN6S584C53v51Ev();
extern void _ZN6S584C53v52Ev();
extern void _ZN6S584C53v53Ev();
extern void _ZN6S584C53v54Ev();
extern void _ZN6S584C53v55Ev();
extern void _ZN6S584C53v56Ev();
extern void _ZN6S584C53v57Ev();
extern void _ZN6S584C53v58Ev();
extern void _ZN6S584C53v59Ev();
extern void _ZN6S584C53v60Ev();
extern void _ZN6S584C53v61Ev();
extern void _ZN6S584C53v62Ev();
extern void _ZN6S584C53v63Ev();
extern void _ZN6S584C53v64Ev();
extern void _ZN6S584C53v65Ev();
extern void _ZN6S584C53v66Ev();
extern void _ZN6S584C53v67Ev();
extern void _ZN6S584C43v68Ev();
extern void _ZN6S584C43v69Ev();
extern void _ZN6S584C43v70Ev();
extern void _ZN6S584C43v71Ev();
extern void _ZN6S584C43v72Ev();
extern void _ZN6S584C43v73Ev();
extern void _ZN6S584C43v74Ev();
extern void _ZN6S584C43v75Ev();
extern void _ZN6S584C43v76Ev();
extern void _ZN6S584C43v77Ev();
extern void _ZN6S584C43v78Ev();
extern void _ZN6S584C43v79Ev();
extern void _ZN6S584C43v80Ev();
extern void _ZN6S584C43v81Ev();
extern void _ZN6S584C43v82Ev();
extern void _ZN6S584C43v83Ev();
extern void _ZN6S584C43v84Ev();
extern void _ZN6S584C43v85Ev();
extern void _ZN6S584C43v86Ev();
extern void _ZN6S584C43v87Ev();
extern void _ZN6S584C43v88Ev();
extern void _ZN6S584C43v89Ev();
extern void _ZN6S584C33v90Ev();
extern void _ZN6S584C33v91Ev();
extern void _ZN6S584C33v92Ev();
extern void _ZN6S584C33v93Ev();
extern void _ZN6S584C33v94Ev();
extern void _ZN6S584C33v95Ev();
extern void _ZN6S584C33v96Ev();
extern void _ZN6S584C33v97Ev();
extern void _ZN6S584C33v98Ev();
extern void _ZN6S584C33v99Ev();
extern void _ZN6S584C34v100Ev();
extern void _ZN6S584C34v101Ev();
extern void _ZN6S584C34v102Ev();
extern void _ZN6S584C34v103Ev();
extern void _ZN6S584C34v104Ev();
extern void _ZN6S584C34v105Ev();
extern void _ZN6S584C34v106Ev();
extern void _ZN6S584C34v107Ev();
extern void _ZN6S584C34v108Ev();
extern void _ZN6S584C34v109Ev();
extern void _ZN6S584C24v110Ev();
extern void _ZN6S584C24v111Ev();
extern void _ZN6S584C24v112Ev();
extern void _ZN6S584C24v113Ev();
extern void _ZN6S584C12v1Ev();
extern void _ZN6S584C12v2Ev();
extern void _ZN6S584C12v3Ev();
static  VTBL_ENTRY vtc_S584C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S584C1[0]),
  (VTBL_ENTRY)&_ZN6S584C1D1Ev,
  (VTBL_ENTRY)&_ZN6S584C1D0Ev,
  (VTBL_ENTRY)&_ZN6S584C52v4Ev,
  (VTBL_ENTRY)&_ZN6S584C52v5Ev,
  (VTBL_ENTRY)&_ZN6S584C52v6Ev,
  (VTBL_ENTRY)&_ZN6S584C52v7Ev,
  (VTBL_ENTRY)&_ZN6S584C52v8Ev,
  (VTBL_ENTRY)&_ZN6S584C52v9Ev,
  (VTBL_ENTRY)&_ZN6S584C53v10Ev,
  (VTBL_ENTRY)&_ZN6S584C53v11Ev,
  (VTBL_ENTRY)&_ZN6S584C53v12Ev,
  (VTBL_ENTRY)&_ZN6S584C53v13Ev,
  (VTBL_ENTRY)&_ZN6S584C53v14Ev,
  (VTBL_ENTRY)&_ZN6S584C53v15Ev,
  (VTBL_ENTRY)&_ZN6S584C53v16Ev,
  (VTBL_ENTRY)&_ZN6S584C53v17Ev,
  (VTBL_ENTRY)&_ZN6S584C53v18Ev,
  (VTBL_ENTRY)&_ZN6S584C53v19Ev,
  (VTBL_ENTRY)&_ZN6S584C53v20Ev,
  (VTBL_ENTRY)&_ZN6S584C53v21Ev,
  (VTBL_ENTRY)&_ZN6S584C53v22Ev,
  (VTBL_ENTRY)&_ZN6S584C53v23Ev,
  (VTBL_ENTRY)&_ZN6S584C53v24Ev,
  (VTBL_ENTRY)&_ZN6S584C53v25Ev,
  (VTBL_ENTRY)&_ZN6S584C53v26Ev,
  (VTBL_ENTRY)&_ZN6S584C53v27Ev,
  (VTBL_ENTRY)&_ZN6S584C53v28Ev,
  (VTBL_ENTRY)&_ZN6S584C53v29Ev,
  (VTBL_ENTRY)&_ZN6S584C53v30Ev,
  (VTBL_ENTRY)&_ZN6S584C53v31Ev,
  (VTBL_ENTRY)&_ZN6S584C53v32Ev,
  (VTBL_ENTRY)&_ZN6S584C53v33Ev,
  (VTBL_ENTRY)&_ZN6S584C53v34Ev,
  (VTBL_ENTRY)&_ZN6S584C53v35Ev,
  (VTBL_ENTRY)&_ZN6S584C53v36Ev,
  (VTBL_ENTRY)&_ZN6S584C53v37Ev,
  (VTBL_ENTRY)&_ZN6S584C53v38Ev,
  (VTBL_ENTRY)&_ZN6S584C53v39Ev,
  (VTBL_ENTRY)&_ZN6S584C53v40Ev,
  (VTBL_ENTRY)&_ZN6S584C53v41Ev,
  (VTBL_ENTRY)&_ZN6S584C53v42Ev,
  (VTBL_ENTRY)&_ZN6S584C53v43Ev,
  (VTBL_ENTRY)&_ZN6S584C53v44Ev,
  (VTBL_ENTRY)&_ZN6S584C53v45Ev,
  (VTBL_ENTRY)&_ZN6S584C53v46Ev,
  (VTBL_ENTRY)&_ZN6S584C53v47Ev,
  (VTBL_ENTRY)&_ZN6S584C53v48Ev,
  (VTBL_ENTRY)&_ZN6S584C53v49Ev,
  (VTBL_ENTRY)&_ZN6S584C53v50Ev,
  (VTBL_ENTRY)&_ZN6S584C53v51Ev,
  (VTBL_ENTRY)&_ZN6S584C53v52Ev,
  (VTBL_ENTRY)&_ZN6S584C53v53Ev,
  (VTBL_ENTRY)&_ZN6S584C53v54Ev,
  (VTBL_ENTRY)&_ZN6S584C53v55Ev,
  (VTBL_ENTRY)&_ZN6S584C53v56Ev,
  (VTBL_ENTRY)&_ZN6S584C53v57Ev,
  (VTBL_ENTRY)&_ZN6S584C53v58Ev,
  (VTBL_ENTRY)&_ZN6S584C53v59Ev,
  (VTBL_ENTRY)&_ZN6S584C53v60Ev,
  (VTBL_ENTRY)&_ZN6S584C53v61Ev,
  (VTBL_ENTRY)&_ZN6S584C53v62Ev,
  (VTBL_ENTRY)&_ZN6S584C53v63Ev,
  (VTBL_ENTRY)&_ZN6S584C53v64Ev,
  (VTBL_ENTRY)&_ZN6S584C53v65Ev,
  (VTBL_ENTRY)&_ZN6S584C53v66Ev,
  (VTBL_ENTRY)&_ZN6S584C53v67Ev,
  (VTBL_ENTRY)&_ZN6S584C43v68Ev,
  (VTBL_ENTRY)&_ZN6S584C43v69Ev,
  (VTBL_ENTRY)&_ZN6S584C43v70Ev,
  (VTBL_ENTRY)&_ZN6S584C43v71Ev,
  (VTBL_ENTRY)&_ZN6S584C43v72Ev,
  (VTBL_ENTRY)&_ZN6S584C43v73Ev,
  (VTBL_ENTRY)&_ZN6S584C43v74Ev,
  (VTBL_ENTRY)&_ZN6S584C43v75Ev,
  (VTBL_ENTRY)&_ZN6S584C43v76Ev,
  (VTBL_ENTRY)&_ZN6S584C43v77Ev,
  (VTBL_ENTRY)&_ZN6S584C43v78Ev,
  (VTBL_ENTRY)&_ZN6S584C43v79Ev,
  (VTBL_ENTRY)&_ZN6S584C43v80Ev,
  (VTBL_ENTRY)&_ZN6S584C43v81Ev,
  (VTBL_ENTRY)&_ZN6S584C43v82Ev,
  (VTBL_ENTRY)&_ZN6S584C43v83Ev,
  (VTBL_ENTRY)&_ZN6S584C43v84Ev,
  (VTBL_ENTRY)&_ZN6S584C43v85Ev,
  (VTBL_ENTRY)&_ZN6S584C43v86Ev,
  (VTBL_ENTRY)&_ZN6S584C43v87Ev,
  (VTBL_ENTRY)&_ZN6S584C43v88Ev,
  (VTBL_ENTRY)&_ZN6S584C43v89Ev,
  (VTBL_ENTRY)&_ZN6S584C33v90Ev,
  (VTBL_ENTRY)&_ZN6S584C33v91Ev,
  (VTBL_ENTRY)&_ZN6S584C33v92Ev,
  (VTBL_ENTRY)&_ZN6S584C33v93Ev,
  (VTBL_ENTRY)&_ZN6S584C33v94Ev,
  (VTBL_ENTRY)&_ZN6S584C33v95Ev,
  (VTBL_ENTRY)&_ZN6S584C33v96Ev,
  (VTBL_ENTRY)&_ZN6S584C33v97Ev,
  (VTBL_ENTRY)&_ZN6S584C33v98Ev,
  (VTBL_ENTRY)&_ZN6S584C33v99Ev,
  (VTBL_ENTRY)&_ZN6S584C34v100Ev,
  (VTBL_ENTRY)&_ZN6S584C34v101Ev,
  (VTBL_ENTRY)&_ZN6S584C34v102Ev,
  (VTBL_ENTRY)&_ZN6S584C34v103Ev,
  (VTBL_ENTRY)&_ZN6S584C34v104Ev,
  (VTBL_ENTRY)&_ZN6S584C34v105Ev,
  (VTBL_ENTRY)&_ZN6S584C34v106Ev,
  (VTBL_ENTRY)&_ZN6S584C34v107Ev,
  (VTBL_ENTRY)&_ZN6S584C34v108Ev,
  (VTBL_ENTRY)&_ZN6S584C34v109Ev,
  (VTBL_ENTRY)&_ZN6S584C24v110Ev,
  (VTBL_ENTRY)&_ZN6S584C24v111Ev,
  (VTBL_ENTRY)&_ZN6S584C24v112Ev,
  (VTBL_ENTRY)&_ZN6S584C24v113Ev,
  (VTBL_ENTRY)&_ZN6S584C12v1Ev,
  (VTBL_ENTRY)&_ZN6S584C12v2Ev,
  (VTBL_ENTRY)&_ZN6S584C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S584C1[];
extern  VTBL_ENTRY _ZTV6S584C1[];
Class_Descriptor cd_S584C1 = {  "S584C1", // class name
  bases_S584C1, 4,
  &(vtc_S584C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,228), // object size
  NSPAIRA(_ZTI6S584C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S584C1),117, //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  S487C6_nt  {
  ::S7368C9_nt s487c6f0;
  int s487c6f1;
  void  mf487c6(); // _ZN9S487C6_nt7mf487c6Ev
};
//SIG(-1 S487C6_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S487C6_nt ::mf487c6(){}

//skip512 S487C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C5_nt  {
  void *s487c5f0;
  ::S487C6_nt s487c5f1;
  char s487c5f2;
  int s487c5f3;
  virtual  ~S487C5_nt(); // _ZN9S487C5_ntD1Ev
  virtual void  v13(); // _ZN9S487C5_nt3v13Ev
  virtual void  v14(); // _ZN9S487C5_nt3v14Ev
  virtual void  v15(); // _ZN9S487C5_nt3v15Ev
  virtual void  v16(); // _ZN9S487C5_nt3v16Ev
  virtual void  v17(); // _ZN9S487C5_nt3v17Ev
  virtual void  v18(); // _ZN9S487C5_nt3v18Ev
  virtual void  v19(); // _ZN9S487C5_nt3v19Ev
  virtual void  v20(); // _ZN9S487C5_nt3v20Ev
  virtual void  v21(); // _ZN9S487C5_nt3v21Ev
  virtual void  v22(); // _ZN9S487C5_nt3v22Ev
  virtual void  v23(); // _ZN9S487C5_nt3v23Ev
  virtual void  v24(); // _ZN9S487C5_nt3v24Ev
  virtual void  v25(); // _ZN9S487C5_nt3v25Ev
  S487C5_nt(); // tgen
};
//SIG(-1 S487C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fc Fi}


 S487C5_nt ::~S487C5_nt(){ note_dtor("S487C5_nt", this);}
void  S487C5_nt ::v13(){vfunc_called(this, "_ZN9S487C5_nt3v13Ev");}
void  S487C5_nt ::v14(){vfunc_called(this, "_ZN9S487C5_nt3v14Ev");}
void  S487C5_nt ::v15(){vfunc_called(this, "_ZN9S487C5_nt3v15Ev");}
void  S487C5_nt ::v16(){vfunc_called(this, "_ZN9S487C5_nt3v16Ev");}
void  S487C5_nt ::v17(){vfunc_called(this, "_ZN9S487C5_nt3v17Ev");}
void  S487C5_nt ::v18(){vfunc_called(this, "_ZN9S487C5_nt3v18Ev");}
void  S487C5_nt ::v19(){vfunc_called(this, "_ZN9S487C5_nt3v19Ev");}
void  S487C5_nt ::v20(){vfunc_called(this, "_ZN9S487C5_nt3v20Ev");}
void  S487C5_nt ::v21(){vfunc_called(this, "_ZN9S487C5_nt3v21Ev");}
void  S487C5_nt ::v22(){vfunc_called(this, "_ZN9S487C5_nt3v22Ev");}
void  S487C5_nt ::v23(){vfunc_called(this, "_ZN9S487C5_nt3v23Ev");}
void  S487C5_nt ::v24(){vfunc_called(this, "_ZN9S487C5_nt3v24Ev");}
void  S487C5_nt ::v25(){vfunc_called(this, "_ZN9S487C5_nt3v25Ev");}
S487C5_nt ::S487C5_nt(){ note_ctor("S487C5_nt", this);} // tgen

//skip512 S487C5_nt

#else // __cplusplus

extern void _ZN9S487C5_ntC1Ev();
extern void _ZN9S487C5_ntD1Ev();
Name_Map name_map_S487C5_nt[] = {
  NSPAIR(_ZN9S487C5_ntC1Ev),
  NSPAIR(_ZN9S487C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S487C5_nt[];
extern void _ZN9S487C5_ntD1Ev();
extern void _ZN9S487C5_ntD0Ev();
extern void _ZN9S487C5_nt3v13Ev();
extern void _ZN9S487C5_nt3v14Ev();
extern void _ZN9S487C5_nt3v15Ev();
extern void _ZN9S487C5_nt3v16Ev();
extern void _ZN9S487C5_nt3v17Ev();
extern void _ZN9S487C5_nt3v18Ev();
extern void _ZN9S487C5_nt3v19Ev();
extern void _ZN9S487C5_nt3v20Ev();
extern void _ZN9S487C5_nt3v21Ev();
extern void _ZN9S487C5_nt3v22Ev();
extern void _ZN9S487C5_nt3v23Ev();
extern void _ZN9S487C5_nt3v24Ev();
extern void _ZN9S487C5_nt3v25Ev();
static  VTBL_ENTRY vtc_S487C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S487C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S487C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S487C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI9S487C5_nt[];
VTBL_ENTRY *P__ZTI9S487C5_nt = _ZTI9S487C5_nt; 
extern  VTBL_ENTRY _ZTV9S487C5_nt[];
Class_Descriptor cd_S487C5_nt = {  "S487C5_nt", // class name
  0,0,//no base classes
  &(vtc_S487C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI9S487C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S487C5_nt),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C4_nt  : S487C5_nt {
  void *s487c4f0[3];
  int s487c4f1;
  virtual  ~S487C4_nt(); // _ZN9S487C4_ntD1Ev
  virtual void  v26(); // _ZN9S487C4_nt3v26Ev
  virtual void  v27(); // _ZN9S487C4_nt3v27Ev
  virtual void  v28(); // _ZN9S487C4_nt3v28Ev
  virtual void  v29(); // _ZN9S487C4_nt3v29Ev
  virtual void  v30(); // _ZN9S487C4_nt3v30Ev
  virtual void  v31(); // _ZN9S487C4_nt3v31Ev
  virtual void  v32(); // _ZN9S487C4_nt3v32Ev
  virtual void  v33(); // _ZN9S487C4_nt3v33Ev
  virtual void  v34(); // _ZN9S487C4_nt3v34Ev
  virtual void  v35(); // _ZN9S487C4_nt3v35Ev
  virtual void  v36(); // _ZN9S487C4_nt3v36Ev
  S487C4_nt(); // tgen
};
//SIG(-1 S487C4_nt) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fc Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] Fi}


 S487C4_nt ::~S487C4_nt(){ note_dtor("S487C4_nt", this);}
void  S487C4_nt ::v26(){vfunc_called(this, "_ZN9S487C4_nt3v26Ev");}
void  S487C4_nt ::v27(){vfunc_called(this, "_ZN9S487C4_nt3v27Ev");}
void  S487C4_nt ::v28(){vfunc_called(this, "_ZN9S487C4_nt3v28Ev");}
void  S487C4_nt ::v29(){vfunc_called(this, "_ZN9S487C4_nt3v29Ev");}
void  S487C4_nt ::v30(){vfunc_called(this, "_ZN9S487C4_nt3v30Ev");}
void  S487C4_nt ::v31(){vfunc_called(this, "_ZN9S487C4_nt3v31Ev");}
void  S487C4_nt ::v32(){vfunc_called(this, "_ZN9S487C4_nt3v32Ev");}
void  S487C4_nt ::v33(){vfunc_called(this, "_ZN9S487C4_nt3v33Ev");}
void  S487C4_nt ::v34(){vfunc_called(this, "_ZN9S487C4_nt3v34Ev");}
void  S487C4_nt ::v35(){vfunc_called(this, "_ZN9S487C4_nt3v35Ev");}
void  S487C4_nt ::v36(){vfunc_called(this, "_ZN9S487C4_nt3v36Ev");}
S487C4_nt ::S487C4_nt(){ note_ctor("S487C4_nt", this);} // tgen

//skip512 S487C4_nt

#else // __cplusplus

extern void _ZN9S487C4_ntC1Ev();
extern void _ZN9S487C4_ntD1Ev();
Name_Map name_map_S487C4_nt[] = {
  NSPAIR(_ZN9S487C4_ntC1Ev),
  NSPAIR(_ZN9S487C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S487C5_nt;
extern VTBL_ENTRY _ZTI9S487C5_nt[];
extern  VTBL_ENTRY _ZTV9S487C5_nt[];
static Base_Class bases_S487C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S487C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S487C4_nt[];
extern void _ZN9S487C4_ntD1Ev();
extern void _ZN9S487C4_ntD0Ev();
extern void _ZN9S487C5_nt3v13Ev();
extern void _ZN9S487C5_nt3v14Ev();
extern void _ZN9S487C5_nt3v15Ev();
extern void _ZN9S487C5_nt3v16Ev();
extern void _ZN9S487C5_nt3v17Ev();
extern void _ZN9S487C5_nt3v18Ev();
extern void _ZN9S487C5_nt3v19Ev();
extern void _ZN9S487C5_nt3v20Ev();
extern void _ZN9S487C5_nt3v21Ev();
extern void _ZN9S487C5_nt3v22Ev();
extern void _ZN9S487C5_nt3v23Ev();
extern void _ZN9S487C5_nt3v24Ev();
extern void _ZN9S487C5_nt3v25Ev();
extern void _ZN9S487C4_nt3v26Ev();
extern void _ZN9S487C4_nt3v27Ev();
extern void _ZN9S487C4_nt3v28Ev();
extern void _ZN9S487C4_nt3v29Ev();
extern void _ZN9S487C4_nt3v30Ev();
extern void _ZN9S487C4_nt3v31Ev();
extern void _ZN9S487C4_nt3v32Ev();
extern void _ZN9S487C4_nt3v33Ev();
extern void _ZN9S487C4_nt3v34Ev();
extern void _ZN9S487C4_nt3v35Ev();
extern void _ZN9S487C4_nt3v36Ev();
static  VTBL_ENTRY vtc_S487C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S487C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S487C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S487C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v36Ev,
};
extern VTBL_ENTRY _ZTI9S487C4_nt[];
VTBL_ENTRY *P__ZTI9S487C4_nt = _ZTI9S487C4_nt; 
extern  VTBL_ENTRY _ZTV9S487C4_nt[];
Class_Descriptor cd_S487C4_nt = {  "S487C4_nt", // class name
  bases_S487C4_nt, 1,
  &(vtc_S487C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI9S487C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S487C4_nt),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C10_nt  {
  __tsi64 s487c10f0;
  void  mf487c10(); // _ZN10S487C10_nt8mf487c10Ev
};
//SIG(-1 S487C10_nt) C1{ m FL}


void  S487C10_nt ::mf487c10(){}

//skip512 S487C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C9_nt  {
  ::S487C10_nt s487c9f0;
  void  mf487c9(); // _ZN9S487C9_nt7mf487c9Ev
};
//SIG(-1 S487C9_nt) C1{ m FC2{ m FL}}


void  S487C9_nt ::mf487c9(){}

//skip512 S487C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C3_nt  : S487C4_nt {
  void *s487c3f0[2];
  int s487c3f1[3];
  ::S487C6_nt s487c3f2;
  char s487c3f3;
  ::S487C9_nt s487c3f4;
  char s487c3f5;
  int s487c3f6;
  char s487c3f7;
  int s487c3f8;
  char s487c3f9[2];
  int s487c3f10;
  char s487c3f11;
  virtual  ~S487C3_nt(); // _ZN9S487C3_ntD1Ev
  virtual void  v37(); // _ZN9S487C3_nt3v37Ev
  virtual void  v38(); // _ZN9S487C3_nt3v38Ev
  virtual void  v39(); // _ZN9S487C3_nt3v39Ev
  virtual void  v40(); // _ZN9S487C3_nt3v40Ev
  virtual void  v41(); // _ZN9S487C3_nt3v41Ev
  virtual void  v42(); // _ZN9S487C3_nt3v42Ev
  virtual void  v43(); // _ZN9S487C3_nt3v43Ev
  virtual void  v44(); // _ZN9S487C3_nt3v44Ev
  virtual void  v45(); // _ZN9S487C3_nt3v45Ev
  virtual void  v46(); // _ZN9S487C3_nt3v46Ev
  virtual void  v47(); // _ZN9S487C3_nt3v47Ev
  virtual void  v48(); // _ZN9S487C3_nt3v48Ev
  virtual void  v49(); // _ZN9S487C3_nt3v49Ev
  virtual void  v50(); // _ZN9S487C3_nt3v50Ev
  virtual void  v51(); // _ZN9S487C3_nt3v51Ev
  virtual void  v52(); // _ZN9S487C3_nt3v52Ev
  virtual void  v53(); // _ZN9S487C3_nt3v53Ev
  S487C3_nt(); // tgen
};
//SIG(-1 S487C3_nt) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fc Fi} vd v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fp[3] Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[2] Fi[3] FC4 Fc FC7{ m FC8{ m FL}} Fc Fi Fc Fi Fc[2] Fi Fc}


 S487C3_nt ::~S487C3_nt(){ note_dtor("S487C3_nt", this);}
void  S487C3_nt ::v37(){vfunc_called(this, "_ZN9S487C3_nt3v37Ev");}
void  S487C3_nt ::v38(){vfunc_called(this, "_ZN9S487C3_nt3v38Ev");}
void  S487C3_nt ::v39(){vfunc_called(this, "_ZN9S487C3_nt3v39Ev");}
void  S487C3_nt ::v40(){vfunc_called(this, "_ZN9S487C3_nt3v40Ev");}
void  S487C3_nt ::v41(){vfunc_called(this, "_ZN9S487C3_nt3v41Ev");}
void  S487C3_nt ::v42(){vfunc_called(this, "_ZN9S487C3_nt3v42Ev");}
void  S487C3_nt ::v43(){vfunc_called(this, "_ZN9S487C3_nt3v43Ev");}
void  S487C3_nt ::v44(){vfunc_called(this, "_ZN9S487C3_nt3v44Ev");}
void  S487C3_nt ::v45(){vfunc_called(this, "_ZN9S487C3_nt3v45Ev");}
void  S487C3_nt ::v46(){vfunc_called(this, "_ZN9S487C3_nt3v46Ev");}
void  S487C3_nt ::v47(){vfunc_called(this, "_ZN9S487C3_nt3v47Ev");}
void  S487C3_nt ::v48(){vfunc_called(this, "_ZN9S487C3_nt3v48Ev");}
void  S487C3_nt ::v49(){vfunc_called(this, "_ZN9S487C3_nt3v49Ev");}
void  S487C3_nt ::v50(){vfunc_called(this, "_ZN9S487C3_nt3v50Ev");}
void  S487C3_nt ::v51(){vfunc_called(this, "_ZN9S487C3_nt3v51Ev");}
void  S487C3_nt ::v52(){vfunc_called(this, "_ZN9S487C3_nt3v52Ev");}
void  S487C3_nt ::v53(){vfunc_called(this, "_ZN9S487C3_nt3v53Ev");}
S487C3_nt ::S487C3_nt(){ note_ctor("S487C3_nt", this);} // tgen

//skip512 S487C3_nt

#else // __cplusplus

extern void _ZN9S487C3_ntC1Ev();
extern void _ZN9S487C3_ntD1Ev();
Name_Map name_map_S487C3_nt[] = {
  NSPAIR(_ZN9S487C3_ntC1Ev),
  NSPAIR(_ZN9S487C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S487C5_nt;
extern VTBL_ENTRY _ZTI9S487C5_nt[];
extern  VTBL_ENTRY _ZTV9S487C5_nt[];
extern Class_Descriptor cd_S487C4_nt;
extern VTBL_ENTRY _ZTI9S487C4_nt[];
extern  VTBL_ENTRY _ZTV9S487C4_nt[];
static Base_Class bases_S487C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S487C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S487C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S487C3_nt[];
extern void _ZN9S487C3_ntD1Ev();
extern void _ZN9S487C3_ntD0Ev();
extern void _ZN9S487C5_nt3v13Ev();
extern void _ZN9S487C5_nt3v14Ev();
extern void _ZN9S487C5_nt3v15Ev();
extern void _ZN9S487C5_nt3v16Ev();
extern void _ZN9S487C5_nt3v17Ev();
extern void _ZN9S487C5_nt3v18Ev();
extern void _ZN9S487C5_nt3v19Ev();
extern void _ZN9S487C5_nt3v20Ev();
extern void _ZN9S487C5_nt3v21Ev();
extern void _ZN9S487C5_nt3v22Ev();
extern void _ZN9S487C5_nt3v23Ev();
extern void _ZN9S487C5_nt3v24Ev();
extern void _ZN9S487C5_nt3v25Ev();
extern void _ZN9S487C4_nt3v26Ev();
extern void _ZN9S487C4_nt3v27Ev();
extern void _ZN9S487C4_nt3v28Ev();
extern void _ZN9S487C4_nt3v29Ev();
extern void _ZN9S487C4_nt3v30Ev();
extern void _ZN9S487C4_nt3v31Ev();
extern void _ZN9S487C4_nt3v32Ev();
extern void _ZN9S487C4_nt3v33Ev();
extern void _ZN9S487C4_nt3v34Ev();
extern void _ZN9S487C4_nt3v35Ev();
extern void _ZN9S487C4_nt3v36Ev();
extern void _ZN9S487C3_nt3v37Ev();
extern void _ZN9S487C3_nt3v38Ev();
extern void _ZN9S487C3_nt3v39Ev();
extern void _ZN9S487C3_nt3v40Ev();
extern void _ZN9S487C3_nt3v41Ev();
extern void _ZN9S487C3_nt3v42Ev();
extern void _ZN9S487C3_nt3v43Ev();
extern void _ZN9S487C3_nt3v44Ev();
extern void _ZN9S487C3_nt3v45Ev();
extern void _ZN9S487C3_nt3v46Ev();
extern void _ZN9S487C3_nt3v47Ev();
extern void _ZN9S487C3_nt3v48Ev();
extern void _ZN9S487C3_nt3v49Ev();
extern void _ZN9S487C3_nt3v50Ev();
extern void _ZN9S487C3_nt3v51Ev();
extern void _ZN9S487C3_nt3v52Ev();
extern void _ZN9S487C3_nt3v53Ev();
static  VTBL_ENTRY vtc_S487C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S487C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S487C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S487C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v53Ev,
};
extern VTBL_ENTRY _ZTI9S487C3_nt[];
VTBL_ENTRY *P__ZTI9S487C3_nt = _ZTI9S487C3_nt; 
extern  VTBL_ENTRY _ZTV9S487C3_nt[];
Class_Descriptor cd_S487C3_nt = {  "S487C3_nt", // class name
  bases_S487C3_nt, 2,
  &(vtc_S487C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI9S487C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S487C3_nt),45, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C2_nt  : S487C3_nt {
  int s487c2f0[4];
  virtual  ~S487C2_nt(); // _ZN9S487C2_ntD1Ev
  virtual void  v54(); // _ZN9S487C2_nt3v54Ev
  virtual void  v55(); // _ZN9S487C2_nt3v55Ev
  virtual void  v56(); // _ZN9S487C2_nt3v56Ev
  virtual void  v57(); // _ZN9S487C2_nt3v57Ev
  virtual void  v58(); // _ZN9S487C2_nt3v58Ev
  virtual void  v59(); // _ZN9S487C2_nt3v59Ev
  virtual void  v60(); // _ZN9S487C2_nt3v60Ev
  virtual void  v61(); // _ZN9S487C2_nt3v61Ev
  virtual void  v62(); // _ZN9S487C2_nt3v62Ev
  virtual void  v63(); // _ZN9S487C2_nt3v63Ev
  virtual void  v64(); // _ZN9S487C2_nt3v64Ev
  virtual void  v65(); // _ZN9S487C2_nt3v65Ev
  virtual void  v66(); // _ZN9S487C2_nt3v66Ev
  S487C2_nt(); // tgen
};
//SIG(-1 S487C2_nt) C1{ BC2{ BC3{ BC4{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fc Fi} vd v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fp[3] Fi} vd v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 Fp[2] Fi[3] FC5 Fc FC8{ m FC9{ m FL}} Fc Fi Fc Fi Fc[2] Fi Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fi[4]}


 S487C2_nt ::~S487C2_nt(){ note_dtor("S487C2_nt", this);}
void  S487C2_nt ::v54(){vfunc_called(this, "_ZN9S487C2_nt3v54Ev");}
void  S487C2_nt ::v55(){vfunc_called(this, "_ZN9S487C2_nt3v55Ev");}
void  S487C2_nt ::v56(){vfunc_called(this, "_ZN9S487C2_nt3v56Ev");}
void  S487C2_nt ::v57(){vfunc_called(this, "_ZN9S487C2_nt3v57Ev");}
void  S487C2_nt ::v58(){vfunc_called(this, "_ZN9S487C2_nt3v58Ev");}
void  S487C2_nt ::v59(){vfunc_called(this, "_ZN9S487C2_nt3v59Ev");}
void  S487C2_nt ::v60(){vfunc_called(this, "_ZN9S487C2_nt3v60Ev");}
void  S487C2_nt ::v61(){vfunc_called(this, "_ZN9S487C2_nt3v61Ev");}
void  S487C2_nt ::v62(){vfunc_called(this, "_ZN9S487C2_nt3v62Ev");}
void  S487C2_nt ::v63(){vfunc_called(this, "_ZN9S487C2_nt3v63Ev");}
void  S487C2_nt ::v64(){vfunc_called(this, "_ZN9S487C2_nt3v64Ev");}
void  S487C2_nt ::v65(){vfunc_called(this, "_ZN9S487C2_nt3v65Ev");}
void  S487C2_nt ::v66(){vfunc_called(this, "_ZN9S487C2_nt3v66Ev");}
S487C2_nt ::S487C2_nt(){ note_ctor("S487C2_nt", this);} // tgen

//skip512 S487C2_nt

#else // __cplusplus

extern void _ZN9S487C2_ntC1Ev();
extern void _ZN9S487C2_ntD1Ev();
Name_Map name_map_S487C2_nt[] = {
  NSPAIR(_ZN9S487C2_ntC1Ev),
  NSPAIR(_ZN9S487C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S487C5_nt;
extern VTBL_ENTRY _ZTI9S487C5_nt[];
extern  VTBL_ENTRY _ZTV9S487C5_nt[];
extern Class_Descriptor cd_S487C4_nt;
extern VTBL_ENTRY _ZTI9S487C4_nt[];
extern  VTBL_ENTRY _ZTV9S487C4_nt[];
extern Class_Descriptor cd_S487C3_nt;
extern VTBL_ENTRY _ZTI9S487C3_nt[];
extern  VTBL_ENTRY _ZTV9S487C3_nt[];
static Base_Class bases_S487C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S487C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S487C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S487C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S487C2_nt[];
extern void _ZN9S487C2_ntD1Ev();
extern void _ZN9S487C2_ntD0Ev();
extern void _ZN9S487C5_nt3v13Ev();
extern void _ZN9S487C5_nt3v14Ev();
extern void _ZN9S487C5_nt3v15Ev();
extern void _ZN9S487C5_nt3v16Ev();
extern void _ZN9S487C5_nt3v17Ev();
extern void _ZN9S487C5_nt3v18Ev();
extern void _ZN9S487C5_nt3v19Ev();
extern void _ZN9S487C5_nt3v20Ev();
extern void _ZN9S487C5_nt3v21Ev();
extern void _ZN9S487C5_nt3v22Ev();
extern void _ZN9S487C5_nt3v23Ev();
extern void _ZN9S487C5_nt3v24Ev();
extern void _ZN9S487C5_nt3v25Ev();
extern void _ZN9S487C4_nt3v26Ev();
extern void _ZN9S487C4_nt3v27Ev();
extern void _ZN9S487C4_nt3v28Ev();
extern void _ZN9S487C4_nt3v29Ev();
extern void _ZN9S487C4_nt3v30Ev();
extern void _ZN9S487C4_nt3v31Ev();
extern void _ZN9S487C4_nt3v32Ev();
extern void _ZN9S487C4_nt3v33Ev();
extern void _ZN9S487C4_nt3v34Ev();
extern void _ZN9S487C4_nt3v35Ev();
extern void _ZN9S487C4_nt3v36Ev();
extern void _ZN9S487C3_nt3v37Ev();
extern void _ZN9S487C3_nt3v38Ev();
extern void _ZN9S487C3_nt3v39Ev();
extern void _ZN9S487C3_nt3v40Ev();
extern void _ZN9S487C3_nt3v41Ev();
extern void _ZN9S487C3_nt3v42Ev();
extern void _ZN9S487C3_nt3v43Ev();
extern void _ZN9S487C3_nt3v44Ev();
extern void _ZN9S487C3_nt3v45Ev();
extern void _ZN9S487C3_nt3v46Ev();
extern void _ZN9S487C3_nt3v47Ev();
extern void _ZN9S487C3_nt3v48Ev();
extern void _ZN9S487C3_nt3v49Ev();
extern void _ZN9S487C3_nt3v50Ev();
extern void _ZN9S487C3_nt3v51Ev();
extern void _ZN9S487C3_nt3v52Ev();
extern void _ZN9S487C3_nt3v53Ev();
extern void _ZN9S487C2_nt3v54Ev();
extern void _ZN9S487C2_nt3v55Ev();
extern void _ZN9S487C2_nt3v56Ev();
extern void _ZN9S487C2_nt3v57Ev();
extern void _ZN9S487C2_nt3v58Ev();
extern void _ZN9S487C2_nt3v59Ev();
extern void _ZN9S487C2_nt3v60Ev();
extern void _ZN9S487C2_nt3v61Ev();
extern void _ZN9S487C2_nt3v62Ev();
extern void _ZN9S487C2_nt3v63Ev();
extern void _ZN9S487C2_nt3v64Ev();
extern void _ZN9S487C2_nt3v65Ev();
extern void _ZN9S487C2_nt3v66Ev();
static  VTBL_ENTRY vtc_S487C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S487C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S487C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S487C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v66Ev,
};
extern VTBL_ENTRY _ZTI9S487C2_nt[];
VTBL_ENTRY *P__ZTI9S487C2_nt = _ZTI9S487C2_nt; 
extern  VTBL_ENTRY _ZTV9S487C2_nt[];
Class_Descriptor cd_S487C2_nt = {  "S487C2_nt", // class name
  bases_S487C2_nt, 3,
  &(vtc_S487C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI9S487C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S487C2_nt),58, //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  S487C11_nt  {
  void *s487c11f0;
  int s487c11f1;
  ::S7368C78 s487c11f2;
  void  mf487c11(); // _ZN10S487C11_nt8mf487c11Ev
};
//SIG(-1 S487C11_nt) C1{ m Fp Fi FC2{ m}}


void  S487C11_nt ::mf487c11(){}

//skip512 S487C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C14_nt  {
  void *s487c14f0[2];
  void  mf487c14(); // _ZN10S487C14_nt8mf487c14Ev
};
//SIG(-1 S487C14_nt) C1{ m Fp[2]}


void  S487C14_nt ::mf487c14(){}

//skip512 S487C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C16  {
  void *s487c16f0[2];
  void  mf487c16(); // _ZN7S487C168mf487c16Ev
};
//SIG(-1 S487C16) C1{ m Fp[2]}


void  S487C16 ::mf487c16(){}

static void Test_S487C16()
{
  {
    init_simple_test("S487C16");
    S487C16 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S487C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S487C16)");
    check_field_offset(lv, s487c16f0, 0, "S487C16.s487c16f0");
  }
}
static Arrange_To_Call_Me vS487C16(Test_S487C16, "S487C16", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C22_nt  {
  __tsi64 s487c22f0;
  void *s487c22f1;
  int s487c22f2;
  virtual  ~S487C22_nt(); // _ZN10S487C22_ntD1Ev
  virtual void  v69(); // _ZN10S487C22_nt3v69Ev
  virtual void  v70(); // _ZN10S487C22_nt3v70Ev
  virtual void  v71(); // _ZN10S487C22_nt3v71Ev
  S487C22_nt(); // tgen
};
//SIG(-1 S487C22_nt) C1{ vd v1 v2 v3 FL Fp Fi}


 S487C22_nt ::~S487C22_nt(){ note_dtor("S487C22_nt", this);}
void  S487C22_nt ::v69(){vfunc_called(this, "_ZN10S487C22_nt3v69Ev");}
void  S487C22_nt ::v70(){vfunc_called(this, "_ZN10S487C22_nt3v70Ev");}
void  S487C22_nt ::v71(){vfunc_called(this, "_ZN10S487C22_nt3v71Ev");}
S487C22_nt ::S487C22_nt(){ note_ctor("S487C22_nt", this);} // tgen

//skip512 S487C22_nt

#else // __cplusplus

extern void _ZN10S487C22_ntC1Ev();
extern void _ZN10S487C22_ntD1Ev();
Name_Map name_map_S487C22_nt[] = {
  NSPAIR(_ZN10S487C22_ntC1Ev),
  NSPAIR(_ZN10S487C22_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S487C22_nt[];
extern void _ZN10S487C22_ntD1Ev();
extern void _ZN10S487C22_ntD0Ev();
extern void _ZN10S487C22_nt3v69Ev();
extern void _ZN10S487C22_nt3v70Ev();
extern void _ZN10S487C22_nt3v71Ev();
static  VTBL_ENTRY vtc_S487C22_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S487C22_nt[0]),
  (VTBL_ENTRY)&_ZN10S487C22_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S487C22_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S487C22_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S487C22_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S487C22_nt3v71Ev,
};
extern VTBL_ENTRY _ZTI10S487C22_nt[];
VTBL_ENTRY *P__ZTI10S487C22_nt = _ZTI10S487C22_nt; 
extern  VTBL_ENTRY _ZTV10S487C22_nt[];
Class_Descriptor cd_S487C22_nt = {  "S487C22_nt", // class name
  0,0,//no base classes
  &(vtc_S487C22_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S487C22_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S487C22_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  S487C21_nt  : S487C22_nt {
  int s487c21f0;
  char s487c21f1;
  virtual  ~S487C21_nt(); // _ZN10S487C21_ntD1Ev
  virtual void  v67(); // _ZN10S487C21_nt3v67Ev
  virtual void  v68(); // _ZN10S487C21_nt3v68Ev
  S487C21_nt(); // tgen
};
//SIG(1 S487C21_nt) C1{ BC2{ vd v3 v4 v5 FL Fp Fi} vd v1 v2 Fi Fc}


 S487C21_nt ::~S487C21_nt(){ note_dtor("S487C21_nt", this);}
void  S487C21_nt ::v67(){vfunc_called(this, "_ZN10S487C21_nt3v67Ev");}
void  S487C21_nt ::v68(){vfunc_called(this, "_ZN10S487C21_nt3v68Ev");}
S487C21_nt ::S487C21_nt(){ note_ctor("S487C21_nt", this);} // tgen

//skip512 S487C21_nt

#else // __cplusplus

extern void _ZN10S487C21_ntC1Ev();
extern void _ZN10S487C21_ntD1Ev();
Name_Map name_map_S487C21_nt[] = {
  NSPAIR(_ZN10S487C21_ntC1Ev),
  NSPAIR(_ZN10S487C21_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S487C22_nt;
extern VTBL_ENTRY _ZTI10S487C22_nt[];
extern  VTBL_ENTRY _ZTV10S487C22_nt[];
static Base_Class bases_S487C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S487C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S487C21_nt[];
extern void _ZN10S487C21_ntD1Ev();
extern void _ZN10S487C21_ntD0Ev();
extern void _ZN10S487C22_nt3v69Ev();
extern void _ZN10S487C22_nt3v70Ev();
extern void _ZN10S487C22_nt3v71Ev();
extern void _ZN10S487C21_nt3v67Ev();
extern void _ZN10S487C21_nt3v68Ev();
static  VTBL_ENTRY vtc_S487C21_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S487C21_nt[0]),
  (VTBL_ENTRY)&_ZN10S487C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S487C21_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S487C22_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S487C22_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S487C22_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S487C21_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S487C21_nt3v68Ev,
};
extern VTBL_ENTRY _ZTI10S487C21_nt[];
VTBL_ENTRY *P__ZTI10S487C21_nt = _ZTI10S487C21_nt; 
extern  VTBL_ENTRY _ZTV10S487C21_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S487C1  : S487C2_nt {
  int s487c1f0[4];
  ::S487C11_nt s487c1f1;
  ::S487C11_nt s487c1f2;
  char s487c1f3[3];
  int s487c1f4;
  __tsi64 s487c1f5;
  ::S499C36_nt s487c1f6;
  ::S487C14_nt s487c1f7;
  ::S487C14_nt s487c1f8;
  ::S487C16 s487c1f9;
  void *s487c1f10[2];
  ::S7368C77 s487c1f11;
  __tsi64 s487c1f12[2];
  char s487c1f13;
  int s487c1f14;
  char s487c1f15[2];
  ::S7368C69_nt s487c1f16;
  ::S7368C69_nt s487c1f17;
  char s487c1f18;
  int s487c1f19;
  ::S487C21_nt s487c1f20[100];
  ::S10256C11 s487c1f21;
  void *s487c1f22;
  char s487c1f23;
  int s487c1f24;
  virtual  ~S487C1(); // _ZN6S487C1D1Ev
  virtual void  v1(); // _ZN6S487C12v1Ev
  virtual void  v2(); // _ZN6S487C12v2Ev
  virtual void  v3(); // _ZN6S487C12v3Ev
  virtual void  v4(); // _ZN6S487C12v4Ev
  virtual void  v5(); // _ZN6S487C12v5Ev
  virtual void  v6(); // _ZN6S487C12v6Ev
  virtual void  v7(); // _ZN6S487C12v7Ev
  virtual void  v8(); // _ZN6S487C12v8Ev
  virtual void  v9(); // _ZN6S487C12v9Ev
  virtual void  v10(); // _ZN6S487C13v10Ev
  virtual void  v11(); // _ZN6S487C13v11Ev
  virtual void  v12(); // _ZN6S487C13v12Ev
  S487C1(); // tgen
};
//SIG(1 S487C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fc Fi} vd v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 Fp[3] Fi} vd v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[3] FC6 Fc FC9{ m FC10{ m FL}} Fc Fi Fc Fi Fc[2] Fi Fc} vd v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi[4]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fi[4] FC11{ m Fp Fi FC12{ m}} FC11 Fc[3] Fi FL FC13{ m Fp[2]} FC14{ m Fp[2]} FC14 FC15{ m Fp[2]} Fp[2] FC16{ m Fp Fi[2] FC12} FL[2] Fc Fi Fc[2] FC17{ m FC18{ m FL[2]}} FC17 Fc Fi FC19{ BC20{ vd v69 v70 v71 FL Fp Fi} vd v67 v68 Fi Fc}[100] FC21{ m FC22{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC23{ Fi} Fi Fc Fi Fc} Fp Fc Fi}


 S487C1 ::~S487C1(){ note_dtor("S487C1", this);}
void  S487C1 ::v1(){vfunc_called(this, "_ZN6S487C12v1Ev");}
void  S487C1 ::v2(){vfunc_called(this, "_ZN6S487C12v2Ev");}
void  S487C1 ::v3(){vfunc_called(this, "_ZN6S487C12v3Ev");}
void  S487C1 ::v4(){vfunc_called(this, "_ZN6S487C12v4Ev");}
void  S487C1 ::v5(){vfunc_called(this, "_ZN6S487C12v5Ev");}
void  S487C1 ::v6(){vfunc_called(this, "_ZN6S487C12v6Ev");}
void  S487C1 ::v7(){vfunc_called(this, "_ZN6S487C12v7Ev");}
void  S487C1 ::v8(){vfunc_called(this, "_ZN6S487C12v8Ev");}
void  S487C1 ::v9(){vfunc_called(this, "_ZN6S487C12v9Ev");}
void  S487C1 ::v10(){vfunc_called(this, "_ZN6S487C13v10Ev");}
void  S487C1 ::v11(){vfunc_called(this, "_ZN6S487C13v11Ev");}
void  S487C1 ::v12(){vfunc_called(this, "_ZN6S487C13v12Ev");}
S487C1 ::S487C1(){ note_ctor("S487C1", this);} // tgen

static void Test_S487C1()
{
  extern Class_Descriptor cd_S487C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(573,808)];
    init_test(&cd_S487C1, buf);
    S487C1 *dp, &lv = *(dp=new (buf) S487C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4576,3228), "sizeof(S487C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S487C1)");
    check_base_class_offset(lv, (S487C5_nt*)(S487C4_nt*)(S487C3_nt*)(S487C2_nt*), 0, "S487C1");
    check_base_class_offset(lv, (S487C4_nt*)(S487C3_nt*)(S487C2_nt*), 0, "S487C1");
    check_base_class_offset(lv, (S487C3_nt*)(S487C2_nt*), 0, "S487C1");
    check_base_class_offset(lv, (S487C2_nt*), 0, "S487C1");
    check_field_offset(lv, s487c1f0, ABISELECT(196,140), "S487C1.s487c1f0");
    check_field_offset(lv, s487c1f1, ABISELECT(216,156), "S487C1.s487c1f1");
    check_field_offset(lv, s487c1f2, ABISELECT(232,168), "S487C1.s487c1f2");
    check_field_offset(lv, s487c1f3, ABISELECT(248,180), "S487C1.s487c1f3");
    check_field_offset(lv, s487c1f4, ABISELECT(252,184), "S487C1.s487c1f4");
    check_field_offset(lv, s487c1f5, ABISELECT(256,188), "S487C1.s487c1f5");
    check_field_offset(lv, s487c1f6, ABISELECT(264,196), "S487C1.s487c1f6");
    check_field_offset(lv, s487c1f7, ABISELECT(280,204), "S487C1.s487c1f7");
    check_field_offset(lv, s487c1f8, ABISELECT(296,212), "S487C1.s487c1f8");
    check_field_offset(lv, s487c1f9, ABISELECT(312,220), "S487C1.s487c1f9");
    check_field_offset(lv, s487c1f10, ABISELECT(328,228), "S487C1.s487c1f10");
    check_field_offset(lv, s487c1f11, ABISELECT(344,236), "S487C1.s487c1f11");
    check_field_offset(lv, s487c1f12, ABISELECT(368,252), "S487C1.s487c1f12");
    check_field_offset(lv, s487c1f13, ABISELECT(384,268), "S487C1.s487c1f13");
    check_field_offset(lv, s487c1f14, ABISELECT(388,272), "S487C1.s487c1f14");
    check_field_offset(lv, s487c1f15, ABISELECT(392,276), "S487C1.s487c1f15");
    check_field_offset(lv, s487c1f16, ABISELECT(400,280), "S487C1.s487c1f16");
    check_field_offset(lv, s487c1f17, ABISELECT(416,296), "S487C1.s487c1f17");
    check_field_offset(lv, s487c1f18, ABISELECT(432,312), "S487C1.s487c1f18");
    check_field_offset(lv, s487c1f19, ABISELECT(436,316), "S487C1.s487c1f19");
    check_field_offset(lv, s487c1f20, ABISELECT(440,320), "S487C1.s487c1f20");
    check_field_offset(lv, s487c1f21, ABISELECT(4440,3120), "S487C1.s487c1f21");
    check_field_offset(lv, s487c1f22, ABISELECT(4560,3216), "S487C1.s487c1f22");
    check_field_offset(lv, s487c1f23, ABISELECT(4568,3220), "S487C1.s487c1f23");
    check_field_offset(lv, s487c1f24, ABISELECT(4572,3224), "S487C1.s487c1f24");
    test_class_info(&lv, &cd_S487C1);
    dp->~S487C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS487C1(Test_S487C1, "S487C1", ABISELECT(4576,3228));

#else // __cplusplus

extern void _ZN6S487C1C1Ev();
extern void _ZN6S487C1D1Ev();
Name_Map name_map_S487C1[] = {
  NSPAIR(_ZN6S487C1C1Ev),
  NSPAIR(_ZN6S487C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S487C5_nt;
extern VTBL_ENTRY _ZTI9S487C5_nt[];
extern  VTBL_ENTRY _ZTV9S487C5_nt[];
extern Class_Descriptor cd_S487C4_nt;
extern VTBL_ENTRY _ZTI9S487C4_nt[];
extern  VTBL_ENTRY _ZTV9S487C4_nt[];
extern Class_Descriptor cd_S487C3_nt;
extern VTBL_ENTRY _ZTI9S487C3_nt[];
extern  VTBL_ENTRY _ZTV9S487C3_nt[];
extern Class_Descriptor cd_S487C2_nt;
extern VTBL_ENTRY _ZTI9S487C2_nt[];
extern  VTBL_ENTRY _ZTV9S487C2_nt[];
static Base_Class bases_S487C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S487C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S487C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S487C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S487C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S487C1[];
extern void _ZN6S487C1D1Ev();
extern void _ZN6S487C1D0Ev();
extern void _ZN9S487C5_nt3v13Ev();
extern void _ZN9S487C5_nt3v14Ev();
extern void _ZN9S487C5_nt3v15Ev();
extern void _ZN9S487C5_nt3v16Ev();
extern void _ZN9S487C5_nt3v17Ev();
extern void _ZN9S487C5_nt3v18Ev();
extern void _ZN9S487C5_nt3v19Ev();
extern void _ZN9S487C5_nt3v20Ev();
extern void _ZN9S487C5_nt3v21Ev();
extern void _ZN9S487C5_nt3v22Ev();
extern void _ZN9S487C5_nt3v23Ev();
extern void _ZN9S487C5_nt3v24Ev();
extern void _ZN9S487C5_nt3v25Ev();
extern void _ZN9S487C4_nt3v26Ev();
extern void _ZN9S487C4_nt3v27Ev();
extern void _ZN9S487C4_nt3v28Ev();
extern void _ZN9S487C4_nt3v29Ev();
extern void _ZN9S487C4_nt3v30Ev();
extern void _ZN9S487C4_nt3v31Ev();
extern void _ZN9S487C4_nt3v32Ev();
extern void _ZN9S487C4_nt3v33Ev();
extern void _ZN9S487C4_nt3v34Ev();
extern void _ZN9S487C4_nt3v35Ev();
extern void _ZN9S487C4_nt3v36Ev();
extern void _ZN9S487C3_nt3v37Ev();
extern void _ZN9S487C3_nt3v38Ev();
extern void _ZN9S487C3_nt3v39Ev();
extern void _ZN9S487C3_nt3v40Ev();
extern void _ZN9S487C3_nt3v41Ev();
extern void _ZN9S487C3_nt3v42Ev();
extern void _ZN9S487C3_nt3v43Ev();
extern void _ZN9S487C3_nt3v44Ev();
extern void _ZN9S487C3_nt3v45Ev();
extern void _ZN9S487C3_nt3v46Ev();
extern void _ZN9S487C3_nt3v47Ev();
extern void _ZN9S487C3_nt3v48Ev();
extern void _ZN9S487C3_nt3v49Ev();
extern void _ZN9S487C3_nt3v50Ev();
extern void _ZN9S487C3_nt3v51Ev();
extern void _ZN9S487C3_nt3v52Ev();
extern void _ZN9S487C3_nt3v53Ev();
extern void _ZN9S487C2_nt3v54Ev();
extern void _ZN9S487C2_nt3v55Ev();
extern void _ZN9S487C2_nt3v56Ev();
extern void _ZN9S487C2_nt3v57Ev();
extern void _ZN9S487C2_nt3v58Ev();
extern void _ZN9S487C2_nt3v59Ev();
extern void _ZN9S487C2_nt3v60Ev();
extern void _ZN9S487C2_nt3v61Ev();
extern void _ZN9S487C2_nt3v62Ev();
extern void _ZN9S487C2_nt3v63Ev();
extern void _ZN9S487C2_nt3v64Ev();
extern void _ZN9S487C2_nt3v65Ev();
extern void _ZN9S487C2_nt3v66Ev();
extern void _ZN6S487C12v1Ev();
extern void _ZN6S487C12v2Ev();
extern void _ZN6S487C12v3Ev();
extern void _ZN6S487C12v4Ev();
extern void _ZN6S487C12v5Ev();
extern void _ZN6S487C12v6Ev();
extern void _ZN6S487C12v7Ev();
extern void _ZN6S487C12v8Ev();
extern void _ZN6S487C12v9Ev();
extern void _ZN6S487C13v10Ev();
extern void _ZN6S487C13v11Ev();
extern void _ZN6S487C13v12Ev();
static  VTBL_ENTRY vtc_S487C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S487C1[0]),
  (VTBL_ENTRY)&_ZN6S487C1D1Ev,
  (VTBL_ENTRY)&_ZN6S487C1D0Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S487C5_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S487C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S487C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S487C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN6S487C12v1Ev,
  (VTBL_ENTRY)&_ZN6S487C12v2Ev,
  (VTBL_ENTRY)&_ZN6S487C12v3Ev,
  (VTBL_ENTRY)&_ZN6S487C12v4Ev,
  (VTBL_ENTRY)&_ZN6S487C12v5Ev,
  (VTBL_ENTRY)&_ZN6S487C12v6Ev,
  (VTBL_ENTRY)&_ZN6S487C12v7Ev,
  (VTBL_ENTRY)&_ZN6S487C12v8Ev,
  (VTBL_ENTRY)&_ZN6S487C12v9Ev,
  (VTBL_ENTRY)&_ZN6S487C13v10Ev,
  (VTBL_ENTRY)&_ZN6S487C13v11Ev,
  (VTBL_ENTRY)&_ZN6S487C13v12Ev,
};
extern VTBL_ENTRY _ZTI6S487C1[];
extern  VTBL_ENTRY _ZTV6S487C1[];
Class_Descriptor cd_S487C1 = {  "S487C1", // class name
  bases_S487C1, 4,
  &(vtc_S487C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(4576,3228), // object size
  NSPAIRA(_ZTI6S487C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S487C1),70, //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  S19558C6  {
  void *s19558c6f0;
  int s19558c6f1;
  long double s19558c6f2;
  int s19558c6f3[2];
  char s19558c6f4;
  virtual void  v2(); // _ZN8S19558C62v2Ev
  virtual void  v3(); // _ZN8S19558C62v3Ev
  ~S19558C6(); // tgen
  S19558C6(); // tgen
};
//SIG(-1 S19558C6) C1{ v1 v2 Fp Fi FD Fi[2] Fc}


void  S19558C6 ::v2(){vfunc_called(this, "_ZN8S19558C62v2Ev");}
void  S19558C6 ::v3(){vfunc_called(this, "_ZN8S19558C62v3Ev");}
S19558C6 ::~S19558C6(){ note_dtor("S19558C6", this);} // tgen
S19558C6 ::S19558C6(){ note_ctor("S19558C6", this);} // tgen

static void Test_S19558C6()
{
  extern Class_Descriptor cd_S19558C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S19558C6, buf);
    S19558C6 *dp, &lv = *(dp=new (buf) S19558C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19558C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C6)");
    check_field_offset(lv, s19558c6f0, ABISELECT(8,4), "S19558C6.s19558c6f0");
    check_field_offset(lv, s19558c6f1, ABISELECT(16,8), "S19558C6.s19558c6f1");
    check_field_offset(lv, s19558c6f2, ABISELECT(32,12), "S19558C6.s19558c6f2");
    check_field_offset(lv, s19558c6f3, ABISELECT(48,24), "S19558C6.s19558c6f3");
    check_field_offset(lv, s19558c6f4, ABISELECT(56,32), "S19558C6.s19558c6f4");
    test_class_info(&lv, &cd_S19558C6);
    dp->~S19558C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C6(Test_S19558C6, "S19558C6", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19558C6C1Ev();
extern void _ZN8S19558C6D1Ev();
Name_Map name_map_S19558C6[] = {
  NSPAIR(_ZN8S19558C6C1Ev),
  NSPAIR(_ZN8S19558C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19558C6[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY vtc_S19558C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C6[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
Class_Descriptor cd_S19558C6 = {  "S19558C6", // class name
  0,0,//no base classes
  &(vtc_S19558C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19558C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19558C6),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  S19558C5  : S19558C6 {
  void *s19558c5f0;
  __tsi64 s19558c5f1;
  int s19558c5f2;
  char s19558c5f3:8;
  char s19558c5f4;
  void *s19558c5f5;
  short s19558c5f6;
  long double s19558c5f7;
  virtual  ~S19558C5(); // _ZN8S19558C5D1Ev
  S19558C5(); // tgen
};
//SIG(-1 S19558C5) C1{ BC2{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD}


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

static void Test_S19558C5()
{
  extern Class_Descriptor cd_S19558C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S19558C5, buf);
    S19558C5 *dp, &lv = *(dp=new (buf) S19558C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S19558C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C5)");
    check_base_class_offset(lv, (S19558C6*), 0, "S19558C5");
    check_field_offset(lv, s19558c5f0, ABISELECT(64,36), "S19558C5.s19558c5f0");
    check_field_offset(lv, s19558c5f1, ABISELECT(72,40), "S19558C5.s19558c5f1");
    check_field_offset(lv, s19558c5f2, ABISELECT(80,48), "S19558C5.s19558c5f2");
    set_bf_and_test(lv, s19558c5f3, ABISELECT(84,52), 0, 8, 1, "S19558C5");
    set_bf_and_test(lv, s19558c5f3, ABISELECT(84,52), 0, 8, hide_sll(1LL<<7), "S19558C5");
    check_field_offset(lv, s19558c5f4, ABISELECT(85,53), "S19558C5.s19558c5f4");
    check_field_offset(lv, s19558c5f5, ABISELECT(88,56), "S19558C5.s19558c5f5");
    check_field_offset(lv, s19558c5f6, ABISELECT(96,60), "S19558C5.s19558c5f6");
    check_field_offset(lv, s19558c5f7, ABISELECT(112,64), "S19558C5.s19558c5f7");
    test_class_info(&lv, &cd_S19558C5);
    dp->~S19558C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C5(Test_S19558C5, "S19558C5", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN8S19558C5C1Ev();
extern void _ZN8S19558C5D1Ev();
Name_Map name_map_S19558C5[] = {
  NSPAIR(_ZN8S19558C5C1Ev),
  NSPAIR(_ZN8S19558C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
static Base_Class bases_S19558C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19558C5[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C5D1Ev();
extern void _ZN8S19558C5D0Ev();
static  VTBL_ENTRY vtc_S19558C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C5[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
Class_Descriptor cd_S19558C5 = {  "S19558C5", // class name
  bases_S19558C5, 1,
  &(vtc_S19558C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI8S19558C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19558C5),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  S19558C4  : virtual S19558C5 {
  int s19558c4f0;
  ~S19558C4(); // tgen
  S19558C4(); // tgen
};
//SIG(-1 S19558C4) C1{ VBC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi}


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

static void Test_S19558C4()
{
  extern Class_Descriptor cd_S19558C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,22)];
    init_test(&cd_S19558C4, buf);
    S19558C4 *dp, &lv = *(dp=new (buf) S19558C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S19558C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C4)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(16,8), "S19558C4");
    check_base_class_offset(lv, (S19558C5*), ABISELECT(16,8), "S19558C4");
    check_field_offset(lv, s19558c4f0, ABISELECT(8,4), "S19558C4.s19558c4f0");
    test_class_info(&lv, &cd_S19558C4);
    dp->~S19558C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C4(Test_S19558C4, "S19558C4", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN8S19558C4C1Ev();
extern void _ZN8S19558C4D1Ev();
Name_Map name_map_S19558C4[] = {
  NSPAIR(_ZN8S19558C4C1Ev),
  NSPAIR(_ZN8S19558C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
static Base_Class bases_S19558C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19558C4[];
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
  ABISELECT(-16,-8),
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19558C4[];
static  VTT_ENTRY vtt_S19558C4[] = {
  {&(_ZTV8S19558C4[3]),  3,14},
  {&(_ZTV8S19558C4[10]),  10,14},
};
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C4 = {  "S19558C4", // class name
  bases_S19558C4, 2,
  &(vtc_S19558C4[0]), // expected_vtbl_contents
  &(vtt_S19558C4[0]), // expected_vtt_contents
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI8S19558C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19558C4),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19558C4),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C9  : virtual S19558C5 , S19558C6 {
  int s19558c9f0;
  ::S19558C5 s19558c9f1;
  int s19558c9f2;
  virtual  ~S19558C9(); // _ZN8S19558C9D2Ev
  S19558C9(); // tgen
};
//SIG(-1 S19558C9) C1{ VBC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC3 vd Fi FC2 Fi}


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

static void Test_S19558C9()
{
  extern Class_Descriptor cd_S19558C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S19558C9, buf);
    S19558C9 *dp, &lv = *(dp=new (buf) S19558C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S19558C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C9)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(208,120), "S19558C9");
    check_base_class_offset(lv, (S19558C5*), ABISELECT(208,120), "S19558C9");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*), 0, "S19558C9");
    check_field_offset(lv, s19558c9f0, ABISELECT(60,36), "S19558C9.s19558c9f0");
    check_field_offset(lv, s19558c9f1, ABISELECT(64,40), "S19558C9.s19558c9f1");
    check_field_offset(lv, s19558c9f2, ABISELECT(192,116), "S19558C9.s19558c9f2");
    test_class_info(&lv, &cd_S19558C9);
    dp->~S19558C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C9(Test_S19558C9, "S19558C9", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S19558C9C1Ev();
extern void _ZN8S19558C9D2Ev();
Name_Map name_map_S19558C9[] = {
  NSPAIR(_ZN8S19558C9C1Ev),
  NSPAIR(_ZN8S19558C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
static Base_Class bases_S19558C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(208,120), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S19558C9[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn208_N8S19558C9D1Ev,_ZThn120_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn208_N8S19558C9D0Ev,_ZThn120_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C9[] = {
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
  ABISELECT(-208,-120),
  0,
  0,
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19558C9[];
static  VTT_ENTRY vtt_S19558C9[] = {
  {&(_ZTV8S19558C9[3]),  3,16},
  {&(_ZTV8S19558C9[12]),  12,16},
};
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19558C9D0Ev,_ZThn120_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19558C9D1Ev,_ZThn120_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C9 = {  "S19558C9", // class name
  bases_S19558C9, 3,
  &(vtc_S19558C9[0]), // expected_vtbl_contents
  &(vtt_S19558C9[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S19558C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19558C9),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19558C9),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C10  : S19558C9 {
  int s19558c10f0;
  void *s19558c10f1;
  int s19558c10f2[2];
  virtual  ~S19558C10(); // _ZN9S19558C10D2Ev
  S19558C10(); // tgen
};
//SIG(-1 S19558C10) C1{ BC2{ VBC3{ BC4{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC4 vd Fi FC3 Fi} vd Fi Fp Fi[2]}


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

static void Test_S19558C10()
{
  extern Class_Descriptor cd_S19558C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,54)];
    init_test(&cd_S19558C10, buf);
    S19558C10 *dp, &lv = *(dp=new (buf) S19558C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,212), "sizeof(S19558C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C10)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(224,136), "S19558C10");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(224,136), "S19558C10");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), 0, "S19558C10");
    check_base_class_offset(lv, (S19558C9*), 0, "S19558C10");
    check_field_offset(lv, s19558c10f0, ABISELECT(196,120), "S19558C10.s19558c10f0");
    check_field_offset(lv, s19558c10f1, ABISELECT(200,124), "S19558C10.s19558c10f1");
    check_field_offset(lv, s19558c10f2, ABISELECT(208,128), "S19558C10.s19558c10f2");
    test_class_info(&lv, &cd_S19558C10);
    dp->~S19558C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C10(Test_S19558C10, "S19558C10", ABISELECT(352,212));

#else // __cplusplus

extern void _ZN9S19558C10C1Ev();
extern void _ZN9S19558C10D2Ev();
Name_Map name_map_S19558C10[] = {
  NSPAIR(_ZN9S19558C10C1Ev),
  NSPAIR(_ZN9S19558C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
static Base_Class bases_S19558C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(224,136), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C10[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn136_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn136_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C10[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
  ABISELECT(-224,-136),
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19558C10[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C10[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn136_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn136_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C10[] = {
  ABISELECT(-224,-136),
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C10[] = {
  {&(_ZTV9S19558C10[3]),  3,16},
  {&(_tg__ZTV8S19558C9__9S19558C10[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C10[5]),  5,9},
  {&(_ZTV9S19558C10[12]),  12,16},
};
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn136_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn136_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn136_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn136_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C10 = {  "S19558C10", // class name
  bases_S19558C10, 4,
  &(vtc_S19558C10[0]), // expected_vtbl_contents
  &(vtt_S19558C10[0]), // expected_vtt_contents
  ABISELECT(352,212), // object size
  NSPAIRA(_ZTI9S19558C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19558C10),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C10),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S19558C11  {
  int s19558c11f0[2];
  __tsi64 s19558c11f1;
  void  mf19558c11(); // _ZN9S19558C1110mf19558c11Ev
};
//SIG(1 S19558C11) U1{ m Fi[2] FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19558C8  : virtual S19558C5 , virtual S19558C9 , S19558C10 , virtual S19558C6 {
  ::S19558C11 s19558c8f0;
  virtual  ~S19558C8(); // _ZN8S19558C8D2Ev
  virtual void  v4(); // _ZN8S19558C82v4Ev
  S19558C8(); // tgen
};
//SIG(-1 S19558C8) C1{ VBC2{ BC3{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC4{ VBC2 BC3 vd Fi FC2 Fi} BC5{ BC4 vd Fi Fp Fi[2]} VBC3 vd v1 FU6{ m Fi[2] FL}}


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

static void Test_S19558C8()
{
  extern Class_Descriptor cd_S19558C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,95)];
    init_test(&cd_S19558C8, buf);
    S19558C8 *dp, &lv = *(dp=new (buf) S19558C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,376), "sizeof(S19558C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C8)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(224,144), "S19558C8");
    check_base_class_offset(lv, (S19558C5*), ABISELECT(224,144), "S19558C8");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(224,144), "S19558C8");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*), ABISELECT(224,144), "S19558C8");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(352,220), "S19558C8");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*), ABISELECT(352,220), "S19558C8");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*), 0, "S19558C8");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*), 0, "S19558C8");
    check_base_class_offset(lv, (S19558C10*), 0, "S19558C8");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*), ABISELECT(560,340), "S19558C8");
    check_field_offset(lv, s19558c8f0, ABISELECT(216,136), "S19558C8.s19558c8f0");
    test_class_info(&lv, &cd_S19558C8);
    dp->~S19558C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C8(Test_S19558C8, "S19558C8", ABISELECT(624,376));

#else // __cplusplus

extern void _ZN8S19558C8C1Ev();
extern void _ZN8S19558C8D2Ev();
Name_Map name_map_S19558C8[] = {
  NSPAIR(_ZN8S19558C8C1Ev),
  NSPAIR(_ZN8S19558C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
static Base_Class bases_S19558C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(224,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19558C9,    ABISELECT(352,220), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19558C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(560,340), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19558C8[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C8D1Ev,_ZThn144_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C8D0Ev,_ZThn144_N8S19558C8D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn352_N8S19558C8D1Ev,_ZThn220_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn352_N8S19558C8D0Ev,_ZThn220_N8S19558C8D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY vtc_S19558C8[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S19558C8[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C10__8S19558C8[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C10__A1__8S19558C8[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C10__A1__8S19558C8[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C10__8S19558C8[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__8S19558C8[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C8[] = {
  {&(_ZTV8S19558C8[5]),  5,35},
  {&(_tg__ZTV9S19558C10__8S19558C8[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C10__A1__8S19558C8[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C10__A1__8S19558C8[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C10__8S19558C8[5]),  5,9},
  {&(_ZTV8S19558C8[15]),  15,35},
  {&(_ZTV8S19558C8[25]),  25,35},
  {&(_ZTV8S19558C8[33]),  33,35},
  {&(_tg__ZTV8S19558C9__8S19558C8[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__8S19558C8[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C8D0Ev,_ZThn220_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C8D1Ev,_ZThn220_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C8D0Ev,_ZThn144_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C8D1Ev,_ZThn144_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C8 = {  "S19558C8", // class name
  bases_S19558C8, 8,
  &(vtc_S19558C8[0]), // expected_vtbl_contents
  &(vtt_S19558C8[0]), // expected_vtt_contents
  ABISELECT(624,376), // object size
  NSPAIRA(_ZTI8S19558C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19558C8),35, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19558C8),10, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C7  : S19558C8 {
  long double s19558c7f0[3];
  int s19558c7f1;
  char s19558c7f2;
  ::S19558C9 s19558c7f3;
  int s19558c7f4:9;
  char s19558c7f5[5];
  int s19558c7f6;
  void *s19558c7f7[9];
  virtual  ~S19558C7(); // _ZN8S19558C7D2Ev
  virtual void  v5(); // _ZN8S19558C72v5Ev
  S19558C7(); // tgen
};
//SIG(-1 S19558C7) C1{ BC2{ VBC3{ BC4{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC4 vd v4 FU7{ m Fi[2] FL}} vd v1 FD[3] Fi Fc FC5 Fi:9 Fc[5] Fi Fp[9]}


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

static void Test_S19558C7()
{
  extern Class_Descriptor cd_S19558C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(71,167)];
    init_test(&cd_S19558C7, buf);
    S19558C7 *dp, &lv = *(dp=new (buf) S19558C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,664), "sizeof(S19558C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C7)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(720,432), "S19558C7");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(720,432), "S19558C7");
    /*is_ambiguous_... S19558C7::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(720,432), "S19558C7");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(720,432), "S19558C7");
    /*is_ambiguous_... S19558C7::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(848,508), "S19558C7");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(848,508), "S19558C7");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), 0, "S19558C7");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), 0, "S19558C7");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*), 0, "S19558C7");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(1056,628), "S19558C7");
    check_base_class_offset(lv, (S19558C8*), 0, "S19558C7");
    check_field_offset(lv, s19558c7f0, ABISELECT(224,144), "S19558C7.s19558c7f0");
    check_field_offset(lv, s19558c7f1, ABISELECT(272,180), "S19558C7.s19558c7f1");
    check_field_offset(lv, s19558c7f2, ABISELECT(276,184), "S19558C7.s19558c7f2");
    check_field_offset(lv, s19558c7f3, ABISELECT(288,188), "S19558C7.s19558c7f3");
    set_bf_and_test(lv, s19558c7f4, ABISELECT(624,384), 0, 9, 1, "S19558C7");
    set_bf_and_test(lv, s19558c7f4, ABISELECT(624,384), 0, 9, hide_sll(1LL<<8), "S19558C7");
    check_field_offset(lv, s19558c7f5, ABISELECT(626,386), "S19558C7.s19558c7f5");
    check_field_offset(lv, s19558c7f6, ABISELECT(632,392), "S19558C7.s19558c7f6");
    check_field_offset(lv, s19558c7f7, ABISELECT(640,396), "S19558C7.s19558c7f7");
    test_class_info(&lv, &cd_S19558C7);
    dp->~S19558C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C7(Test_S19558C7, "S19558C7", ABISELECT(1120,664));

#else // __cplusplus

extern void _ZN8S19558C7C1Ev();
extern void _ZN8S19558C7D2Ev();
Name_Map name_map_S19558C7[] = {
  NSPAIR(_ZN8S19558C7C1Ev),
  NSPAIR(_ZN8S19558C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
static Base_Class bases_S19558C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(720,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(720,432), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(848,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(848,508), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19558C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1056,628), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19558C7[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn848_N8S19558C7D1Ev,_ZThn508_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn848_N8S19558C7D0Ev,_ZThn508_N8S19558C7D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY vtc_S19558C7[] = {
  ABISELECT(1056,628),
  ABISELECT(848,508),
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
  ABISELECT(-848,-508),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-848,-508),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
  0,
  0,
  ABISELECT(-1056,-628),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S19558C7[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__8S19558C7[] = {
  ABISELECT(1056,628),
  ABISELECT(848,508),
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__8S19558C7[] = {
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A1__8S19558C7[] = {
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C9D1Ev,_ZThn432_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C9D0Ev,_ZThn432_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__8S19558C7[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn720_N9S19558C10D1Ev,_ZThn432_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn720_N9S19558C10D0Ev,_ZThn432_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__8S19558C7[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__8S19558C7[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn848_N8S19558C8D1Ev,_ZThn508_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn848_N8S19558C8D0Ev,_ZThn508_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__8S19558C7[] = {
  ABISELECT(-848,-508),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-848,-508),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__8S19558C7[] = {
  0,
  0,
  ABISELECT(-1056,-628),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__8S19558C7[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C7[] = {
  {&(_ZTV8S19558C7[5]),  5,36},
  {&(_tg__ZTV8S19558C8__8S19558C7[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__8S19558C7[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A1__8S19558C7[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__8S19558C7[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__8S19558C7[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__8S19558C7[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__8S19558C7[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__8S19558C7[4]),  4,6},
  {&(_ZTV8S19558C7[16]),  16,36},
  {&(_ZTV8S19558C7[26]),  26,36},
  {&(_ZTV8S19558C7[34]),  34,36},
  {&(_tg__ZTV8S19558C9__8S19558C7[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__8S19558C7[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19558C8D0Ev,_ZThn508_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19558C8D1Ev,_ZThn508_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19558C10D0Ev,_ZThn432_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N9S19558C10D1Ev,_ZThn432_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C9D0Ev,_ZThn432_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C9D1Ev,_ZThn432_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19558C7D0Ev,_ZThn508_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19558C7D1Ev,_ZThn508_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C7 = {  "S19558C7", // class name
  bases_S19558C7, 9,
  &(vtc_S19558C7[0]), // expected_vtbl_contents
  &(vtt_S19558C7[0]), // expected_vtt_contents
  ABISELECT(1120,664), // object size
  NSPAIRA(_ZTI8S19558C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19558C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19558C7),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C3  : virtual S19558C4 , S19558C6 , virtual S19558C7 , S19558C8 , S19558C5 {
  char  :0;
  char s19558c3f1;
  int s19558c3f2:10;
  char s19558c3f3;
  int s19558c3f4;
  virtual  ~S19558C3(); // _ZN8S19558C3D2Ev
  virtual void  v6(); // _ZN8S19558C32v6Ev
  virtual void  v7(); // _ZN8S19558C32v7Ev
  S19558C3(); // tgen
};
//SIG(-1 S19558C3) C1{ VBC2{ VBC3{ BC4{ v3 v4 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC4 VBC5{ BC6{ VBC3 VBC7{ VBC3 BC4 vd Fi FC3 Fi} BC8{ BC7 vd Fi Fp Fi[2]} VBC4 vd v5 FU9{ m Fi[2] FL}} vd v6 FD[3] Fi Fc FC7 Fi:9 Fc[5] Fi Fp[9]} BC6 BC3 vd v1 v2 Fc:0 Fc Fi:10 Fc Fi}


 S19558C3 ::~S19558C3(){ note_dtor("S19558C3", this);}
void  S19558C3 ::v6(){vfunc_called(this, "_ZN8S19558C32v6Ev");}
void  S19558C3 ::v7(){vfunc_called(this, "_ZN8S19558C32v7Ev");}
S19558C3 ::S19558C3(){ note_ctor("S19558C3", this);} // tgen

static void Test_S19558C3()
{
  extern Class_Descriptor cd_S19558C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,235)];
    init_test(&cd_S19558C3, buf);
    S19558C3 *dp, &lv = *(dp=new (buf) S19558C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,936), "sizeof(S19558C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C3)");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(448,272), "S19558C3");
    check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(448,272), "S19558C3");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*), ABISELECT(448,272), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(448,272), "S19558C3");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(448,272), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(448,272), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(448,272), "S19558C3");
    check_base_class_offset(lv, (S19558C4*), ABISELECT(424,264), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*), 0, "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(1296,780), "S19558C3");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*), ABISELECT(1296,780), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(1296,780), "S19558C3");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(576,348), "S19558C3");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(576,348), "S19558C3");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(576,348), "S19558C3");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*), ABISELECT(1504,900), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(1504,900), "S19558C3");
    check_base_class_offset(lv, (S19558C8*)(S19558C7*), ABISELECT(576,348), "S19558C3");
    check_base_class_offset(lv, (S19558C7*), ABISELECT(576,348), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(64,36), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(64,36), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*), ABISELECT(64,36), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C8*), ABISELECT(64,36), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(288,180), "S19558C3");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*), ABISELECT(288,180), "S19558C3");
    check_field_offset(lv, s19558c3f1, ABISELECT(416,256), "S19558C3.s19558c3f1");
    set_bf_and_test(lv, s19558c3f2, ABISELECT(417,257), 0, 10, 1, "S19558C3");
    set_bf_and_test(lv, s19558c3f2, ABISELECT(417,257), 0, 10, hide_sll(1LL<<9), "S19558C3");
    check_field_offset(lv, s19558c3f3, ABISELECT(419,259), "S19558C3.s19558c3f3");
    check_field_offset(lv, s19558c3f4, ABISELECT(420,260), "S19558C3.s19558c3f4");
    test_class_info(&lv, &cd_S19558C3);
    dp->~S19558C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C3(Test_S19558C3, "S19558C3", ABISELECT(1568,936));

#else // __cplusplus

extern void _ZN8S19558C3C1Ev();
extern void _ZN8S19558C3D2Ev();
Name_Map name_map_S19558C3[] = {
  NSPAIR(_ZN8S19558C3C1Ev),
  NSPAIR(_ZN8S19558C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
static Base_Class bases_S19558C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(448,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(448,272), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19558C4,    ABISELECT(424,264), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(1296,780), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(1296,780), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1504,900), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C8,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(576,348), //bcp->offset
    44, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(64,36), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(288,180), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19558C3[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C3D1Ev();
extern void _ZN8S19558C3D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn288_N8S19558C3D1Ev,_ZThn180_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn288_N8S19558C3D0Ev,_ZThn180_N8S19558C3D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn424_N8S19558C3D1Ev,_ZThn264_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn424_N8S19558C3D0Ev,_ZThn264_N8S19558C3D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn448_N8S19558C3D1Ev,_ZThn272_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn448_N8S19558C3D0Ev,_ZThn272_N8S19558C3D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn576_N8S19558C3D1Ev,_ZThn348_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn576_N8S19558C3D0Ev,_ZThn348_N8S19558C3D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn1296_N8S19558C3D1Ev,_ZThn780_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn1296_N8S19558C3D0Ev,_ZThn780_N8S19558C3D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY vtc_S19558C3[] = {
  ABISELECT(1504,900),
  ABISELECT(1296,780),
  ABISELECT(576,348),
  ABISELECT(448,272),
  ABISELECT(424,264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  ABISELECT(1440,864),
  ABISELECT(1232,744),
  ABISELECT(384,236),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S19558C3D1Ev,_ZThn180_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S19558C3D0Ev,_ZThn180_N8S19558C3D0Ev),
  ABISELECT(-424,-264),
  ABISELECT(24,8),
  ABISELECT(-424,-264),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev),
  ABISELECT(-448,-272),
  0,
  0,
  ABISELECT(-448,-272),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev),
  0,
  0,
  ABISELECT(-576,-348),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-1296,-780),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1296,-780),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev),
  0,
  0,
  ABISELECT(-1504,-900),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S19558C3[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__8S19558C3[] = {
  ABISELECT(1440,864),
  ABISELECT(1232,744),
  ABISELECT(384,236),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__A1__8S19558C3[] = {
  ABISELECT(384,236),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A2__8S19558C3[] = {
  ABISELECT(384,236),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn384_N8S19558C9D1Ev,_ZThn236_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn384_N8S19558C9D0Ev,_ZThn236_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A2__8S19558C3[] = {
  ABISELECT(-384,-236),
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn384_N9S19558C10D1Ev,_ZThn236_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn384_N9S19558C10D0Ev,_ZThn236_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__A1__8S19558C3[] = {
  ABISELECT(-384,-236),
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S19558C8D1Ev,_ZThn236_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn384_N8S19558C8D0Ev,_ZThn236_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__A1__8S19558C3[] = {
  ABISELECT(-384,-236),
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn1232_N8S19558C8D1Ev,_ZThn744_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn1232_N8S19558C8D0Ev,_ZThn744_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__A1__8S19558C3[] = {
  ABISELECT(-1232,-744),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1232,-744),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__A1__8S19558C3[] = {
  0,
  0,
  ABISELECT(-1440,-864),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C3[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__8S19558C3[] = {
  ABISELECT(-24,-8),
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C3[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C7__8S19558C3[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C7__8S19558C3[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C3[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__8S19558C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C7__8S19558C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C7__8S19558C3[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C7__8S19558C3[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C7__8S19558C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7__8S19558C3[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C7__8S19558C3[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C3[] = {
  ABISELECT(-848,-508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__8S19558C3[] = {
  ABISELECT(848,508),
  0,
  0,
  ABISELECT(848,508),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C3[] = {
  {&(_ZTV8S19558C3[7]),  7,76},
  {&(_tg__ZTV8S19558C8__A1__8S19558C3[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__A1__8S19558C3[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A2__8S19558C3[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A2__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__A1__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__A1__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__A1__8S19558C3[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__A1__8S19558C3[4]),  4,6},
  {&(_ZTV8S19558C3[33]),  33,76},
  {&(_ZTV8S19558C3[40]),  40,76},
  {&(_ZTV8S19558C3[54]),  54,76},
  {&(_ZTV8S19558C3[66]),  66,76},
  {&(_ZTV8S19558C3[74]),  74,76},
  {&(_ZTV8S19558C3[18]),  18,76},
  {&(_tg__ZTV8S19558C4__8S19558C3[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C3[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C7__8S19558C3[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C7__8S19558C3[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C3[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C7__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C7__8S19558C3[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C7__8S19558C3[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C7__8S19558C3[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C7__8S19558C3[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C7__8S19558C3[4]),  4,6},
  {&(_tg__ZTV8S19558C9__8S19558C3[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__8S19558C3[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19558C3[];
extern  VTBL_ENTRY _ZTV8S19558C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C3[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N8S19558C8D0Ev,_ZThn744_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N8S19558C8D1Ev,_ZThn744_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19558C8D0Ev,_ZThn236_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19558C8D1Ev,_ZThn236_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19558C10D0Ev,_ZThn236_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19558C10D1Ev,_ZThn236_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19558C9D0Ev,_ZThn236_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19558C9D1Ev,_ZThn236_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S19558C3D0Ev,_ZThn780_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S19558C3D1Ev,_ZThn780_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19558C3D0Ev,_ZThn348_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19558C3D1Ev,_ZThn348_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19558C3D0Ev,_ZThn272_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S19558C3D1Ev,_ZThn272_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S19558C3D0Ev,_ZThn264_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N8S19558C3D1Ev,_ZThn264_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C3 = {  "S19558C3", // class name
  bases_S19558C3, 18,
  &(vtc_S19558C3[0]), // expected_vtbl_contents
  &(vtt_S19558C3[0]), // expected_vtt_contents
  ABISELECT(1568,936), // object size
  NSPAIRA(_ZTI8S19558C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19558C3),76, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19558C3),31, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C13  : virtual S19558C8 , S19558C9 {
  char s19558c13f0;
  ::S19558C9 s19558c13f1;
  char s19558c13f2;
  virtual  ~S19558C13(); // _ZN9S19558C13D2Ev
  virtual void  v8(); // _ZN9S19558C132v8Ev
  virtual void  v9(); // _ZN9S19558C132v9Ev
  S19558C13(); // tgen
};
//SIG(-1 S19558C13) C1{ VBC2{ VBC3{ BC4{ v3 v4 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC4 vd v5 FU7{ m Fi[2] FL}} BC5 vd v1 v2 Fc FC5 Fc}


 S19558C13 ::~S19558C13(){ note_dtor("S19558C13", this);}
void  S19558C13 ::v8(){vfunc_called(this, "_ZN9S19558C132v8Ev");}
void  S19558C13 ::v9(){vfunc_called(this, "_ZN9S19558C132v9Ev");}
S19558C13 ::S19558C13(){ note_ctor("S19558C13", this);} // tgen

static void Test_S19558C13()
{
  extern Class_Descriptor cd_S19558C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,176)];
    init_test(&cd_S19558C13, buf);
    S19558C13 *dp, &lv = *(dp=new (buf) S19558C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,700), "sizeof(S19558C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C13)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(784,468), "S19558C13");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(784,468), "S19558C13");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(784,468), "S19558C13");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(784,468), "S19558C13");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(784,468), "S19558C13");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(912,544), "S19558C13");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(912,544), "S19558C13");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(560,324), "S19558C13");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(560,324), "S19558C13");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*), ABISELECT(560,324), "S19558C13");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(1120,664), "S19558C13");
    check_base_class_offset(lv, (S19558C8*), ABISELECT(560,324), "S19558C13");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), 0, "S19558C13");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*), 0, "S19558C13");
    check_field_offset(lv, s19558c13f0, ABISELECT(196,120), "S19558C13.s19558c13f0");
    check_field_offset(lv, s19558c13f1, ABISELECT(208,124), "S19558C13.s19558c13f1");
    check_field_offset(lv, s19558c13f2, ABISELECT(544,320), "S19558C13.s19558c13f2");
    test_class_info(&lv, &cd_S19558C13);
    dp->~S19558C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C13(Test_S19558C13, "S19558C13", ABISELECT(1184,700));

#else // __cplusplus

extern void _ZN9S19558C13C1Ev();
extern void _ZN9S19558C13D2Ev();
Name_Map name_map_S19558C13[] = {
  NSPAIR(_ZN9S19558C13C1Ev),
  NSPAIR(_ZN9S19558C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
static Base_Class bases_S19558C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(784,468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(784,468), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(912,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(912,544), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(560,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
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1120,664), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C8,    ABISELECT(560,324), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C13[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn560_N9S19558C13D1Ev,_ZThn324_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn560_N9S19558C13D0Ev,_ZThn324_N9S19558C13D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn784_N9S19558C13D1Ev,_ZThn468_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn784_N9S19558C13D0Ev,_ZThn468_N9S19558C13D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn912_N9S19558C13D1Ev,_ZThn544_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn912_N9S19558C13D0Ev,_ZThn544_N9S19558C13D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY vtc_S19558C13[] = {
  ABISELECT(1120,664),
  ABISELECT(912,544),
  ABISELECT(560,324),
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  0,
  ABISELECT(-560,-324),
  0,
  0,
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
  ABISELECT(-912,-544),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-912,-544),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
  0,
  0,
  ABISELECT(-1120,-664),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern VTBL_ENTRY _ZTV9S19558C13[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C13[] = {
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn784_N8S19558C9D1Ev,_ZThn468_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn784_N8S19558C9D0Ev,_ZThn468_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__A__9S19558C13[] = {
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C13[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__9S19558C13[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A1__9S19558C13[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__9S19558C13[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__9S19558C13[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C8D1Ev,_ZThn144_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C8D0Ev,_ZThn144_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__9S19558C13[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn352_N8S19558C8D1Ev,_ZThn220_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn352_N8S19558C8D0Ev,_ZThn220_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__9S19558C13[] = {
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__9S19558C13[] = {
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C13[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C13[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C13[] = {
  {&(_ZTV9S19558C13[6]),  6,51},
  {&(_tg__ZTV8S19558C9__A__9S19558C13[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__A__9S19558C13[5]),  5,9},
  {&(_ZTV9S19558C13[21]),  21,51},
  {&(_ZTV9S19558C13[31]),  31,51},
  {&(_ZTV9S19558C13[41]),  41,51},
  {&(_ZTV9S19558C13[49]),  49,51},
  {&(_tg__ZTV8S19558C8__9S19558C13[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__9S19558C13[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A1__9S19558C13[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__9S19558C13[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__9S19558C13[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__9S19558C13[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__9S19558C13[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__9S19558C13[4]),  4,6},
  {&(_tg__ZTV8S19558C9__9S19558C13[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C13[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C8D0Ev,_ZThn220_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C8D1Ev,_ZThn220_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C8D0Ev,_ZThn144_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C8D1Ev,_ZThn144_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19558C9D0Ev,_ZThn468_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19558C9D1Ev,_ZThn468_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19558C13D0Ev,_ZThn544_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19558C13D1Ev,_ZThn544_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C13D0Ev,_ZThn468_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C13D1Ev,_ZThn468_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N9S19558C13D0Ev,_ZThn324_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N9S19558C13D1Ev,_ZThn324_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C13 = {  "S19558C13", // class name
  bases_S19558C13, 11,
  &(vtc_S19558C13[0]), // expected_vtbl_contents
  &(vtt_S19558C13[0]), // expected_vtt_contents
  ABISELECT(1184,700), // object size
  NSPAIRA(_ZTI9S19558C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19558C13),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C13),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C15  : virtual S19558C6 , S19558C8 , S19558C5 , virtual S19558C4 , S19558C9 {
  int s19558c15f0;
  int s19558c15f1;
  int s19558c15f2;
  virtual  ~S19558C15(); // _ZN9S19558C15D2Ev
  virtual void  v10(); // _ZN9S19558C153v10Ev
  S19558C15(); // tgen
};
//SIG(-1 S19558C15) C1{ VBC2{ v2 v3 Fp Fi FD Fi[2] Fc} BC3{ VBC4{ BC2 vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC4 BC2 vd Fi FC4 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC2 vd v4 FU7{ m Fi[2] FL}} BC4 VBC8{ VBC4 Fi} BC5 vd v1 Fi Fi Fi}


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

static void Test_S19558C15()
{
  extern Class_Descriptor cd_S19558C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(62,149)];
    init_test(&cd_S19558C15, buf);
    S19558C15 *dp, &lv = *(dp=new (buf) S19558C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(976,592), "sizeof(S19558C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C15)");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*), ABISELECT(560,352), "S19558C15");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(560,352), "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(624,388), "S19558C15");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(624,388), "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(624,388), "S19558C15");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(624,388), "S19558C15");
    check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(624,388), "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(624,388), "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(752,464), "S19558C15");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(752,464), "S19558C15");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), 0, "S19558C15");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), 0, "S19558C15");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*), 0, "S19558C15");
    check_base_class_offset(lv, (S19558C8*), 0, "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(224,144), "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*), ABISELECT(224,144), "S19558C15");
    check_base_class_offset(lv, (S19558C4*), ABISELECT(952,584), "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(352,220), "S19558C15");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*), ABISELECT(352,220), "S19558C15");
    check_field_offset(lv, s19558c15f0, ABISELECT(548,340), "S19558C15.s19558c15f0");
    check_field_offset(lv, s19558c15f1, ABISELECT(552,344), "S19558C15.s19558c15f1");
    check_field_offset(lv, s19558c15f2, ABISELECT(556,348), "S19558C15.s19558c15f2");
    test_class_info(&lv, &cd_S19558C15);
    dp->~S19558C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C15(Test_S19558C15, "S19558C15", ABISELECT(976,592));

#else // __cplusplus

extern void _ZN9S19558C15C1Ev();
extern void _ZN9S19558C15D2Ev();
Name_Map name_map_S19558C15[] = {
  NSPAIR(_ZN9S19558C15C1Ev),
  NSPAIR(_ZN9S19558C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
static Base_Class bases_S19558C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(560,352), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(624,388), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(752,464), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(752,464), //bcp->offset
    40, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19558C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C8,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(224,144), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C4,    ABISELECT(952,584), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(352,220), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C15[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N9S19558C15D1Ev,_ZThn144_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C15D0Ev,_ZThn144_N9S19558C15D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn624_N9S19558C15D1Ev,_ZThn388_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn624_N9S19558C15D0Ev,_ZThn388_N9S19558C15D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn752_N9S19558C15D1Ev,_ZThn464_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn752_N9S19558C15D0Ev,_ZThn464_N9S19558C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn952_N9S19558C15D1Ev,_ZThn584_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn952_N9S19558C15D0Ev,_ZThn584_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C15[] = {
  ABISELECT(952,584),
  ABISELECT(560,352),
  ABISELECT(752,464),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C15D1Ev,_ZThn144_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C15D0Ev,_ZThn144_N9S19558C15D0Ev),
  ABISELECT(272,168),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
  0,
  0,
  ABISELECT(-560,-352),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
  ABISELECT(-752,-464),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-752,-464),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
  ABISELECT(-952,-584),
  ABISELECT(-328,-196),
  ABISELECT(-952,-584),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19558C15[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C15[] = {
  ABISELECT(560,352),
  ABISELECT(752,464),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__9S19558C15[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A1__9S19558C15[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn624_N8S19558C9D1Ev,_ZThn388_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn624_N8S19558C9D0Ev,_ZThn388_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__9S19558C15[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn624_N9S19558C10D1Ev,_ZThn388_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn624_N9S19558C10D0Ev,_ZThn388_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__9S19558C15[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn624_N8S19558C8D1Ev,_ZThn388_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn624_N8S19558C8D0Ev,_ZThn388_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__9S19558C15[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn752_N8S19558C8D1Ev,_ZThn464_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn752_N8S19558C8D0Ev,_ZThn464_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__9S19558C15[] = {
  ABISELECT(-752,-464),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-752,-464),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__9S19558C15[] = {
  0,
  0,
  ABISELECT(-560,-352),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C15[] = {
  ABISELECT(272,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn272_N8S19558C9D1Ev,_ZThn168_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn272_N8S19558C9D0Ev,_ZThn168_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__A__9S19558C15[] = {
  ABISELECT(-272,-168),
  0,
  0,
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C15[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C15[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C15[] = {
  ABISELECT(-328,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__9S19558C15[] = {
  ABISELECT(328,196),
  0,
  0,
  ABISELECT(328,196),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
static  VTT_ENTRY vtt_S19558C15[] = {
  {&(_ZTV9S19558C15[6]),  6,56},
  {&(_tg__ZTV8S19558C8__9S19558C15[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__9S19558C15[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A1__9S19558C15[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__9S19558C15[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__9S19558C15[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__9S19558C15[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__9S19558C15[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__9S19558C15[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C15[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__A__9S19558C15[5]),  5,9},
  {&(_ZTV9S19558C15[29]),  29,56},
  {&(_ZTV9S19558C15[36]),  36,56},
  {&(_ZTV9S19558C15[46]),  46,56},
  {&(_ZTV9S19558C15[54]),  54,56},
  {&(_ZTV9S19558C15[21]),  21,56},
  {&(_tg__ZTV8S19558C9__9S19558C15[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C15[5]),  5,9},
  {&(_tg__ZTV8S19558C4__9S19558C15[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__9S19558C15[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19558C8D0Ev,_ZThn464_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S19558C8D1Ev,_ZThn464_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19558C8D0Ev,_ZThn388_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19558C8D1Ev,_ZThn388_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S19558C10D0Ev,_ZThn388_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S19558C10D1Ev,_ZThn388_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19558C9D0Ev,_ZThn168_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19558C9D0Ev,_ZThn388_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19558C9D1Ev,_ZThn168_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S19558C9D1Ev,_ZThn388_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn952_N9S19558C15D0Ev,_ZThn584_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn952_N9S19558C15D1Ev,_ZThn584_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N9S19558C15D0Ev,_ZThn464_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N9S19558C15D1Ev,_ZThn464_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S19558C15D0Ev,_ZThn388_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N9S19558C15D1Ev,_ZThn388_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C15 = {  "S19558C15", // class name
  bases_S19558C15, 14,
  &(vtc_S19558C15[0]), // expected_vtbl_contents
  &(vtt_S19558C15[0]), // expected_vtt_contents
  ABISELECT(976,592), // object size
  NSPAIRA(_ZTI9S19558C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19558C15),56, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C15),20, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C14  : S19558C15 {
  int s19558c14f0;
  long s19558c14f1;
  int s19558c14f2;
  __tsi64 s19558c14f3;
  virtual  ~S19558C14(); // _ZN9S19558C14D2Ev
  virtual void  v11(); // _ZN9S19558C143v11Ev
  S19558C14(); // tgen
};
//SIG(-1 S19558C14) C1{ BC2{ VBC3{ v2 v3 Fp Fi FD Fi[2] Fc} BC4{ VBC5{ BC3 vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC6{ VBC5 BC3 vd Fi FC5 Fi} BC7{ BC6 vd Fi Fp Fi[2]} VBC3 vd v4 FU8{ m Fi[2] FL}} BC5 VBC9{ VBC5 Fi} BC6 vd v5 Fi Fi Fi} vd v1 Fi Fl Fi FL}


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

static void Test_S19558C14()
{
  extern Class_Descriptor cd_S19558C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(64,154)];
    init_test(&cd_S19558C14, buf);
    S19558C14 *dp, &lv = *(dp=new (buf) S19558C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1008,612), "sizeof(S19558C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C14)");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*), ABISELECT(592,372), "S19558C14");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*), ABISELECT(592,372), "S19558C14");
    /*is_ambiguous_... S19558C14::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(656,408), "S19558C14");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*), ABISELECT(656,408), "S19558C14");
    /*is_ambiguous_... S19558C14::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(656,408), "S19558C14");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*), ABISELECT(656,408), "S19558C14");
    check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(656,408), "S19558C14");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*), ABISELECT(656,408), "S19558C14");
    /*is_ambiguous_... S19558C14::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(784,484), "S19558C14");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*), ABISELECT(784,484), "S19558C14");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*), 0, "S19558C14");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*), 0, "S19558C14");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*), 0, "S19558C14");
    check_base_class_offset(lv, (S19558C8*)(S19558C15*), 0, "S19558C14");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*), ABISELECT(224,144), "S19558C14");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*), ABISELECT(224,144), "S19558C14");
    check_base_class_offset(lv, (S19558C4*)(S19558C15*), ABISELECT(984,604), "S19558C14");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*), ABISELECT(352,220), "S19558C14");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*), ABISELECT(352,220), "S19558C14");
    check_base_class_offset(lv, (S19558C15*), 0, "S19558C14");
    check_field_offset(lv, s19558c14f0, ABISELECT(560,352), "S19558C14.s19558c14f0");
    check_field_offset(lv, s19558c14f1, ABISELECT(568,356), "S19558C14.s19558c14f1");
    check_field_offset(lv, s19558c14f2, ABISELECT(576,360), "S19558C14.s19558c14f2");
    check_field_offset(lv, s19558c14f3, ABISELECT(584,364), "S19558C14.s19558c14f3");
    test_class_info(&lv, &cd_S19558C14);
    dp->~S19558C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C14(Test_S19558C14, "S19558C14", ABISELECT(1008,612));

#else // __cplusplus

extern void _ZN9S19558C14C1Ev();
extern void _ZN9S19558C14D2Ev();
Name_Map name_map_S19558C14[] = {
  NSPAIR(_ZN9S19558C14C1Ev),
  NSPAIR(_ZN9S19558C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
static Base_Class bases_S19558C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(592,372), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(656,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(656,408), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(784,484), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(784,484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19558C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C8,    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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(224,144), //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19558C4,    ABISELECT(984,604), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(352,220), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19558C15,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C14[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N9S19558C14D1Ev,_ZThn144_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C14D0Ev,_ZThn144_N9S19558C14D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn656_N9S19558C14D1Ev,_ZThn408_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn656_N9S19558C14D0Ev,_ZThn408_N9S19558C14D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn784_N9S19558C14D1Ev,_ZThn484_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn784_N9S19558C14D0Ev,_ZThn484_N9S19558C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn984_N9S19558C14D1Ev,_ZThn604_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn984_N9S19558C14D0Ev,_ZThn604_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C14[] = {
  ABISELECT(984,604),
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C14D1Ev,_ZThn144_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C14D0Ev,_ZThn144_N9S19558C14D0Ev),
  ABISELECT(304,188),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
  ABISELECT(-984,-604),
  ABISELECT(-328,-196),
  ABISELECT(-984,-604),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19558C14[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C15__9S19558C14[] = {
  ABISELECT(984,604),
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C15__9S19558C14[] = {
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C15__9S19558C14[] = {
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C15__A1__9S19558C14[] = {
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn656_N8S19558C9D1Ev,_ZThn408_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn656_N8S19558C9D0Ev,_ZThn408_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C15__A1__9S19558C14[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn656_N9S19558C10D1Ev,_ZThn408_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn656_N9S19558C10D0Ev,_ZThn408_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C15__9S19558C14[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn656_N8S19558C8D1Ev,_ZThn408_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn656_N8S19558C8D0Ev,_ZThn408_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C15__9S19558C14[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn784_N8S19558C8D1Ev,_ZThn484_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn784_N8S19558C8D0Ev,_ZThn484_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C15__9S19558C14[] = {
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C15__9S19558C14[] = {
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C14[] = {
  ABISELECT(304,188),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn304_N8S19558C9D1Ev,_ZThn188_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn304_N8S19558C9D0Ev,_ZThn188_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C15__A2__9S19558C14[] = {
  ABISELECT(-304,-188),
  0,
  0,
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C15__9S19558C14[] = {
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn656_N9S19558C15D1Ev,_ZThn408_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn656_N9S19558C15D0Ev,_ZThn408_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C15__9S19558C14[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn784_N9S19558C15D1Ev,_ZThn484_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn784_N9S19558C15D0Ev,_ZThn484_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C15__9S19558C14[] = {
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn984_N9S19558C15D1Ev,_ZThn604_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn984_N9S19558C15D0Ev,_ZThn604_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C15__9S19558C14[] = {
  ABISELECT(-984,-604),
  ABISELECT(-328,-196),
  ABISELECT(-984,-604),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C15__9S19558C14[] = {
  ABISELECT(304,188),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C14[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C14[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C14[] = {
  ABISELECT(-328,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__9S19558C14[] = {
  ABISELECT(328,196),
  0,
  0,
  ABISELECT(328,196),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
static  VTT_ENTRY vtt_S19558C14[] = {
  {&(_ZTV9S19558C14[6]),  6,57},
  {&(_tg__ZTV9S19558C15__9S19558C14[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C15__9S19558C14[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C15__9S19558C14[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C15__A1__9S19558C14[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C15__A1__9S19558C14[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C15__9S19558C14[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C15__9S19558C14[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C15__9S19558C14[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C15__9S19558C14[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C14[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C15__A2__9S19558C14[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C15__9S19558C14[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C15__9S19558C14[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C15__9S19558C14[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C15__9S19558C14[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C15__9S19558C14[3]),  3,7},
  {&(_ZTV9S19558C14[30]),  30,57},
  {&(_ZTV9S19558C14[37]),  37,57},
  {&(_ZTV9S19558C14[47]),  47,57},
  {&(_ZTV9S19558C14[55]),  55,57},
  {&(_ZTV9S19558C14[22]),  22,57},
  {&(_tg__ZTV8S19558C9__9S19558C14[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C14[5]),  5,9},
  {&(_tg__ZTV8S19558C4__9S19558C14[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__9S19558C14[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N9S19558C15D0Ev,_ZThn604_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N9S19558C15D1Ev,_ZThn604_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C15D0Ev,_ZThn484_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C15D1Ev,_ZThn484_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19558C15D0Ev,_ZThn408_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19558C15D1Ev,_ZThn408_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19558C8D0Ev,_ZThn484_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19558C8D1Ev,_ZThn484_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19558C8D0Ev,_ZThn408_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19558C8D1Ev,_ZThn408_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19558C10D0Ev,_ZThn408_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19558C10D1Ev,_ZThn408_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19558C9D0Ev,_ZThn188_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19558C9D0Ev,_ZThn408_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19558C9D1Ev,_ZThn188_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19558C9D1Ev,_ZThn408_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N9S19558C14D0Ev,_ZThn604_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N9S19558C14D1Ev,_ZThn604_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C14D0Ev,_ZThn484_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C14D1Ev,_ZThn484_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19558C14D0Ev,_ZThn408_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19558C14D1Ev,_ZThn408_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C14 = {  "S19558C14", // class name
  bases_S19558C14, 15,
  &(vtc_S19558C14[0]), // expected_vtbl_contents
  &(vtt_S19558C14[0]), // expected_vtt_contents
  ABISELECT(1008,612), // object size
  NSPAIRA(_ZTI9S19558C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19558C14),57, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C14),26, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C12  : S19558C3 , S19558C9 , S19558C7 , S19558C13 , S19558C14 {
  char s19558c12f0;
  char s19558c12f1;
  int s19558c12f2;
  long double s19558c12f3[4];
  void *s19558c12f4;
  __tsi64 s19558c12f5:54;
  virtual  ~S19558C12(); // _ZN9S19558C12D2Ev
  virtual void  v12(); // _ZN9S19558C123v12Ev
  S19558C12(); // tgen
};
//SIG(-1 S19558C12) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC5 VBC6{ BC7{ VBC4 VBC8{ VBC4 BC5 vd Fi FC4 Fi} BC9{ BC8 vd Fi Fp Fi[2]} VBC5 vd v4 FU10{ m Fi[2] FL}} vd v5 FD[3] Fi Fc FC8 Fi:9 Fc[5] Fi Fp[9]} BC7 BC4 vd v6 v7 Fc:0 Fc Fi:10 Fc Fi} BC8 BC6 BC11{ VBC7 BC8 vd v8 v9 Fc FC8 Fc} BC12{ BC13{ VBC5 BC7 BC4 VBC3 BC8 vd v10 Fi Fi Fi} vd v11 Fi Fl Fi FL} vd v1 Fc Fc Fi FD[4] Fp FL:54}


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

static void Test_S19558C12()
{
  extern Class_Descriptor cd_S19558C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(249,600)];
    init_test(&cd_S19558C12, buf);
    S19558C12 *dp, &lv = *(dp=new (buf) S19558C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3968,2396), "sizeof(S19558C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C12)");
    /*is_ambiguous_... S19558C12::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(2624,1588), "S19558C12");
    check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C3*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*), ABISELECT(2624,1588), "S19558C12");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(2624,1588), "S19558C12");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(2624,1588), "S19558C12");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*), ABISELECT(2624,1588), "S19558C12");
    check_base_class_offset(lv, (S19558C4*)(S19558C3*), ABISELECT(2608,1580), "S19558C12");
    check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*), ABISELECT(2608,1580), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C3*), 0, "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(3472,2096), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*), ABISELECT(3472,2096), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C3*), ABISELECT(3472,2096), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*), ABISELECT(3472,2096), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(3472,2096), "S19558C12");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(3472,2096), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2752,1664), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2752,1664), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2752,1664), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*), ABISELECT(3680,2216), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C3*), ABISELECT(3680,2216), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*), ABISELECT(3680,2216), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(3680,2216), "S19558C12");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*), ABISELECT(3680,2216), "S19558C12");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(3680,2216), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C7*), ABISELECT(2752,1664), "S19558C12");
    check_base_class_offset(lv, (S19558C7*)(S19558C3*), ABISELECT(2752,1664), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C3*), ABISELECT(288,180), "S19558C12");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C3*), ABISELECT(288,180), "S19558C12");
    check_base_class_offset(lv, (S19558C3*), 0, "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(432,264), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*), ABISELECT(432,264), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(640,384), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(640,384), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(640,384), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C7*), ABISELECT(640,384), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C7*), ABISELECT(640,384), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(3744,2252), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(3744,2252), "S19558C12");
    /*is_ambiguous_... S19558C12::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*), ABISELECT(3744,2252), "S19558C12");
    check_base_class_offset(lv, (S19558C8*)(S19558C13*), ABISELECT(3744,2252), "S19558C12");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*), ABISELECT(1360,816), "S19558C12");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*), ABISELECT(1360,816), "S19558C12");
    check_base_class_offset(lv, (S19558C13*), ABISELECT(1360,816), "S19558C12");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1920,1140), "S19558C12");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1920,1140), "S19558C12");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1920,1140), "S19558C12");
    check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1920,1140), "S19558C12");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*), ABISELECT(2144,1284), "S19558C12");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*), ABISELECT(2144,1284), "S19558C12");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*), ABISELECT(2272,1360), "S19558C12");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*), ABISELECT(2272,1360), "S19558C12");
    check_base_class_offset(lv, (S19558C15*)(S19558C14*), ABISELECT(1920,1140), "S19558C12");
    check_base_class_offset(lv, (S19558C14*), ABISELECT(1920,1140), "S19558C12");
    check_field_offset(lv, s19558c12f0, ABISELECT(2512,1512), "S19558C12.s19558c12f0");
    check_field_offset(lv, s19558c12f1, ABISELECT(2513,1513), "S19558C12.s19558c12f1");
    check_field_offset(lv, s19558c12f2, ABISELECT(2516,1516), "S19558C12.s19558c12f2");
    check_field_offset(lv, s19558c12f3, ABISELECT(2528,1520), "S19558C12.s19558c12f3");
    check_field_offset(lv, s19558c12f4, ABISELECT(2592,1568), "S19558C12.s19558c12f4");
    set_bf_and_test(lv, s19558c12f5, ABISELECT(2600,1572), 0, 54, 1, "S19558C12");
    set_bf_and_test(lv, s19558c12f5, ABISELECT(2600,1572), 0, 54, hide_sll(1LL<<53), "S19558C12");
    test_class_info(&lv, &cd_S19558C12);
    dp->~S19558C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C12(Test_S19558C12, "S19558C12", ABISELECT(3968,2396));

#else // __cplusplus

extern void _ZN9S19558C12C1Ev();
extern void _ZN9S19558C12D2Ev();
Name_Map name_map_S19558C12[] = {
  NSPAIR(_ZN9S19558C12C1Ev),
  NSPAIR(_ZN9S19558C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C3;
extern VTBL_ENTRY _ZTI8S19558C3[];
extern  VTBL_ENTRY _ZTV8S19558C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C3[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
static Base_Class bases_S19558C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(2624,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(2624,1588), //bcp->offset
    93, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19558C4,    ABISELECT(2608,1580), //bcp->offset
    87, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(3472,2096), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(3472,2096), //bcp->offset
    118, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(3680,2216), //bcp->offset
    128, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C8,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(2752,1664), //bcp->offset
    102, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(64,36), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(288,180), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C3,    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
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(432,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(432,264), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(640,384), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(3744,2252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(3744,2252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(3744,2252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(3744,2252), //bcp->offset
    134, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(1360,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1360,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(1360,816), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2144,1284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(2144,1284), //bcp->offset
    74, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2272,1360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(2272,1360), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(1920,1140), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    70, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C12[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C12D1Ev();
extern void _ZN9S19558C12D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN9S19558C123v12Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N9S19558C12D1Ev,_ZThn36_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19558C12D0Ev,_ZThn36_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn288_N9S19558C12D1Ev,_ZThn180_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19558C12D0Ev,_ZThn180_N9S19558C12D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn432_N9S19558C12D1Ev,_ZThn264_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn432_N9S19558C12D0Ev,_ZThn264_N9S19558C12D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn640_N9S19558C12D1Ev,_ZThn384_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn640_N9S19558C12D0Ev,_ZThn384_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn1360_N9S19558C12D1Ev,_ZThn816_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19558C12D0Ev,_ZThn816_N9S19558C12D0Ev)();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn1920_N9S19558C12D1Ev,_ZThn1140_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn1920_N9S19558C12D0Ev,_ZThn1140_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn2144_N9S19558C12D1Ev,_ZThn1284_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn2144_N9S19558C12D0Ev,_ZThn1284_N9S19558C12D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn2272_N9S19558C12D1Ev,_ZThn1360_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn2272_N9S19558C12D0Ev,_ZThn1360_N9S19558C12D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C12D1Ev,_ZTv0_n16_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn2608_N9S19558C12D1Ev,_ZThn1580_N9S19558C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C12D0Ev,_ZTv0_n16_N9S19558C12D0Ev)();
extern void ABISELECT(_ZThn2608_N9S19558C12D0Ev,_ZThn1580_N9S19558C12D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C12D1Ev,_ZTv0_n20_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn2624_N9S19558C12D1Ev,_ZThn1588_N9S19558C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C12D0Ev,_ZTv0_n20_N9S19558C12D0Ev)();
extern void ABISELECT(_ZThn2624_N9S19558C12D0Ev,_ZThn1588_N9S19558C12D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn2752_N9S19558C12D1Ev,_ZThn1664_N9S19558C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev)();
extern void ABISELECT(_ZThn2752_N9S19558C12D0Ev,_ZThn1664_N9S19558C12D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C12D1Ev,_ZTv0_n24_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn3472_N9S19558C12D1Ev,_ZThn2096_N9S19558C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C12D0Ev,_ZTv0_n24_N9S19558C12D0Ev)();
extern void ABISELECT(_ZThn3472_N9S19558C12D0Ev,_ZThn2096_N9S19558C12D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn3744_N9S19558C12D1Ev,_ZThn2252_N9S19558C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev)();
extern void ABISELECT(_ZThn3744_N9S19558C12D0Ev,_ZThn2252_N9S19558C12D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY vtc_S19558C12[] = {
  ABISELECT(3744,2252),
  ABISELECT(3680,2216),
  ABISELECT(3472,2096),
  ABISELECT(2752,1664),
  ABISELECT(2624,1588),
  ABISELECT(2608,1580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN9S19558C123v12Ev,
  ABISELECT(3616,2180),
  ABISELECT(3408,2060),
  ABISELECT(2560,1552),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19558C12D1Ev,_ZThn36_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19558C12D0Ev,_ZThn36_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N9S19558C12D1Ev,_ZThn180_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N9S19558C12D0Ev,_ZThn180_N9S19558C12D0Ev),
  ABISELECT(2192,1324),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N9S19558C12D1Ev,_ZThn264_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N9S19558C12D0Ev,_ZThn264_N9S19558C12D0Ev),
  ABISELECT(3040,1832),
  ABISELECT(2832,1712),
  ABISELECT(1984,1204),
  ABISELECT(-640,-384),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N9S19558C12D1Ev,_ZThn384_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N9S19558C12D0Ev,_ZThn384_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(2320,1400),
  ABISELECT(2112,1280),
  ABISELECT(2384,1436),
  ABISELECT(1264,772),
  ABISELECT(-1360,-816),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N9S19558C12D1Ev,_ZThn816_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N9S19558C12D0Ev,_ZThn816_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  ABISELECT(688,440),
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S19558C12D1Ev,_ZThn1140_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S19558C12D0Ev,_ZThn1140_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-2144,-1284),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2144_N9S19558C12D1Ev,_ZThn1284_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2144_N9S19558C12D0Ev,_ZThn1284_N9S19558C12D0Ev),
  ABISELECT(352,228),
  ABISELECT(-2272,-1360),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N9S19558C12D1Ev,_ZThn1360_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N9S19558C12D0Ev,_ZThn1360_N9S19558C12D0Ev),
  ABISELECT(-2608,-1580),
  ABISELECT(16,8),
  ABISELECT(-2608,-1580),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C12D1Ev,_ZTv0_n16_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C12D0Ev,_ZTv0_n16_N9S19558C12D0Ev),
  ABISELECT(-2624,-1588),
  0,
  0,
  ABISELECT(-2624,-1588),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C12D1Ev,_ZTv0_n20_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C12D0Ev,_ZTv0_n20_N9S19558C12D0Ev),
  0,
  0,
  ABISELECT(-2752,-1664),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2752,-1664),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-3472,-2096),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3472,-2096),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C12D1Ev,_ZTv0_n24_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C12D0Ev,_ZTv0_n24_N9S19558C12D0Ev),
  0,
  0,
  ABISELECT(-3680,-2216),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  0,
  ABISELECT(-3744,-2252),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-3744,-2252),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern VTBL_ENTRY _ZTV9S19558C12[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C3D1Ev();
extern void _ZN8S19558C3D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C3__9S19558C12[] = {
  ABISELECT(3680,2216),
  ABISELECT(3472,2096),
  ABISELECT(2752,1664),
  ABISELECT(2624,1588),
  ABISELECT(2608,1580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C3__A1__9S19558C12[] = {
  ABISELECT(3616,2180),
  ABISELECT(3408,2060),
  ABISELECT(2560,1552),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C3__A1__9S19558C12[] = {
  ABISELECT(2560,1552),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C3__A2__9S19558C12[] = {
  ABISELECT(2560,1552),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn2560_N8S19558C9D1Ev,_ZThn1552_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn2560_N8S19558C9D0Ev,_ZThn1552_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C3__A2__9S19558C12[] = {
  ABISELECT(-2560,-1552),
  0,
  0,
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn2560_N9S19558C10D1Ev,_ZThn1552_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn2560_N9S19558C10D0Ev,_ZThn1552_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C3__A1__9S19558C12[] = {
  ABISELECT(-2560,-1552),
  0,
  0,
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn2560_N8S19558C8D1Ev,_ZThn1552_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn2560_N8S19558C8D0Ev,_ZThn1552_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C3__A1__9S19558C12[] = {
  ABISELECT(-2560,-1552),
  0,
  0,
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn3408_N8S19558C8D1Ev,_ZThn2060_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn3408_N8S19558C8D0Ev,_ZThn2060_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C3__A1__9S19558C12[] = {
  ABISELECT(-3408,-2060),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3408,-2060),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C3__A1__9S19558C12[] = {
  0,
  0,
  ABISELECT(-3616,-2180),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19558C3D1Ev,_ZThn1580_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19558C3D0Ev,_ZThn1580_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C3__9S19558C12[] = {
  ABISELECT(-2608,-1580),
  ABISELECT(16,8),
  ABISELECT(-2608,-1580),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn2624_N8S19558C3D1Ev,_ZThn1588_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn2624_N8S19558C3D0Ev,_ZThn1588_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C3__9S19558C12[] = {
  ABISELECT(-2624,-1588),
  0,
  0,
  ABISELECT(-2624,-1588),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn2752_N8S19558C3D1Ev,_ZThn1664_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn2752_N8S19558C3D0Ev,_ZThn1664_N8S19558C3D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C3__9S19558C12[] = {
  0,
  0,
  ABISELECT(-2752,-1664),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2752,-1664),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19558C3D1Ev,_ZThn2096_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19558C3D0Ev,_ZThn2096_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C3__9S19558C12[] = {
  ABISELECT(-3472,-2096),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3472,-2096),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__8S19558C3__9S19558C12[] = {
  0,
  0,
  ABISELECT(-3680,-2216),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__8S19558C3__9S19558C12[] = {
  ABISELECT(3616,2180),
  ABISELECT(3408,2060),
  ABISELECT(2560,1552),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C12[] = {
  ABISELECT(2192,1324),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn2192_N8S19558C9D1Ev,_ZThn1324_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn2192_N8S19558C9D0Ev,_ZThn1324_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__A__9S19558C12[] = {
  ABISELECT(-2192,-1324),
  0,
  0,
  ABISELECT(-2192,-1324),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__A__9S19558C12[] = {
  ABISELECT(3040,1832),
  ABISELECT(2832,1712),
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C7__A2__9S19558C12[] = {
  ABISELECT(3040,1832),
  ABISELECT(2832,1712),
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C7__A2__9S19558C12[] = {
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A4__9S19558C12[] = {
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn1984_N8S19558C9D1Ev,_ZThn1204_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn1984_N8S19558C9D0Ev,_ZThn1204_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A4__9S19558C12[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn1984_N9S19558C10D1Ev,_ZThn1204_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn1984_N9S19558C10D0Ev,_ZThn1204_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__A2__9S19558C12[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn1984_N8S19558C8D1Ev,_ZThn1204_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn1984_N8S19558C8D0Ev,_ZThn1204_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C7__A2__9S19558C12[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn2832_N8S19558C8D1Ev,_ZThn1712_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn2832_N8S19558C8D0Ev,_ZThn1712_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C7__A2__9S19558C12[] = {
  ABISELECT(-2832,-1712),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2832,-1712),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C7__A2__9S19558C12[] = {
  0,
  0,
  ABISELECT(-3040,-1832),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn1984_N8S19558C7D1Ev,_ZThn1204_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn1984_N8S19558C7D0Ev,_ZThn1204_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C7__A__9S19558C12[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn2832_N8S19558C7D1Ev,_ZThn1712_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn2832_N8S19558C7D0Ev,_ZThn1712_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7__A__9S19558C12[] = {
  ABISELECT(-2832,-1712),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2832,-1712),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C7__A__9S19558C12[] = {
  0,
  0,
  ABISELECT(-3040,-1832),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__9S19558C12[] = {
  ABISELECT(2320,1400),
  ABISELECT(2112,1280),
  ABISELECT(2384,1436),
  ABISELECT(1264,772),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C13__A6__9S19558C12[] = {
  ABISELECT(1264,772),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19558C9D1Ev,_ZThn772_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn1264_N8S19558C9D0Ev,_ZThn772_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C13__A6__9S19558C12[] = {
  ABISELECT(-1264,-772),
  0,
  0,
  ABISELECT(-1264,-772),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn2384_N9S19558C13D1Ev,_ZThn1436_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn2384_N9S19558C13D0Ev,_ZThn1436_N9S19558C13D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C13__9S19558C12[] = {
  0,
  ABISELECT(-2384,-1436),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-2384,-1436),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn1264_N9S19558C13D1Ev,_ZThn772_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn1264_N9S19558C13D0Ev,_ZThn772_N9S19558C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C13__9S19558C12[] = {
  ABISELECT(-1264,-772),
  0,
  0,
  ABISELECT(-1264,-772),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn2112_N9S19558C13D1Ev,_ZThn1280_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn2112_N9S19558C13D0Ev,_ZThn1280_N9S19558C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C13__9S19558C12[] = {
  ABISELECT(-2112,-1280),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2112,-1280),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C13__9S19558C12[] = {
  0,
  0,
  ABISELECT(-2320,-1400),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C12[] = {
  ABISELECT(688,440),
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C14__9S19558C12[] = {
  ABISELECT(688,440),
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C14__A4__9S19558C12[] = {
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C14__A4__9S19558C12[] = {
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C14__A7__9S19558C12[] = {
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn704_N8S19558C9D1Ev,_ZThn448_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn704_N8S19558C9D0Ev,_ZThn448_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C14__A7__9S19558C12[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn704_N9S19558C10D1Ev,_ZThn448_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn704_N9S19558C10D0Ev,_ZThn448_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C14__A4__9S19558C12[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn704_N8S19558C8D1Ev,_ZThn448_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn704_N8S19558C8D0Ev,_ZThn448_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C14__A4__9S19558C12[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C8D1Ev,_ZThn956_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C8D0Ev,_ZThn956_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C14__A4__9S19558C12[] = {
  ABISELECT(-1552,-956),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-956),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C14__A4__9S19558C12[] = {
  0,
  0,
  ABISELECT(-1760,-1076),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A8__9S19558C12[] = {
  ABISELECT(352,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S19558C9D1Ev,_ZThn228_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn352_N8S19558C9D0Ev,_ZThn228_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C14__A8__9S19558C12[] = {
  ABISELECT(-352,-228),
  0,
  0,
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C14__9S19558C12[] = {
  0,
  0,
  ABISELECT(-1760,-1076),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn704_N9S19558C15D1Ev,_ZThn448_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn704_N9S19558C15D0Ev,_ZThn448_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C14__9S19558C12[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn1552_N9S19558C15D1Ev,_ZThn956_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn1552_N9S19558C15D0Ev,_ZThn956_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C14__9S19558C12[] = {
  ABISELECT(-1552,-956),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-956),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn688_N9S19558C15D1Ev,_ZThn440_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn688_N9S19558C15D0Ev,_ZThn440_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C14__9S19558C12[] = {
  ABISELECT(-688,-440),
  ABISELECT(16,8),
  ABISELECT(-688,-440),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C14__9S19558C12[] = {
  ABISELECT(352,228),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C14__9S19558C12[] = {
  0,
  0,
  ABISELECT(-1760,-1076),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn704_N9S19558C14D1Ev,_ZThn448_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn704_N9S19558C14D0Ev,_ZThn448_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C14__9S19558C12[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn1552_N9S19558C14D1Ev,_ZThn956_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn1552_N9S19558C14D0Ev,_ZThn956_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C14__9S19558C12[] = {
  ABISELECT(-1552,-956),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-956),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn688_N9S19558C14D1Ev,_ZThn440_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn688_N9S19558C14D0Ev,_ZThn440_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C14__9S19558C12[] = {
  ABISELECT(-688,-440),
  ABISELECT(16,8),
  ABISELECT(-688,-440),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C14__9S19558C12[] = {
  ABISELECT(352,228),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__9S19558C12[] = {
  ABISELECT(-16,-8),
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__9S19558C12[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C7__9S19558C12[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C7__9S19558C12[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C12[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C12[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__9S19558C12[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C7__9S19558C12[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C7__9S19558C12[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C7__9S19558C12[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C7__9S19558C12[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7__9S19558C12[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C7__9S19558C12[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C12[] = {
  ABISELECT(-848,-508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C12[] = {
  ABISELECT(848,508),
  0,
  0,
  ABISELECT(848,508),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A3__9S19558C12[] = {
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__A3__9S19558C12[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A5__9S19558C12[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A5__9S19558C12[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__A3__9S19558C12[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__A3__9S19558C12[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__A3__9S19558C12[] = {
  ABISELECT(272,156),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__A3__9S19558C12[] = {
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
static  VTT_ENTRY vtt_S19558C12[] = {
  {&(_ZTV9S19558C12[8]),  8,148},
  {&(_tg__ZTV8S19558C3__9S19558C12[7]),  7,13},
  {&(_tg__ZTV8S19558C88S19558C3__A1__9S19558C12[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C3__A1__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C3__A2__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C3__A2__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C3__A1__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C3__A1__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C3__A1__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C3__A1__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C4__8S19558C3__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C3__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C3__9S19558C12[10]),  10,16},
  {&(_tg__ZTV8S19558C9__8S19558C3__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__8S19558C3__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C8__A1__8S19558C3__9S19558C12[5]),  5,10},
  {&(_tg__ZTV8S19558C9__A__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__A__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C7__A__9S19558C12[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C7__A2__9S19558C12[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C7__A2__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A4__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A4__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__A2__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C7__A2__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C7__A2__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C7__A2__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C7__A__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C7__A__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C7__A__9S19558C12[4]),  4,6},
  {&(_tg__ZTV9S19558C13__9S19558C12[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C13__A6__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C13__A6__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C13__9S19558C12[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C13__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C13__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C13__9S19558C12[4]),  4,6},
  {&(_tg__ZTV9S19558C14__9S19558C12[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C14__9S19558C12[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C14__A4__9S19558C12[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C14__A4__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C14__A7__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C14__A7__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C14__A4__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C14__A4__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C14__A4__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C14__A4__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A8__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C14__A8__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C14__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C14__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C14__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C14__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C14__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C14__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C14__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C14__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C14__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C14__9S19558C12[3]),  3,7},
  {&(_ZTV9S19558C12[91]),  91,148},
  {&(_ZTV9S19558C12[98]),  98,148},
  {&(_ZTV9S19558C12[112]),  112,148},
  {&(_ZTV9S19558C12[124]),  124,148},
  {&(_ZTV9S19558C12[132]),  132,148},
  {&(_ZTV9S19558C12[20]),  20,148},
  {&(_ZTV9S19558C12[34]),  34,148},
  {&(_ZTV9S19558C12[43]),  43,148},
  {&(_ZTV9S19558C12[55]),  55,148},
  {&(_ZTV9S19558C12[143]),  143,148},
  {&(_ZTV9S19558C12[67]),  67,148},
  {&(_ZTV9S19558C12[83]),  83,148},
  {&(_tg__ZTV8S19558C4__9S19558C12[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C7__9S19558C12[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C7__9S19558C12[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C7__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C7__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C7__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C7__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C7__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C7__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C7__9S19558C12[4]),  4,6},
  {&(_tg__ZTV8S19558C9__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C8__A3__9S19558C12[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__A3__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A5__9S19558C12[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A5__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__A3__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__A3__9S19558C12[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__A3__9S19558C12[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__A3__9S19558C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19558C12[];
extern  VTBL_ENTRY _ZTV9S19558C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C12[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N9S19558C14D0Ev,_ZThn440_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N9S19558C14D1Ev,_ZThn440_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N9S19558C14D0Ev,_ZThn956_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N9S19558C14D1Ev,_ZThn956_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N9S19558C14D0Ev,_ZThn448_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N9S19558C14D1Ev,_ZThn448_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N9S19558C15D0Ev,_ZThn440_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N9S19558C15D1Ev,_ZThn440_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N9S19558C15D0Ev,_ZThn956_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N9S19558C15D1Ev,_ZThn956_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N9S19558C15D0Ev,_ZThn448_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N9S19558C15D1Ev,_ZThn448_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19558C13D0Ev,_ZThn1280_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19558C13D1Ev,_ZThn1280_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N9S19558C13D0Ev,_ZThn772_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N9S19558C13D1Ev,_ZThn772_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2384_N9S19558C13D0Ev,_ZThn1436_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2384_N9S19558C13D1Ev,_ZThn1436_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N8S19558C7D0Ev,_ZThn1712_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N8S19558C7D1Ev,_ZThn1712_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S19558C7D0Ev,_ZThn1204_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S19558C7D1Ev,_ZThn1204_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19558C3D0Ev,_ZThn2096_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19558C3D1Ev,_ZThn2096_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S19558C3D0Ev,_ZThn1664_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S19558C3D1Ev,_ZThn1664_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N8S19558C3D0Ev,_ZThn1588_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N8S19558C3D1Ev,_ZThn1588_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19558C3D0Ev,_ZThn1580_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19558C3D1Ev,_ZThn1580_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C8D0Ev,_ZThn956_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N8S19558C8D0Ev,_ZThn1712_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3408_N8S19558C8D0Ev,_ZThn2060_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C8D1Ev,_ZThn956_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N8S19558C8D1Ev,_ZThn1712_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3408_N8S19558C8D1Ev,_ZThn2060_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C8D0Ev,_ZThn448_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S19558C8D0Ev,_ZThn1204_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N8S19558C8D0Ev,_ZThn1552_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C8D1Ev,_ZThn448_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S19558C8D1Ev,_ZThn1204_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N8S19558C8D1Ev,_ZThn1552_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N9S19558C10D0Ev,_ZThn448_N9S19558C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N9S19558C10D0Ev,_ZThn1204_N9S19558C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19558C10D0Ev,_ZThn1552_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N9S19558C10D1Ev,_ZThn448_N9S19558C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N9S19558C10D1Ev,_ZThn1204_N9S19558C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19558C10D1Ev,_ZThn1552_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C9D0Ev,_ZThn228_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C9D0Ev,_ZThn448_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S19558C9D0Ev,_ZThn772_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S19558C9D0Ev,_ZThn1204_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2192_N8S19558C9D0Ev,_ZThn1324_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N8S19558C9D0Ev,_ZThn1552_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C9D1Ev,_ZThn228_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C9D1Ev,_ZThn448_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S19558C9D1Ev,_ZThn772_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S19558C9D1Ev,_ZThn1204_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2192_N8S19558C9D1Ev,_ZThn1324_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N8S19558C9D1Ev,_ZThn1552_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C12D0Ev,_ZTv0_n24_N9S19558C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N9S19558C12D0Ev,_ZThn2096_N9S19558C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C12D1Ev,_ZTv0_n24_N9S19558C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N9S19558C12D1Ev,_ZThn2096_N9S19558C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N9S19558C12D0Ev,_ZThn2252_N9S19558C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19558C12D0Ev,_ZThn1664_N9S19558C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N9S19558C12D1Ev,_ZThn2252_N9S19558C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19558C12D1Ev,_ZThn1664_N9S19558C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C12D0Ev,_ZTv0_n20_N9S19558C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N9S19558C12D0Ev,_ZThn1588_N9S19558C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C12D1Ev,_ZTv0_n20_N9S19558C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N9S19558C12D1Ev,_ZThn1588_N9S19558C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C12D0Ev,_ZTv0_n16_N9S19558C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S19558C12D0Ev,_ZThn1580_N9S19558C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C12D1Ev,_ZTv0_n16_N9S19558C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S19558C12D1Ev,_ZThn1580_N9S19558C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C12 = {  "S19558C12", // class name
  bases_S19558C12, 43,
  &(vtc_S19558C12[0]), // expected_vtbl_contents
  &(vtt_S19558C12[0]), // expected_vtt_contents
  ABISELECT(3968,2396), // object size
  NSPAIRA(_ZTI9S19558C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19558C12),148, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C12),95, //virtual table table var
  43, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C17  : S19558C4 , S19558C9 , S19558C14 {
  ::S19558C10 s19558c17f0;
  ~S19558C17(); // tgen
  S19558C17(); // tgen
};
//SIG(-1 S19558C17) C1{ BC2{ VBC3{ BC4{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC7{ VBC4 BC8{ VBC3 VBC5 BC9{ BC5 vd Fi Fp Fi[2]} VBC4 vd v3 FU10{ m Fi[2] FL}} BC3 VBC2 BC5 vd v4 Fi Fi Fi} vd v5 Fi Fl Fi FL} FC9}


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

static void Test_S19558C17()
{
  extern Class_Descriptor cd_S19558C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(100,239)];
    init_test(&cd_S19558C17, buf);
    S19558C17 *dp, &lv = *(dp=new (buf) S19558C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1584,952), "sizeof(S19558C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C17)");
    /*is_ambiguous_... S19558C17::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(1168,712), "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(1168,712), "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(1168,712), "S19558C17");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1168,712), "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(1168,712), "S19558C17");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1168,712), "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(1168,712), "S19558C17");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*), ABISELECT(1168,712), "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C4*), 0, "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(16,8), "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*), ABISELECT(16,8), "S19558C17");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*), ABISELECT(1296,788), "S19558C17");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1296,788), "S19558C17");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(1360,824), "S19558C17");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(1360,824), "S19558C17");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(224,128), "S19558C17");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(224,128), "S19558C17");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(224,128), "S19558C17");
    check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*), ABISELECT(224,128), "S19558C17");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*), ABISELECT(448,272), "S19558C17");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*), ABISELECT(448,272), "S19558C17");
    check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*), ABISELECT(1560,944), "S19558C17");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*), ABISELECT(576,348), "S19558C17");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*), ABISELECT(576,348), "S19558C17");
    check_base_class_offset(lv, (S19558C15*)(S19558C14*), ABISELECT(224,128), "S19558C17");
    check_base_class_offset(lv, (S19558C14*), ABISELECT(224,128), "S19558C17");
    check_field_offset(lv, s19558c17f0, ABISELECT(816,500), "S19558C17.s19558c17f0");
    test_class_info(&lv, &cd_S19558C17);
    dp->~S19558C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C17(Test_S19558C17, "S19558C17", ABISELECT(1584,952));

#else // __cplusplus

extern void _ZN9S19558C17C1Ev();
extern void _ZN9S19558C17D1Ev();
Name_Map name_map_S19558C17[] = {
  NSPAIR(_ZN9S19558C17C1Ev),
  NSPAIR(_ZN9S19558C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
static Base_Class bases_S19558C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(1168,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(1168,712), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19558C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(1296,788), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(1360,824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1360,824), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(448,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
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(448,272), //bcp->offset
    28, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S19558C4,    ABISELECT(1560,944), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(576,348), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(224,128), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C17[];
extern void _ZN9S19558C17D1Ev();
extern void _ZN9S19558C17D0Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn448_N9S19558C17D1Ev,_ZThn272_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn448_N9S19558C17D0Ev,_ZThn272_N9S19558C17D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn1168_N9S19558C17D1Ev,_ZThn712_N9S19558C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev)();
extern void ABISELECT(_ZThn1168_N9S19558C17D0Ev,_ZThn712_N9S19558C17D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19558C17D1Ev,_ZThn824_N9S19558C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev)();
extern void ABISELECT(_ZThn1360_N9S19558C17D0Ev,_ZThn824_N9S19558C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn1560_N9S19558C17D1Ev,_ZThn944_N9S19558C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev)();
extern void ABISELECT(_ZThn1560_N9S19558C17D0Ev,_ZThn944_N9S19558C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C17[] = {
  ABISELECT(1560,944),
  ABISELECT(1360,824),
  ABISELECT(1296,788),
  ABISELECT(1168,712),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN9S19558C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C17D0Ev,
  ABISELECT(1152,704),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev),
  ABISELECT(1336,816),
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-448,-272),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N9S19558C17D1Ev,_ZThn272_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N9S19558C17D0Ev,_ZThn272_N9S19558C17D0Ev),
  ABISELECT(592,364),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev),
  ABISELECT(-1168,-712),
  0,
  0,
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev),
  0,
  0,
  ABISELECT(-1296,-788),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  ABISELECT(-1360,-824),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1360,-824),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev),
  ABISELECT(-1560,-944),
  ABISELECT(-392,-232),
  ABISELECT(-1560,-944),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19558C17[];
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__A__9S19558C17[] = {
  ABISELECT(1168,712),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZThn1168_N8S19558C4D1Ev,_ZThn712_N8S19558C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
extern void ABISELECT(_ZThn1168_N8S19558C4D0Ev,_ZThn712_N8S19558C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__A__9S19558C17[] = {
  ABISELECT(-1168,-712),
  0,
  0,
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C17[] = {
  ABISELECT(1152,704),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn1152_N8S19558C9D1Ev,_ZThn704_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn1152_N8S19558C9D0Ev,_ZThn704_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__A__9S19558C17[] = {
  ABISELECT(-1152,-704),
  0,
  0,
  ABISELECT(-1152,-704),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C17[] = {
  ABISELECT(1336,816),
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(1336,816),
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C14__A2__9S19558C17[] = {
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn944_N8S19558C9D1Ev,_ZThn584_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn944_N8S19558C9D0Ev,_ZThn584_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C14__A2__9S19558C17[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn944_N9S19558C10D1Ev,_ZThn584_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn944_N9S19558C10D0Ev,_ZThn584_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn944_N8S19558C8D1Ev,_ZThn584_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn944_N8S19558C8D0Ev,_ZThn584_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn1136_N8S19558C8D1Ev,_ZThn696_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn1136_N8S19558C8D0Ev,_ZThn696_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(-1136,-696),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C14__9S19558C17[] = {
  0,
  0,
  ABISELECT(-1072,-660),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17[] = {
  ABISELECT(592,364),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn592_N8S19558C9D1Ev,_ZThn364_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn592_N8S19558C9D0Ev,_ZThn364_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C14__A3__9S19558C17[] = {
  ABISELECT(-592,-364),
  0,
  0,
  ABISELECT(-592,-364),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C14__9S19558C17[] = {
  0,
  0,
  ABISELECT(-1072,-660),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn944_N9S19558C15D1Ev,_ZThn584_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn944_N9S19558C15D0Ev,_ZThn584_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn1136_N9S19558C15D1Ev,_ZThn696_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn1136_N9S19558C15D0Ev,_ZThn696_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(-1136,-696),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn1336_N9S19558C15D1Ev,_ZThn816_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn1336_N9S19558C15D0Ev,_ZThn816_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(-1336,-816),
  ABISELECT(-392,-232),
  ABISELECT(-1336,-816),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C14__9S19558C17[] = {
  ABISELECT(592,364),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C14__9S19558C17[] = {
  0,
  0,
  ABISELECT(-1072,-660),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn944_N9S19558C14D1Ev,_ZThn584_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn944_N9S19558C14D0Ev,_ZThn584_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C14__9S19558C17[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn1136_N9S19558C14D1Ev,_ZThn696_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn1136_N9S19558C14D0Ev,_ZThn696_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C14__9S19558C17[] = {
  ABISELECT(-1136,-696),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn1336_N9S19558C14D1Ev,_ZThn816_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn1336_N9S19558C14D0Ev,_ZThn816_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C14__9S19558C17[] = {
  ABISELECT(-1336,-816),
  ABISELECT(-392,-232),
  ABISELECT(-1336,-816),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C14__9S19558C17[] = {
  ABISELECT(592,364),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C17[] = {
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__A1__9S19558C17[] = {
  ABISELECT(192,112),
  0,
  0,
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C17[] = {
  ABISELECT(-392,-232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__A1__9S19558C17[] = {
  ABISELECT(392,232),
  0,
  0,
  ABISELECT(392,232),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
static  VTT_ENTRY vtt_S19558C17[] = {
  {&(_ZTV9S19558C17[6]),  6,72},
  {&(_tg__ZTV8S19558C4__A__9S19558C17[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__A__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A__9S19558C17[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__A__9S19558C17[5]),  5,9},
  {&(_tg__ZTV9S19558C14__9S19558C17[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C14__9S19558C17[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C14__9S19558C17[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C14__9S19558C17[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C14__A2__9S19558C17[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C14__A2__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C14__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C14__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C14__9S19558C17[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C14__9S19558C17[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C14__A3__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C14__9S19558C17[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C14__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C14__9S19558C17[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C14__9S19558C17[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C14__9S19558C17[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C14__9S19558C17[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C14__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C14__9S19558C17[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C14__9S19558C17[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C14__9S19558C17[3]),  3,7},
  {&(_ZTV9S19558C17[46]),  46,72},
  {&(_ZTV9S19558C17[11]),  11,72},
  {&(_ZTV9S19558C17[21]),  21,72},
  {&(_ZTV9S19558C17[54]),  54,72},
  {&(_ZTV9S19558C17[62]),  62,72},
  {&(_ZTV9S19558C17[70]),  70,72},
  {&(_ZTV9S19558C17[37]),  37,72},
  {&(_tg__ZTV8S19558C9__A1__9S19558C17[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__A1__9S19558C17[5]),  5,9},
  {&(_tg__ZTV8S19558C4__A1__9S19558C17[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__A1__9S19558C17[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19558C17[];
extern  VTBL_ENTRY _ZTV9S19558C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C17[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N9S19558C14D0Ev,_ZThn816_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N9S19558C14D1Ev,_ZThn816_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N9S19558C14D0Ev,_ZThn696_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N9S19558C14D1Ev,_ZThn696_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N9S19558C14D0Ev,_ZThn584_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N9S19558C14D1Ev,_ZThn584_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N9S19558C15D0Ev,_ZThn816_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N9S19558C15D1Ev,_ZThn816_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N9S19558C15D0Ev,_ZThn696_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N9S19558C15D1Ev,_ZThn696_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N9S19558C15D0Ev,_ZThn584_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N9S19558C15D1Ev,_ZThn584_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19558C8D0Ev,_ZThn696_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S19558C8D1Ev,_ZThn696_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S19558C8D0Ev,_ZThn584_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S19558C8D1Ev,_ZThn584_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N9S19558C10D0Ev,_ZThn584_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N9S19558C10D1Ev,_ZThn584_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19558C9D0Ev,_ZThn364_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S19558C9D0Ev,_ZThn584_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S19558C9D0Ev,_ZThn704_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19558C9D1Ev,_ZThn364_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S19558C9D1Ev,_ZThn584_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N8S19558C9D1Ev,_ZThn704_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19558C4D0Ev,_ZThn712_N8S19558C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19558C4D1Ev,_ZThn712_N8S19558C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1560_N9S19558C17D0Ev,_ZThn944_N9S19558C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1560_N9S19558C17D1Ev,_ZThn944_N9S19558C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19558C17D0Ev,_ZThn824_N9S19558C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19558C17D1Ev,_ZThn824_N9S19558C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N9S19558C17D0Ev,_ZThn712_N9S19558C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N9S19558C17D1Ev,_ZThn712_N9S19558C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C17 = {  "S19558C17", // class name
  bases_S19558C17, 19,
  &(vtc_S19558C17[0]), // expected_vtbl_contents
  &(vtt_S19558C17[0]), // expected_vtt_contents
  ABISELECT(1584,952), // object size
  NSPAIRA(_ZTI9S19558C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19558C17),72, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C17),38, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C19  : S19558C10 , virtual S19558C9 {
  int s19558c19f0;
  int s19558c19f1;
  virtual  ~S19558C19(); // _ZN9S19558C19D2Ev
  S19558C19(); // tgen
};
//SIG(-1 S19558C19) C1{ BC2{ BC3{ VBC4{ BC5{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC5 vd Fi FC4 Fi} vd Fi Fp Fi[2]} VBC3 vd Fi[2]}


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

static void Test_S19558C19()
{
  extern Class_Descriptor cd_S19558C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,86)];
    init_test(&cd_S19558C19, buf);
    S19558C19 *dp, &lv = *(dp=new (buf) S19558C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,340), "sizeof(S19558C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C19)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(224,144), "S19558C19");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*), ABISELECT(224,144), "S19558C19");
    /*is_ambiguous_... S19558C19::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(224,144), "S19558C19");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*), 0, "S19558C19");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*), 0, "S19558C19");
    check_base_class_offset(lv, (S19558C10*), 0, "S19558C19");
    /*is_ambiguous_... S19558C19::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(352,220), "S19558C19");
    /*is_ambiguous_... S19558C19::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*), ABISELECT(352,220), "S19558C19");
    check_field_offset(lv, s19558c19f0, ABISELECT(216,136), "S19558C19.s19558c19f0");
    check_field_offset(lv, s19558c19f1, ABISELECT(220,140), "S19558C19.s19558c19f1");
    test_class_info(&lv, &cd_S19558C19);
    dp->~S19558C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C19(Test_S19558C19, "S19558C19", ABISELECT(560,340));

#else // __cplusplus

extern void _ZN9S19558C19C1Ev();
extern void _ZN9S19558C19D2Ev();
Name_Map name_map_S19558C19[] = {
  NSPAIR(_ZN9S19558C19C1Ev),
  NSPAIR(_ZN9S19558C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
static Base_Class bases_S19558C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(224,144), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19558C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(352,220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C19[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C19D1Ev();
extern void _ZN9S19558C19D0Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C19D1Ev,_ZThn144_N9S19558C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev)();
extern void ABISELECT(_ZThn224_N9S19558C19D0Ev,_ZThn144_N9S19558C19D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C19D1Ev,_ZThn220_N9S19558C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev)();
extern void ABISELECT(_ZThn352_N9S19558C19D0Ev,_ZThn220_N9S19558C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C19[] = {
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D0Ev,
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev),
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19558C19[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C10__9S19558C19[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C10__9S19558C19[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C10__9S19558C19[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C10__9S19558C19[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C19[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__A1__9S19558C19[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C19[] = {
  {&(_ZTV9S19558C19[4]),  4,27},
  {&(_tg__ZTV9S19558C10__9S19558C19[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C10__9S19558C19[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C10__9S19558C19[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C10__9S19558C19[5]),  5,9},
  {&(_ZTV9S19558C19[13]),  13,27},
  {&(_ZTV9S19558C19[23]),  23,27},
  {&(_tg__ZTV8S19558C9__A1__9S19558C19[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__A1__9S19558C19[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19558C19[];
extern  VTBL_ENTRY _ZTV9S19558C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C19[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19558C19D0Ev,_ZThn220_N9S19558C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19558C19D1Ev,_ZThn220_N9S19558C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C19D0Ev,_ZThn144_N9S19558C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C19D1Ev,_ZThn144_N9S19558C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C19 = {  "S19558C19", // class name
  bases_S19558C19, 7,
  &(vtc_S19558C19[0]), // expected_vtbl_contents
  &(vtt_S19558C19[0]), // expected_vtt_contents
  ABISELECT(560,340), // object size
  NSPAIRA(_ZTI9S19558C19),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19558C19),27, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C19),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S19558C20  {
  int s19558c20f0;
  long double s19558c20f1;
  int s19558c20f2:32;
  void *s19558c20f3;
  void *s19558c20f4;
  void  mf19558c20(); // _ZN9S19558C2010mf19558c20Ev
};
//SIG(1 S19558C20) U1{ m Fi FD Fi:32 Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19558C18  : S19558C5 , virtual S19558C13 , S19558C19 {
  int s19558c18f0;
  int s19558c18f1[9];
  ::S19558C20 s19558c18f2;
  ~S19558C18(); // tgen
  S19558C18(); // tgen
};
//SIG(-1 S19558C18) C1{ BC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC4{ VBC5{ VBC2 VBC6{ VBC2 BC3 vd Fi FC2 Fi} BC7{ BC6 vd Fi Fp Fi[2]} VBC3 vd v3 FU8{ m Fi[2] FL}} BC6 vd v4 v5 Fc FC6 Fc} BC9{ BC7 VBC6 vd Fi Fi} Fi Fi[9] FU10{ m Fi FD Fi:32 Fp Fp}}


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

static void Test_S19558C18()
{
  extern Class_Descriptor cd_S19558C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(101,244)];
    init_test(&cd_S19558C18, buf);
    S19558C18 *dp, &lv = *(dp=new (buf) S19558C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1600,972), "sizeof(S19558C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C18)");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), 0, "S19558C18");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*), 0, "S19558C18");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(1200,740), "S19558C18");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(1200,740), "S19558C18");
    /*is_ambiguous_... S19558C18::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(1200,740), "S19558C18");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(1200,740), "S19558C18");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*), ABISELECT(1200,740), "S19558C18");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C19*), ABISELECT(1200,740), "S19558C18");
    /*is_ambiguous_... S19558C18::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(1328,816), "S19558C18");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(1328,816), "S19558C18");
    /*is_ambiguous_... S19558C19::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C19*), ABISELECT(1328,816), "S19558C18");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(976,596), "S19558C18");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(976,596), "S19558C18");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*), ABISELECT(976,596), "S19558C18");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(1536,936), "S19558C18");
    check_base_class_offset(lv, (S19558C8*)(S19558C13*), ABISELECT(976,596), "S19558C18");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*), ABISELECT(416,272), "S19558C18");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*), ABISELECT(416,272), "S19558C18");
    check_base_class_offset(lv, (S19558C13*), ABISELECT(416,272), "S19558C18");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C19*), ABISELECT(128,76), "S19558C18");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C19*), ABISELECT(128,76), "S19558C18");
    check_base_class_offset(lv, (S19558C10*)(S19558C19*), ABISELECT(128,76), "S19558C18");
    check_base_class_offset(lv, (S19558C19*), ABISELECT(128,76), "S19558C18");
    check_field_offset(lv, s19558c18f0, ABISELECT(352,220), "S19558C18.s19558c18f0");
    check_field_offset(lv, s19558c18f1, ABISELECT(356,224), "S19558C18.s19558c18f1");
    check_field_offset(lv, s19558c18f2, ABISELECT(400,260), "S19558C18.s19558c18f2");
    test_class_info(&lv, &cd_S19558C18);
    dp->~S19558C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C18(Test_S19558C18, "S19558C18", ABISELECT(1600,972));

#else // __cplusplus

extern void _ZN9S19558C18C1Ev();
extern void _ZN9S19558C18D1Ev();
Name_Map name_map_S19558C18[] = {
  NSPAIR(_ZN9S19558C18C1Ev),
  NSPAIR(_ZN9S19558C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C19;
extern VTBL_ENTRY _ZTI9S19558C19[];
extern  VTBL_ENTRY _ZTV9S19558C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C19[];
static Base_Class bases_S19558C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19558C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19558C6,    ABISELECT(1200,740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19558C5,    ABISELECT(1200,740), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19558C9,    ABISELECT(1328,816), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1536,936), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C8,    ABISELECT(976,596), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(416,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(416,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(416,272), //bcp->offset
    19, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(128,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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C19,    ABISELECT(128,76), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C18[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C18D1Ev();
extern void _ZN9S19558C18D0Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn416_N9S19558C18D1Ev,_ZThn272_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn416_N9S19558C18D0Ev,_ZThn272_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn976_N9S19558C18D1Ev,_ZThn596_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn976_N9S19558C18D0Ev,_ZThn596_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C18D1Ev,_ZThn740_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C18D0Ev,_ZThn740_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn1328_N9S19558C18D1Ev,_ZThn816_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn1328_N9S19558C18D0Ev,_ZThn816_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY vtc_S19558C18[] = {
  ABISELECT(1536,936),
  ABISELECT(1328,816),
  ABISELECT(1200,740),
  ABISELECT(976,596),
  ABISELECT(416,272),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D0Ev,
  ABISELECT(1200,740),
  ABISELECT(1072,664),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev),
  0,
  0,
  ABISELECT(-416,-272),
  0,
  0,
  ABISELECT(1120,664),
  ABISELECT(912,544),
  ABISELECT(560,324),
  ABISELECT(784,468),
  ABISELECT(-416,-272),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  0,
  ABISELECT(-976,-596),
  0,
  0,
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-1200,-740),
  0,
  0,
  ABISELECT(-1200,-740),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev),
  ABISELECT(-1328,-816),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-1328,-816),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev),
  0,
  0,
  ABISELECT(-1536,-936),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern VTBL_ENTRY _ZTV9S19558C18[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C19D1Ev();
extern void _ZN9S19558C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C19__9S19558C18[] = {
  ABISELECT(1200,740),
  ABISELECT(1072,664),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C109S19558C19__A1__9S19558C18[] = {
  ABISELECT(1072,664),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C109S19558C19__A3__9S19558C18[] = {
  ABISELECT(1072,664),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn1072_N8S19558C9D1Ev,_ZThn664_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn1072_N8S19558C9D0Ev,_ZThn664_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C109S19558C19__A3__9S19558C18[] = {
  ABISELECT(-1072,-664),
  0,
  0,
  ABISELECT(-1072,-664),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn1072_N9S19558C10D1Ev,_ZThn664_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn1072_N9S19558C10D0Ev,_ZThn664_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C109S19558C19__A1__9S19558C18[] = {
  ABISELECT(-1072,-664),
  0,
  0,
  ABISELECT(-1072,-664),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev)();
extern void ABISELECT(_ZThn1072_N9S19558C19D1Ev,_ZThn664_N9S19558C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev)();
extern void ABISELECT(_ZThn1072_N9S19558C19D0Ev,_ZThn664_N9S19558C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C19__9S19558C18[] = {
  ABISELECT(-1072,-664),
  0,
  0,
  ABISELECT(-1072,-664),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C19D1Ev,_ZThn740_N9S19558C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C19D0Ev,_ZThn740_N9S19558C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C19__9S19558C18[] = {
  ABISELECT(-1200,-740),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-1200,-740),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__9S19558C18[] = {
  ABISELECT(1120,664),
  ABISELECT(912,544),
  ABISELECT(560,324),
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C13__A2__9S19558C18[] = {
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn784_N8S19558C9D1Ev,_ZThn468_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn784_N8S19558C9D0Ev,_ZThn468_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C13__A2__9S19558C18[] = {
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn560_N9S19558C13D1Ev,_ZThn324_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn560_N9S19558C13D0Ev,_ZThn324_N9S19558C13D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C13__9S19558C18[] = {
  0,
  ABISELECT(-560,-324),
  0,
  0,
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn784_N9S19558C13D1Ev,_ZThn468_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn784_N9S19558C13D0Ev,_ZThn468_N9S19558C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C13__9S19558C18[] = {
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn912_N9S19558C13D1Ev,_ZThn544_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn912_N9S19558C13D0Ev,_ZThn544_N9S19558C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C13__9S19558C18[] = {
  ABISELECT(-912,-544),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-912,-544),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C13__9S19558C18[] = {
  0,
  0,
  ABISELECT(-1120,-664),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C18[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__9S19558C18[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A1__9S19558C18[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__9S19558C18[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__9S19558C18[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C8D1Ev,_ZThn144_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn224_N8S19558C8D0Ev,_ZThn144_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__9S19558C18[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn352_N8S19558C8D1Ev,_ZThn220_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn352_N8S19558C8D0Ev,_ZThn220_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__9S19558C18[] = {
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__9S19558C18[] = {
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C18[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C18[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C18[] = {
  {&(_ZTV9S19558C18[7]),  7,75},
  {&(_tg__ZTV9S19558C19__9S19558C18[4]),  4,8},
  {&(_tg__ZTV9S19558C109S19558C19__A1__9S19558C18[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C109S19558C19__A3__9S19558C18[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C109S19558C19__A3__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C109S19558C19__A1__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C19__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A1__9S19558C19__9S19558C18[6]),  6,10},
  {&(_ZTV9S19558C18[30]),  30,75},
  {&(_ZTV9S19558C18[45]),  45,75},
  {&(_ZTV9S19558C18[55]),  55,75},
  {&(_ZTV9S19558C18[65]),  65,75},
  {&(_ZTV9S19558C18[73]),  73,75},
  {&(_ZTV9S19558C18[15]),  15,75},
  {&(_tg__ZTV9S19558C13__9S19558C18[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C13__A2__9S19558C18[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C13__A2__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C13__9S19558C18[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C13__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C13__9S19558C18[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C13__9S19558C18[4]),  4,6},
  {&(_tg__ZTV8S19558C8__9S19558C18[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__9S19558C18[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A1__9S19558C18[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A1__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__9S19558C18[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__9S19558C18[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__9S19558C18[4]),  4,6},
  {&(_tg__ZTV8S19558C9__9S19558C18[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C18[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19558C18[];
extern  VTBL_ENTRY _ZTV9S19558C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C18[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C8D0Ev,_ZThn220_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19558C8D1Ev,_ZThn220_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C8D0Ev,_ZThn144_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C8D1Ev,_ZThn144_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19558C13D0Ev,_ZThn544_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N9S19558C13D1Ev,_ZThn544_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C13D0Ev,_ZThn468_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N9S19558C13D1Ev,_ZThn468_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N9S19558C13D0Ev,_ZThn324_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N9S19558C13D1Ev,_ZThn324_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C19D0Ev,_ZThn740_N9S19558C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C19D1Ev,_ZThn740_N9S19558C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N9S19558C19D0Ev,_ZThn664_N9S19558C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N9S19558C19D1Ev,_ZThn664_N9S19558C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D0Ev,_ZThn144_N9S19558C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N9S19558C10D0Ev,_ZThn664_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S19558C10D1Ev,_ZThn144_N9S19558C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N9S19558C10D1Ev,_ZThn664_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D0Ev,_ZThn144_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19558C9D0Ev,_ZThn468_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S19558C9D0Ev,_ZThn664_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19558C9D1Ev,_ZThn144_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S19558C9D1Ev,_ZThn468_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S19558C9D1Ev,_ZThn664_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N9S19558C18D0Ev,_ZThn816_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N9S19558C18D1Ev,_ZThn816_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C18D0Ev,_ZThn740_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C18D1Ev,_ZThn740_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N9S19558C18D0Ev,_ZThn596_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N9S19558C18D1Ev,_ZThn596_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S19558C18D0Ev,_ZThn272_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S19558C18D1Ev,_ZThn272_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C18 = {  "S19558C18", // class name
  bases_S19558C18, 18,
  &(vtc_S19558C18[0]), // expected_vtbl_contents
  &(vtt_S19558C18[0]), // expected_vtt_contents
  ABISELECT(1600,972), // object size
  NSPAIRA(_ZTI9S19558C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19558C18),75, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C18),31, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C16  : virtual S19558C9 , virtual S19558C17 , S19558C13 , S19558C18 , virtual S19558C7 {
  int s19558c16f0:4;
  int s19558c16f1:12;
  int s19558c16f2;
  char s19558c16f3;
  virtual  ~S19558C16(); // _ZN9S19558C16D2Ev
  virtual void  v13(); // _ZN9S19558C163v13Ev
  S19558C16(); // tgen
};
//SIG(-1 S19558C16) C1{ VBC2{ VBC3{ BC4{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC4 vd Fi FC3 Fi} VBC5{ BC6{ VBC3 Fi} BC2 BC7{ BC8{ VBC4 BC9{ VBC3 VBC2 BC10{ BC2 vd Fi Fp Fi[2]} VBC4 vd v4 FU11{ m Fi[2] FL}} BC3 VBC6 BC2 vd v5 Fi Fi Fi} vd v6 Fi Fl Fi FL} FC10} BC12{ VBC9 BC2 vd v7 v8 Fc FC2 Fc} BC13{ BC3 VBC12 BC14{ BC10 VBC2 vd Fi Fi} Fi Fi[9] FU15{ m Fi FD Fi:32 Fp Fp}} VBC16{ BC9 vd v9 FD[3] Fi Fc FC2 Fi:9 Fc[5] Fi Fp[9]} vd v1 Fi:4 Fi:12 Fi Fc}


 S19558C16 ::~S19558C16(){ note_dtor("S19558C16", this);}
void  S19558C16 ::v13(){vfunc_called(this, "_ZN9S19558C163v13Ev");}
S19558C16 ::S19558C16(){ note_ctor("S19558C16", this);} // tgen

static void Test_S19558C16()
{
  extern Class_Descriptor cd_S19558C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(256,616)];
    init_test(&cd_S19558C16, buf);
    S19558C16 *dp, &lv = *(dp=new (buf) S19558C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4080,2460), "sizeof(S19558C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C16)");
    /*is_ambiguous_... S19558C16::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C17::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*)(S19558C17*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C17*), ABISELECT(1200,728), "S19558C16");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1200,728), "S19558C16");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*), ABISELECT(1200,728), "S19558C16");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*), ABISELECT(1200,728), "S19558C16");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*), ABISELECT(1200,728), "S19558C16");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(1200,728), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(992,608), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*), ABISELECT(992,608), "S19558C16");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(992,608), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(992,608), "S19558C16");
    /*is_ambiguous_... S19558C19::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C19*)(S19558C18*), ABISELECT(992,608), "S19558C16");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*), ABISELECT(992,608), "S19558C16");
    /*is_ambiguous_... S19558C17::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C17*), ABISELECT(1328,804), "S19558C16");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C17*), ABISELECT(1344,812), "S19558C16");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C17*), ABISELECT(1344,812), "S19558C16");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2496,1516), "S19558C16");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2496,1516), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(2496,1516), "S19558C16");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*), ABISELECT(2496,1516), "S19558C16");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1552,932), "S19558C16");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1552,932), "S19558C16");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1552,932), "S19558C16");
    check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1552,932), "S19558C16");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1776,1076), "S19558C16");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1776,1076), "S19558C16");
    check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2560,1552), "S19558C16");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1904,1152), "S19558C16");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1904,1152), "S19558C16");
    check_base_class_offset(lv, (S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1552,932), "S19558C16");
    check_base_class_offset(lv, (S19558C14*)(S19558C17*), ABISELECT(1552,932), "S19558C16");
    check_base_class_offset(lv, (S19558C17*), ABISELECT(1328,804), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(2576,1560), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(2576,1560), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*), ABISELECT(2576,1560), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C13*), ABISELECT(2576,1560), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C13*), ABISELECT(2576,1560), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*), 0, "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*), 0, "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C13*), 0, "S19558C16");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C18*), ABISELECT(560,324), "S19558C16");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C18*), ABISELECT(560,324), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*), ABISELECT(2800,1704), "S19558C16");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*), ABISELECT(2800,1704), "S19558C16");
    check_base_class_offset(lv, (S19558C13*)(S19558C18*), ABISELECT(2800,1704), "S19558C16");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*), ABISELECT(688,400), "S19558C16");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*), ABISELECT(688,400), "S19558C16");
    check_base_class_offset(lv, (S19558C10*)(S19558C19*)(S19558C18*), ABISELECT(688,400), "S19558C16");
    check_base_class_offset(lv, (S19558C19*)(S19558C18*), ABISELECT(688,400), "S19558C16");
    check_base_class_offset(lv, (S19558C18*), ABISELECT(560,324), "S19558C16");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(3360,2028), "S19558C16");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(3360,2028), "S19558C16");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(3360,2028), "S19558C16");
    check_base_class_offset(lv, (S19558C8*)(S19558C7*), ABISELECT(3360,2028), "S19558C16");
    check_base_class_offset(lv, (S19558C7*), ABISELECT(3360,2028), "S19558C16");
    set_bf_and_test(lv, s19558c16f0, ABISELECT(976,596), 0, 4, 1, "S19558C16");
    set_bf_and_test(lv, s19558c16f0, ABISELECT(976,596), 0, 4, hide_sll(1LL<<3), "S19558C16");
    set_bf_and_test(lv, s19558c16f1, ABISELECT(976,596), 4, 12, 1, "S19558C16");
    set_bf_and_test(lv, s19558c16f1, ABISELECT(976,596), 4, 12, hide_sll(1LL<<11), "S19558C16");
    check_field_offset(lv, s19558c16f2, ABISELECT(980,600), "S19558C16.s19558c16f2");
    check_field_offset(lv, s19558c16f3, ABISELECT(984,604), "S19558C16.s19558c16f3");
    test_class_info(&lv, &cd_S19558C16);
    dp->~S19558C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C16(Test_S19558C16, "S19558C16", ABISELECT(4080,2460));

#else // __cplusplus

extern void _ZN9S19558C16C1Ev();
extern void _ZN9S19558C16D2Ev();
Name_Map name_map_S19558C16[] = {
  NSPAIR(_ZN9S19558C16C1Ev),
  NSPAIR(_ZN9S19558C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
extern Class_Descriptor cd_S19558C17;
extern VTBL_ENTRY _ZTI9S19558C17[];
extern  VTBL_ENTRY _ZTV9S19558C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C17[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C19;
extern VTBL_ENTRY _ZTI9S19558C19[];
extern  VTBL_ENTRY _ZTV9S19558C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C19[];
extern Class_Descriptor cd_S19558C18;
extern VTBL_ENTRY _ZTI9S19558C18[];
extern  VTBL_ENTRY _ZTV9S19558C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C18[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
static Base_Class bases_S19558C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(1200,728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(1200,728), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(992,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19558C9,    ABISELECT(992,608), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C4,    ABISELECT(1328,804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1344,812), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1344,812), //bcp->offset
    69, //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
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2496,1516), //bcp->offset
    102, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1776,1076), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(1776,1076), //bcp->offset
    89, //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
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C4,    ABISELECT(2560,1552), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(1904,1152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1904,1152), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(1552,932), //bcp->offset
    76, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19558C17,    ABISELECT(1328,804), //bcp->offset
    55, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(2576,1560), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(2576,1560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(2576,1560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(2576,1560), //bcp->offset
    114, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19558C13,    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
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(560,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
    36, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(560,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
    37, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2800,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(2800,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(2800,1704), //bcp->offset
    128, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(688,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(688,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(688,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19558C19,    ABISELECT(688,400), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19558C18,    ABISELECT(560,324), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(3360,2028), //bcp->offset
    145, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C16[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C16D1Ev();
extern void _ZN9S19558C16D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN9S19558C163v13Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn560_N9S19558C16D1Ev,_ZThn324_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn560_N9S19558C16D0Ev,_ZThn324_N9S19558C16D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn688_N9S19558C16D1Ev,_ZThn400_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn688_N9S19558C16D0Ev,_ZThn400_N9S19558C16D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C16D1Ev,_ZTv0_n24_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn992_N9S19558C16D1Ev,_ZThn608_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C16D0Ev,_ZTv0_n24_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn992_N9S19558C16D0Ev,_ZThn608_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C16D1Ev,_ZTv0_n20_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C16D1Ev,_ZThn728_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C16D0Ev,_ZTv0_n20_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C16D0Ev,_ZThn728_N9S19558C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn1328_N9S19558C16D1Ev,_ZThn804_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn1328_N9S19558C16D0Ev,_ZThn804_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn16_n56_N9S19558C16D1Ev,_ZTvn8_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N9S19558C16D0Ev,_ZTvn8_n28_N9S19558C16D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn224_n56_N9S19558C16D1Ev,_ZTvn128_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N9S19558C16D0Ev,_ZTvn128_n28_N9S19558C16D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn448_n56_N9S19558C16D1Ev,_ZTvn272_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N9S19558C16D0Ev,_ZTvn272_n28_N9S19558C16D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn576_n56_N9S19558C16D1Ev,_ZTvn348_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N9S19558C16D0Ev,_ZTvn348_n28_N9S19558C16D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S19558C16D1Ev,_ZTv0_n16_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn2560_N9S19558C16D1Ev,_ZThn1552_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C16D0Ev,_ZTv0_n16_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn2560_N9S19558C16D0Ev,_ZThn1552_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn2576_N9S19558C16D1Ev,_ZThn1560_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn2576_N9S19558C16D0Ev,_ZThn1560_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn2800_N9S19558C16D1Ev,_ZThn1704_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn2800_N9S19558C16D0Ev,_ZThn1704_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn3360_N9S19558C16D1Ev,_ZThn2028_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn3360_N9S19558C16D0Ev,_ZThn2028_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY vtc_S19558C16[] = {
  ABISELECT(3360,2028),
  ABISELECT(2800,1704),
  ABISELECT(2560,1552),
  ABISELECT(1328,804),
  ABISELECT(2496,1516),
  ABISELECT(992,608),
  ABISELECT(2576,1560),
  ABISELECT(1200,728),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  (VTBL_ENTRY)&_ZN9S19558C163v13Ev,
  ABISELECT(1936,1192),
  ABISELECT(432,284),
  ABISELECT(640,404),
  ABISELECT(2016,1236),
  ABISELECT(2240,1380),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N9S19558C16D1Ev,_ZThn324_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N9S19558C16D0Ev,_ZThn324_N9S19558C16D0Ev),
  ABISELECT(304,208),
  ABISELECT(512,328),
  ABISELECT(-688,-400),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N9S19558C16D1Ev,_ZThn400_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N9S19558C16D0Ev,_ZThn400_N9S19558C16D0Ev),
  ABISELECT(-992,-608),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-992,-608),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C16D1Ev,_ZTv0_n24_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C16D0Ev,_ZTv0_n24_N9S19558C16D0Ev),
  ABISELECT(-1200,-728),
  0,
  0,
  ABISELECT(-1200,-728),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C16D1Ev,_ZTv0_n20_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C16D0Ev,_ZTv0_n20_N9S19558C16D0Ev),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-1328,-804),
  ABISELECT(1232,748),
  ABISELECT(-336,-196),
  ABISELECT(1168,712),
  ABISELECT(-128,-76),
  ABISELECT(-1328,-804),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev),
  ABISELECT(-144,-84),
  ABISELECT(-1344,-812),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S19558C16D1Ev,_ZTvn8_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S19558C16D0Ev,_ZTvn8_n28_N9S19558C16D0Ev),
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  ABISELECT(-1552,-932),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N9S19558C16D1Ev,_ZTvn128_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N9S19558C16D0Ev,_ZTvn128_n28_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-1776,-1076),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N9S19558C16D1Ev,_ZTvn272_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N9S19558C16D0Ev,_ZTvn272_n28_N9S19558C16D0Ev),
  ABISELECT(-704,-424),
  ABISELECT(-1904,-1152),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N9S19558C16D1Ev,_ZTvn348_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N9S19558C16D0Ev,_ZTvn348_n28_N9S19558C16D0Ev),
  0,
  0,
  ABISELECT(-2496,-1516),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  ABISELECT(-2560,-1552),
  ABISELECT(-1360,-824),
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C16D1Ev,_ZTv0_n16_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C16D0Ev,_ZTv0_n16_N9S19558C16D0Ev),
  0,
  ABISELECT(-2576,-1560),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(-2576,-1560),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  0,
  0,
  ABISELECT(-2800,-1704),
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-1808,-1096),
  ABISELECT(-224,-144),
  ABISELECT(-1600,-976),
  ABISELECT(-2800,-1704),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  0,
  0,
  ABISELECT(-3360,-2028),
  0,
  0,
  ABISELECT(-864,-512),
  ABISELECT(-2368,-1420),
  ABISELECT(-2160,-1300),
  ABISELECT(-3360,-2028),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern VTBL_ENTRY _ZTV9S19558C16[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__A__9S19558C16[] = {
  ABISELECT(2496,1516),
  ABISELECT(992,608),
  ABISELECT(2576,1560),
  ABISELECT(1200,728),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C13__A5__9S19558C16[] = {
  ABISELECT(1200,728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn1200_N8S19558C9D1Ev,_ZThn728_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn1200_N8S19558C9D0Ev,_ZThn728_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C13__A5__9S19558C16[] = {
  ABISELECT(-1200,-728),
  0,
  0,
  ABISELECT(-1200,-728),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn2576_N9S19558C13D1Ev,_ZThn1560_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn2576_N9S19558C13D0Ev,_ZThn1560_N9S19558C13D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C13__A__9S19558C16[] = {
  0,
  ABISELECT(-2576,-1560),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(-2576,-1560),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C13D1Ev,_ZThn728_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn1200_N9S19558C13D0Ev,_ZThn728_N9S19558C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C13__A__9S19558C16[] = {
  ABISELECT(-1200,-728),
  0,
  0,
  ABISELECT(-1200,-728),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZThn992_N9S19558C13D1Ev,_ZThn608_N9S19558C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
extern void ABISELECT(_ZThn992_N9S19558C13D0Ev,_ZThn608_N9S19558C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C13__A__9S19558C16[] = {
  ABISELECT(-992,-608),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-992,-608),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C13__A__9S19558C16[] = {
  0,
  0,
  ABISELECT(-2496,-1516),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C18D1Ev();
extern void _ZN9S19558C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C18__9S19558C16[] = {
  ABISELECT(1936,1192),
  ABISELECT(432,284),
  ABISELECT(640,404),
  ABISELECT(2016,1236),
  ABISELECT(2240,1380),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C19D1Ev();
extern void _ZN9S19558C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C199S19558C18__9S19558C16[] = {
  ABISELECT(304,208),
  ABISELECT(512,328),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C109S19558C199S19558C18__A2__9S19558C16[] = {
  ABISELECT(512,328),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C109S19558C199S19558C18__A7__9S19558C16[] = {
  ABISELECT(512,328),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn512_N8S19558C9D1Ev,_ZThn328_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn512_N8S19558C9D0Ev,_ZThn328_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C109S19558C199S19558C18__A7__9S19558C16[] = {
  ABISELECT(-512,-328),
  0,
  0,
  ABISELECT(-512,-328),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn512_N9S19558C10D1Ev,_ZThn328_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn512_N9S19558C10D0Ev,_ZThn328_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C109S19558C199S19558C18__A2__9S19558C16[] = {
  ABISELECT(-512,-328),
  0,
  0,
  ABISELECT(-512,-328),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev)();
extern void ABISELECT(_ZThn512_N9S19558C19D1Ev,_ZThn328_N9S19558C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev)();
extern void ABISELECT(_ZThn512_N9S19558C19D0Ev,_ZThn328_N9S19558C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C199S19558C18__9S19558C16[] = {
  ABISELECT(-512,-328),
  0,
  0,
  ABISELECT(-512,-328),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev)();
extern void ABISELECT(_ZThn304_N9S19558C19D1Ev,_ZThn208_N9S19558C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev)();
extern void ABISELECT(_ZThn304_N9S19558C19D0Ev,_ZThn208_N9S19558C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C199S19558C18__9S19558C16[] = {
  ABISELECT(-304,-208),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-304,-208),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn2240_N9S19558C18D1Ev,_ZThn1380_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn2240_N9S19558C18D0Ev,_ZThn1380_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__9S19558C18__9S19558C16[] = {
  0,
  0,
  ABISELECT(-2240,-1380),
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-1808,-1096),
  ABISELECT(-224,-144),
  ABISELECT(-1600,-976),
  ABISELECT(-2240,-1380),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn2016_N9S19558C18D1Ev,_ZThn1236_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn2016_N9S19558C18D0Ev,_ZThn1236_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C18__9S19558C16[] = {
  0,
  ABISELECT(-2016,-1236),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(-2016,-1236),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn640_N9S19558C18D1Ev,_ZThn404_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn640_N9S19558C18D0Ev,_ZThn404_N9S19558C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__A1__9S19558C18__9S19558C16[] = {
  ABISELECT(-640,-404),
  0,
  0,
  ABISELECT(-640,-404),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn432_N9S19558C18D1Ev,_ZThn284_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn432_N9S19558C18D0Ev,_ZThn284_N9S19558C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C18__9S19558C16[] = {
  ABISELECT(-432,-284),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-432,-284),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__9S19558C18__9S19558C16[] = {
  0,
  0,
  ABISELECT(-1936,-1192),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C19__9S19558C18__9S19558C16[] = {
  ABISELECT(304,208),
  ABISELECT(512,328),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C16[] = {
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn208_N8S19558C9D1Ev,_ZThn120_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn208_N8S19558C9D0Ev,_ZThn120_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C16[] = {
  ABISELECT(-208,-120),
  0,
  0,
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN9S19558C17D1Ev();
extern void _ZN9S19558C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C17__9S19558C16[] = {
  ABISELECT(1232,748),
  ABISELECT(-336,-196),
  ABISELECT(1168,712),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN9S19558C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C17D0Ev,
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C49S19558C17__9S19558C16[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C49S19558C17__9S19558C16[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C17__A1__9S19558C16[] = {
  ABISELECT(-144,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C17__A1__9S19558C16[] = {
  ABISELECT(144,84),
  0,
  0,
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A2__9S19558C16[] = {
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A2__9S19558C16[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(560,324),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(560,324),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__9S19558C16[] = {
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16[] = {
  ABISELECT(-704,-424),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16[] = {
  ABISELECT(704,424),
  0,
  0,
  ABISELECT(704,424),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__9S19558C16[] = {
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(560,324),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(560,324),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn1008_N9S19558C15D1Ev,_ZThn620_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn1008_N9S19558C15D0Ev,_ZThn620_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(-1008,-620),
  ABISELECT(-1360,-824),
  ABISELECT(-1008,-620),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(-704,-424),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C149S19558C17__9S19558C16[] = {
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(560,324),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(560,324),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn1008_N9S19558C14D1Ev,_ZThn620_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn1008_N9S19558C14D0Ev,_ZThn620_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(-1008,-620),
  ABISELECT(-1360,-824),
  ABISELECT(-1008,-620),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__9S19558C16[] = {
  ABISELECT(-704,-424),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C17__9S19558C16[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C17__9S19558C16[] = {
  ABISELECT(-144,-84),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C17__9S19558C16[] = {
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A2__9S19558C17__9S19558C16[] = {
  0,
  0,
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C17__9S19558C16[] = {
  ABISELECT(336,196),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(336,196),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn1232_N9S19558C17D1Ev,_ZThn748_N9S19558C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev)();
extern void ABISELECT(_ZThn1232_N9S19558C17D0Ev,_ZThn748_N9S19558C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C17__9S19558C16[] = {
  ABISELECT(-1232,-748),
  ABISELECT(-1360,-824),
  ABISELECT(-1232,-748),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__9S19558C16[] = {
  ABISELECT(-704,-424),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev),
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C16[] = {
  ABISELECT(-1360,-824),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__A1__9S19558C16[] = {
  ABISELECT(1360,824),
  0,
  0,
  ABISELECT(1360,824),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__9S19558C16[] = {
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__A1__9S19558C16[] = {
  ABISELECT(-1376,-832),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A4__9S19558C16[] = {
  ABISELECT(-1376,-832),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A4__9S19558C16[] = {
  ABISELECT(1376,832),
  0,
  0,
  ABISELECT(1376,832),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__A1__9S19558C16[] = {
  ABISELECT(1376,832),
  0,
  0,
  ABISELECT(1376,832),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__A1__9S19558C16[] = {
  ABISELECT(1376,832),
  0,
  0,
  ABISELECT(1376,832),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__A1__9S19558C16[] = {
  ABISELECT(1584,952),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(1584,952),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__A1__9S19558C16[] = {
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__A1__9S19558C16[] = {
  ABISELECT(-304,-188),
  ABISELECT(-1808,-1096),
  ABISELECT(-224,-144),
  ABISELECT(-1600,-976),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C13__A6__9S19558C16[] = {
  ABISELECT(-1600,-976),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C13__A6__9S19558C16[] = {
  ABISELECT(1600,976),
  0,
  0,
  ABISELECT(1600,976),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C13__A1__9S19558C16[] = {
  0,
  ABISELECT(224,144),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(224,144),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C13__A1__9S19558C16[] = {
  ABISELECT(1600,976),
  0,
  0,
  ABISELECT(1600,976),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C13__A1__9S19558C16[] = {
  ABISELECT(1808,1096),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(1808,1096),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C13__A1__9S19558C16[] = {
  0,
  0,
  ABISELECT(304,188),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__9S19558C16[] = {
  ABISELECT(-864,-512),
  ABISELECT(-2368,-1420),
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C7__A2__9S19558C16[] = {
  ABISELECT(-864,-512),
  ABISELECT(-2368,-1420),
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C7__A3__9S19558C16[] = {
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A8__9S19558C16[] = {
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A8__9S19558C16[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__A3__9S19558C16[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C7__A2__9S19558C16[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C7__A2__9S19558C16[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C7__A2__9S19558C16[] = {
  0,
  0,
  ABISELECT(864,512),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C7__9S19558C16[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7__9S19558C16[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C7__9S19558C16[] = {
  0,
  0,
  ABISELECT(864,512),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
static  VTT_ENTRY vtt_S19558C16[] = {
  {&(_ZTV9S19558C16[10]),  10,161},
  {&(_tg__ZTV9S19558C13__A__9S19558C16[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C13__A5__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C13__A5__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C13__A__9S19558C16[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C13__A__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C13__A__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C13__A__9S19558C16[4]),  4,6},
  {&(_tg__ZTV9S19558C18__9S19558C16[7]),  7,11},
  {&(_tg__ZTV9S19558C199S19558C18__9S19558C16[4]),  4,8},
  {&(_tg__ZTV9S19558C109S19558C199S19558C18__A2__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C109S19558C199S19558C18__A7__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C109S19558C199S19558C18__A7__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C109S19558C199S19558C18__A2__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C199S19558C18__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A1__9S19558C199S19558C18__9S19558C16[6]),  6,10},
  {&(_tg__ZTV9S19558C13__9S19558C18__9S19558C16[11]),  11,17},
  {&(_tg__ZTV8S19558C8__9S19558C18__9S19558C16[9]),  9,14},
  {&(_tg__ZTV8S19558C5__A1__9S19558C18__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C18__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__9S19558C18__9S19558C16[4]),  4,6},
  {&(_tg__ZTV9S19558C19__9S19558C18__9S19558C16[4]),  4,8},
  {&(_ZTV9S19558C16[42]),  42,161},
  {&(_ZTV9S19558C16[51]),  51,161},
  {&(_ZTV9S19558C16[67]),  67,161},
  {&(_ZTV9S19558C16[72]),  72,161},
  {&(_ZTV9S19558C16[82]),  82,161},
  {&(_ZTV9S19558C16[106]),  106,161},
  {&(_ZTV9S19558C16[91]),  91,161},
  {&(_ZTV9S19558C16[112]),  112,161},
  {&(_ZTV9S19558C16[98]),  98,161},
  {&(_ZTV9S19558C16[123]),  123,161},
  {&(_ZTV9S19558C16[24]),  24,161},
  {&(_ZTV9S19558C16[139]),  139,161},
  {&(_ZTV9S19558C16[32]),  32,161},
  {&(_ZTV9S19558C16[155]),  155,161},
  {&(_tg__ZTV8S19558C9__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C16[5]),  5,9},
  {&(_tg__ZTV9S19558C17__9S19558C16[6]),  6,8},
  {&(_tg__ZTV8S19558C49S19558C17__9S19558C16[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C49S19558C17__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C99S19558C17__A1__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C17__A1__9S19558C16[5]),  5,9},
  {&(_tg__ZTV9S19558C149S19558C17__9S19558C16[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C149S19558C17__9S19558C16[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C149S19558C17__9S19558C16[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A2__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A2__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C149S19558C17__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C149S19558C17__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C149S19558C17__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C149S19558C17__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__9S19558C17__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A__9S19558C17__9S19558C16[3]),  3,7},
  {&(_tg__ZTV9S19558C14__9S19558C17__9S19558C16[6]),  6,13},
  {&(_tg__ZTV8S19558C6__A2__9S19558C17__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A1__9S19558C17__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C4__A1__9S19558C17__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C4__A1__9S19558C16[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__A1__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C8__A1__9S19558C16[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__A1__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A4__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A4__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__A1__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__A1__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__A1__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__A1__9S19558C16[4]),  4,6},
  {&(_tg__ZTV9S19558C13__A1__9S19558C16[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C13__A6__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C13__A6__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C13__A1__9S19558C16[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C13__A1__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C13__A1__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C13__A1__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C7__9S19558C16[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C7__A2__9S19558C16[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C7__A3__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A8__9S19558C16[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A8__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__A3__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C7__A2__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C7__A2__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C7__A2__9S19558C16[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C7__9S19558C16[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C7__9S19558C16[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C7__9S19558C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19558C16[];
extern  VTBL_ENTRY _ZTV9S19558C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C16[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N9S19558C17D0Ev,_ZThn748_N9S19558C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N9S19558C17D1Ev,_ZThn748_N9S19558C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N9S19558C14D0Ev,_ZThn620_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N9S19558C14D1Ev,_ZThn620_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N9S19558C15D0Ev,_ZThn620_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N9S19558C15D1Ev,_ZThn620_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19558C18D0Ev,_ZThn284_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19558C18D1Ev,_ZThn284_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19558C18D0Ev,_ZThn404_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19558C18D1Ev,_ZThn404_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S19558C18D0Ev,_ZThn1236_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S19558C18D1Ev,_ZThn1236_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N9S19558C18D0Ev,_ZThn1380_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N9S19558C18D1Ev,_ZThn1380_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19558C19D0Ev,_ZThn208_N9S19558C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19558C19D1Ev,_ZThn208_N9S19558C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N9S19558C19D0Ev,_ZThn328_N9S19558C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N9S19558C19D1Ev,_ZThn328_N9S19558C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N9S19558C10D0Ev,_ZThn328_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N9S19558C10D1Ev,_ZThn328_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C13D0Ev,_ZThn608_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C13D1Ev,_ZThn608_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C13D0Ev,_ZThn728_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C13D1Ev,_ZThn728_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N9S19558C13D0Ev,_ZThn1560_N9S19558C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N9S19558C13D1Ev,_ZThn1560_N9S19558C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19558C9D0Ev,_ZThn120_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19558C9D0Ev,_ZThn328_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S19558C9D0Ev,_ZThn728_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19558C9D1Ev,_ZThn120_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S19558C9D1Ev,_ZThn328_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S19558C9D1Ev,_ZThn728_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S19558C16D0Ev,_ZThn1704_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N9S19558C16D1Ev,_ZThn1704_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N9S19558C16D0Ev,_ZThn2028_N9S19558C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N9S19558C16D0Ev,_ZThn1560_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N9S19558C16D1Ev,_ZThn2028_N9S19558C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N9S19558C16D1Ev,_ZThn1560_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C16D0Ev,_ZTv0_n16_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19558C16D0Ev,_ZThn1552_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C16D1Ev,_ZTv0_n16_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19558C16D1Ev,_ZThn1552_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N9S19558C16D0Ev,_ZThn804_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N9S19558C16D1Ev,_ZThn804_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C16D0Ev,_ZTv0_n20_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C16D0Ev,_ZThn728_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C16D1Ev,_ZTv0_n20_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N9S19558C16D1Ev,_ZThn728_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C16D0Ev,_ZTv0_n24_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C16D0Ev,_ZThn608_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C16D1Ev,_ZTv0_n24_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C16D1Ev,_ZThn608_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C16 = {  "S19558C16", // class name
  bases_S19558C16, 42,
  &(vtc_S19558C16[0]), // expected_vtbl_contents
  &(vtt_S19558C16[0]), // expected_vtt_contents
  ABISELECT(4080,2460), // object size
  NSPAIRA(_ZTI9S19558C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19558C16),161, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C16),101, //virtual table table var
  42, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C2  : S19558C3 , virtual S19558C8 , virtual S19558C12 , S19558C10 , virtual S19558C16 {
  long double s19558c2f0;
  int s19558c2f1;
  virtual  ~S19558C2(); // _ZN8S19558C2D2Ev
  virtual void  v14(); // _ZN8S19558C23v14Ev
  S19558C2(); // tgen
};
//SIG(-1 S19558C2) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC5 VBC6{ BC7{ VBC4 VBC8{ VBC4 BC5 vd Fi FC4 Fi} BC9{ BC8 vd Fi Fp Fi[2]} VBC5 vd v4 FU10{ m Fi[2] FL}} vd v5 FD[3] Fi Fc FC8 Fi:9 Fc[5] Fi Fp[9]} BC7 BC4 vd v6 v7 Fc:0 Fc Fi:10 Fc Fi} VBC7 VBC11{ BC2 BC8 BC6 BC12{ VBC7 BC8 vd v8 v9 Fc FC8 Fc} BC13{ BC14{ VBC5 BC7 BC4 VBC3 BC8 vd v10 Fi Fi Fi} vd v11 Fi Fl Fi FL} vd v12 Fc Fc Fi FD[4] Fp FL:54} BC9 VBC15{ VBC8 VBC16{ BC3 BC8 BC13 FC9} BC12 BC17{ BC4 VBC12 BC18{ BC9 VBC8 vd Fi Fi} Fi Fi[9] FU19{ m Fi FD Fi:32 Fp Fp}} VBC6 vd v13 Fi:4 Fi:12 Fi Fc} vd v1 FD Fi}


 S19558C2 ::~S19558C2(){ note_dtor("S19558C2", this);}
void  S19558C2 ::v14(){vfunc_called(this, "_ZN8S19558C23v14Ev");}
S19558C2 ::S19558C2(){ note_ctor("S19558C2", this);} // tgen

static void Test_S19558C2()
{
  extern Class_Descriptor cd_S19558C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(462,1115)];
    init_test(&cd_S19558C2, buf);
    S19558C2 *dp, &lv = *(dp=new (buf) S19558C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7376,4456), "sizeof(S19558C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C2)");
    /*is_ambiguous_... S19558C2::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C3*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C17::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*)(S19558C17*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C17*), ABISELECT(704,424), "S19558C2");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(704,424), "S19558C2");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*)(S19558C16*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*), ABISELECT(704,424), "S19558C2");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(704,424), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C3*), ABISELECT(680,416), "S19558C2");
    check_base_class_offset(lv, (S19558C4*)(S19558C3*)(S19558C12*), ABISELECT(680,416), "S19558C2");
    check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(680,416), "S19558C2");
    check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(680,416), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C3*), 0, "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C3*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C16::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C16*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C19::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(1552,932), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(832,500), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(832,500), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(832,500), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C3*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(1760,1052), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C7*), ABISELECT(832,500), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C7*)(S19558C3*), ABISELECT(832,500), "S19558C2");
    check_base_class_offset(lv, (S19558C7*)(S19558C3*)(S19558C12*), ABISELECT(832,500), "S19558C2");
    check_base_class_offset(lv, (S19558C7*)(S19558C16*), ABISELECT(832,500), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C3*), ABISELECT(64,36), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C3*), ABISELECT(288,180), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C3*), ABISELECT(288,180), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C3*), 0, "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(1824,1088), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(1824,1088), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*), ABISELECT(1824,1088), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C8*), ABISELECT(1824,1088), "S19558C2");
    check_base_class_offset(lv, (S19558C8*)(S19558C13*)(S19558C12*), ABISELECT(1824,1088), "S19558C2");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C13*)(S19558C16*), ABISELECT(1824,1088), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C13*), ABISELECT(1824,1088), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C3*)(S19558C12*), ABISELECT(2048,1232), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(2112,1268), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(2112,1268), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(2112,1268), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(2112,1268), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C3*)(S19558C12*), ABISELECT(2336,1412), "S19558C2");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C3*)(S19558C12*), ABISELECT(2336,1412), "S19558C2");
    check_base_class_offset(lv, (S19558C3*)(S19558C12*), ABISELECT(2048,1232), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C12*), ABISELECT(2480,1496), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C12*), ABISELECT(2480,1496), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(2688,1616), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(2688,1616), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(2688,1616), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(2688,1616), "S19558C2");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C7*)(S19558C12*), ABISELECT(2688,1616), "S19558C2");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*)(S19558C12*), ABISELECT(3408,2048), "S19558C2");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*)(S19558C12*), ABISELECT(3408,2048), "S19558C2");
    check_base_class_offset(lv, (S19558C13*)(S19558C12*), ABISELECT(3408,2048), "S19558C2");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3968,2372), "S19558C2");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3968,2372), "S19558C2");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3968,2372), "S19558C2");
    check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3968,2372), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(4192,2516), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(4192,2516), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(4320,2592), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(4320,2592), "S19558C2");
    check_base_class_offset(lv, (S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3968,2372), "S19558C2");
    check_base_class_offset(lv, (S19558C14*)(S19558C12*), ABISELECT(3968,2372), "S19558C2");
    check_base_class_offset(lv, (S19558C12*), ABISELECT(2048,1232), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*), ABISELECT(432,264), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*), ABISELECT(432,264), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C10*), ABISELECT(432,264), "S19558C2");
    /*is_ambiguous_... S19558C17::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C17*), ABISELECT(5648,3420), "S19558C2");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C17*), ABISELECT(5664,3428), "S19558C2");
    /*is_ambiguous_... S19558C17::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C17*), ABISELECT(5664,3428), "S19558C2");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(5872,3548), "S19558C2");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(5872,3548), "S19558C2");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(5872,3548), "S19558C2");
    check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(5872,3548), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(6096,3692), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(6096,3692), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(6224,3768), "S19558C2");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(6224,3768), "S19558C2");
    check_base_class_offset(lv, (S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(5872,3548), "S19558C2");
    check_base_class_offset(lv, (S19558C14*)(S19558C17*), ABISELECT(5872,3548), "S19558C2");
    check_base_class_offset(lv, (S19558C17*)(S19558C16*), ABISELECT(5648,3420), "S19558C2");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*)(S19558C16*), ABISELECT(4656,2812), "S19558C2");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*)(S19558C16*), ABISELECT(4656,2812), "S19558C2");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C13*)(S19558C16*), ABISELECT(4656,2812), "S19558C2");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C18*)(S19558C16*), ABISELECT(5216,3136), "S19558C2");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C18*)(S19558C16*), ABISELECT(5216,3136), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*), ABISELECT(6816,4132), "S19558C2");
    /*is_ambiguous_... S19558C2::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*), ABISELECT(6816,4132), "S19558C2");
    check_base_class_offset(lv, (S19558C13*)(S19558C18*)(S19558C16*), ABISELECT(6816,4132), "S19558C2");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(5344,3212), "S19558C2");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(5344,3212), "S19558C2");
    check_base_class_offset(lv, (S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(5344,3212), "S19558C2");
    check_base_class_offset(lv, (S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(5344,3212), "S19558C2");
    check_base_class_offset(lv, (S19558C18*)(S19558C16*), ABISELECT(5216,3136), "S19558C2");
    check_base_class_offset(lv, (S19558C16*), ABISELECT(4656,2812), "S19558C2");
    check_field_offset(lv, s19558c2f0, ABISELECT(656,400), "S19558C2.s19558c2f0");
    check_field_offset(lv, s19558c2f1, ABISELECT(672,412), "S19558C2.s19558c2f1");
    test_class_info(&lv, &cd_S19558C2);
    dp->~S19558C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C2(Test_S19558C2, "S19558C2", ABISELECT(7376,4456));

#else // __cplusplus

extern void _ZN8S19558C2C1Ev();
extern void _ZN8S19558C2D2Ev();
Name_Map name_map_S19558C2[] = {
  NSPAIR(_ZN8S19558C2C1Ev),
  NSPAIR(_ZN8S19558C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C3;
extern VTBL_ENTRY _ZTI8S19558C3[];
extern  VTBL_ENTRY _ZTV8S19558C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C3[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C3;
extern VTBL_ENTRY _ZTI8S19558C3[];
extern  VTBL_ENTRY _ZTV8S19558C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C3[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
extern Class_Descriptor cd_S19558C12;
extern VTBL_ENTRY _ZTI9S19558C12[];
extern  VTBL_ENTRY _ZTV9S19558C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C12[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
extern Class_Descriptor cd_S19558C17;
extern VTBL_ENTRY _ZTI9S19558C17[];
extern  VTBL_ENTRY _ZTV9S19558C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C17[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C19;
extern VTBL_ENTRY _ZTI9S19558C19[];
extern  VTBL_ENTRY _ZTV9S19558C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C19[];
extern Class_Descriptor cd_S19558C18;
extern VTBL_ENTRY _ZTI9S19558C18[];
extern  VTBL_ENTRY _ZTV9S19558C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C18[];
extern Class_Descriptor cd_S19558C16;
extern VTBL_ENTRY _ZTI9S19558C16[];
extern  VTBL_ENTRY _ZTV9S19558C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C16[];
static Base_Class bases_S19558C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(704,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(704,424), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19558C4,    ABISELECT(680,416), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    73, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(1552,932), //bcp->offset
    73, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(832,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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(832,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(832,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1760,1052), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C8,    ABISELECT(832,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(832,500), //bcp->offset
    57, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    74, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    75, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    76, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(64,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    77, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    78, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(288,180), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    79, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C3,    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
    80, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(1824,1088), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(1824,1088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(1824,1088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(1824,1088), //bcp->offset
    89, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(2048,1232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2112,1268), //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(2112,1268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(2112,1268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(2112,1268), //bcp->offset
    130, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2336,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(2336,1412), //bcp->offset
    140, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19558C3,    ABISELECT(2048,1232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2480,1496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(2480,1496), //bcp->offset
    146, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2688,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(2688,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(2688,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(2688,1616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(2688,1616), //bcp->offset
    153, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(3408,2048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(3408,2048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(3408,2048), //bcp->offset
    164, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(3968,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
    34, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(3968,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(3968,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    111, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(3968,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(4192,2516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(4192,2516), //bcp->offset
    189, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(4320,2592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(4320,2592), //bcp->offset
    195, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(3968,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(3968,2372), //bcp->offset
    176, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C12,    ABISELECT(2048,1232), //bcp->offset
    103, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(432,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    81, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(432,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    82, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(432,264), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    83, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C4,    ABISELECT(5648,3420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    179, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(5664,3428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(5664,3428), //bcp->offset
    258, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    181, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(5872,3548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(5872,3548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    187, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(5872,3548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    186, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(5872,3548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    185, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(6096,3692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    63, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(6096,3692), //bcp->offset
    278, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(6224,3768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(6224,3768), //bcp->offset
    284, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    193, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(5872,3548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    184, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(5872,3548), //bcp->offset
    265, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    183, //bcp->base_subarray_index_in_construction_vtbl_array
    57, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S19558C17,    ABISELECT(5648,3420), //bcp->offset
    244, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    178, //bcp->base_subarray_index_in_construction_vtbl_array
    58, //init_seq
    82, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(4656,2812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    62, //init_seq
    70, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(4656,2812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    144, //bcp->base_subarray_index_in_construction_vtbl_array
    63, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(4656,2812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    143, //bcp->base_subarray_index_in_construction_vtbl_array
    64, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(5216,3136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    65, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(5216,3136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    66, //init_seq
    81, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(6816,4132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    59, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(6816,4132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    213, //bcp->base_subarray_index_in_construction_vtbl_array
    60, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(6816,4132), //bcp->offset
    291, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    212, //bcp->base_subarray_index_in_construction_vtbl_array
    61, //init_seq
    81, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(5344,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
    67, //init_seq
    78, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(5344,3212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    68, //init_seq
    79, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(5344,3212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    152, //bcp->base_subarray_index_in_construction_vtbl_array
    69, //init_seq
    80, //immediately_derived
  0, 0},
  {&cd_S19558C19,    ABISELECT(5344,3212), //bcp->offset
    236, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    151, //bcp->base_subarray_index_in_construction_vtbl_array
    70, //init_seq
    81, //immediately_derived
  0, 0},
  {&cd_S19558C18,    ABISELECT(5216,3136), //bcp->offset
    225, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    150, //bcp->base_subarray_index_in_construction_vtbl_array
    71, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S19558C16,    ABISELECT(4656,2812), //bcp->offset
    202, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    142, //bcp->base_subarray_index_in_construction_vtbl_array
    72, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19558C2[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C2D1Ev();
extern void _ZN8S19558C2D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN8S19558C23v14Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C2D1Ev,_ZThn36_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C2D0Ev,_ZThn36_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn288_N8S19558C2D1Ev,_ZThn180_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn288_N8S19558C2D0Ev,_ZThn180_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn432_N8S19558C2D1Ev,_ZThn264_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn432_N8S19558C2D0Ev,_ZThn264_N8S19558C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19558C2D1Ev,_ZTv0_n16_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn680_N8S19558C2D1Ev,_ZThn416_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19558C2D0Ev,_ZTv0_n16_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn680_N8S19558C2D0Ev,_ZThn416_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C2D1Ev,_ZTv0_n20_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn704_N8S19558C2D1Ev,_ZThn424_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C2D0Ev,_ZTv0_n20_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn704_N8S19558C2D0Ev,_ZThn424_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn832_N8S19558C2D1Ev,_ZThn500_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn832_N8S19558C2D0Ev,_ZThn500_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C2D1Ev,_ZTv0_n24_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C2D1Ev,_ZThn932_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C2D0Ev,_ZTv0_n24_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C2D0Ev,_ZThn932_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn1824_N8S19558C2D1Ev,_ZThn1088_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn1824_N8S19558C2D0Ev,_ZThn1088_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S19558C2D1Ev,_ZTv0_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn2048_N8S19558C2D1Ev,_ZThn1232_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19558C2D0Ev,_ZTv0_n44_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn2048_N8S19558C2D0Ev,_ZThn1232_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN9S19558C123v12Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn64_n88_N8S19558C2D1Ev,_ZTvn36_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn64_n88_N8S19558C2D0Ev,_ZTvn36_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn288_n88_N8S19558C2D1Ev,_ZTvn180_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn288_n88_N8S19558C2D0Ev,_ZTvn180_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn432_n88_N8S19558C2D1Ev,_ZTvn264_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn432_n88_N8S19558C2D0Ev,_ZTvn264_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn640_n88_N8S19558C2D1Ev,_ZTvn384_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn640_n88_N8S19558C2D0Ev,_ZTvn384_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn1360_n88_N8S19558C2D1Ev,_ZTvn816_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn1360_n88_N8S19558C2D0Ev,_ZTvn816_n44_N8S19558C2D0Ev)();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn1920_n88_N8S19558C2D1Ev,_ZTvn1140_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn1920_n88_N8S19558C2D0Ev,_ZTvn1140_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn2144_n88_N8S19558C2D1Ev,_ZTvn1284_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn2144_n88_N8S19558C2D0Ev,_ZTvn1284_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn2272_n88_N8S19558C2D1Ev,_ZTvn1360_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn2272_n88_N8S19558C2D0Ev,_ZTvn1360_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n104_N8S19558C2D1Ev,_ZTv0_n52_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn4656_N8S19558C2D1Ev,_ZThn2812_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19558C2D0Ev,_ZTv0_n52_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn4656_N8S19558C2D0Ev,_ZThn2812_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN9S19558C163v13Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn560_n104_N8S19558C2D1Ev,_ZTvn324_n52_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn560_n104_N8S19558C2D0Ev,_ZTvn324_n52_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn688_n104_N8S19558C2D1Ev,_ZTvn400_n52_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn688_n104_N8S19558C2D0Ev,_ZTvn400_n52_N8S19558C2D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19558C2D1Ev,_ZTv0_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn5648_N8S19558C2D1Ev,_ZThn3420_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19558C2D0Ev,_ZTv0_n28_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn5648_N8S19558C2D0Ev,_ZThn3420_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn16_n56_N8S19558C2D1Ev,_ZTvn8_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19558C2D0Ev,_ZTvn8_n28_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn224_n56_N8S19558C2D1Ev,_ZTvn128_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N8S19558C2D0Ev,_ZTvn128_n28_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn448_n56_N8S19558C2D1Ev,_ZTvn272_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N8S19558C2D0Ev,_ZTvn272_n28_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn576_n56_N8S19558C2D1Ev,_ZTvn348_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N8S19558C2D0Ev,_ZTvn348_n28_N8S19558C2D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19558C2D1Ev,_ZTv0_n36_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn6816_N8S19558C2D1Ev,_ZThn4132_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19558C2D0Ev,_ZTv0_n36_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn6816_N8S19558C2D0Ev,_ZThn4132_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY vtc_S19558C2[] = {
  ABISELECT(6816,4132),
  ABISELECT(5648,3420),
  ABISELECT(4656,2812),
  ABISELECT(2048,1232),
  ABISELECT(1824,1088),
  ABISELECT(1760,1052),
  ABISELECT(1552,932),
  ABISELECT(832,500),
  ABISELECT(704,424),
  ABISELECT(680,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19558C23v14Ev,
  ABISELECT(1696,1016),
  ABISELECT(1488,896),
  ABISELECT(640,388),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C2D1Ev,_ZThn36_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C2D0Ev,_ZThn36_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S19558C2D1Ev,_ZThn180_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N8S19558C2D0Ev,_ZThn180_N8S19558C2D0Ev),
  ABISELECT(272,160),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N8S19558C2D1Ev,_ZThn264_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N8S19558C2D0Ev,_ZThn264_N8S19558C2D0Ev),
  ABISELECT(-680,-416),
  ABISELECT(24,8),
  ABISELECT(-680,-416),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C2D1Ev,_ZTv0_n16_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C2D0Ev,_ZTv0_n16_N8S19558C2D0Ev),
  ABISELECT(-704,-424),
  0,
  0,
  ABISELECT(-704,-424),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C2D1Ev,_ZTv0_n20_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C2D0Ev,_ZTv0_n20_N8S19558C2D0Ev),
  0,
  0,
  ABISELECT(-832,-500),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-832,-500),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-1552,-932),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-932),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C2D1Ev,_ZTv0_n24_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C2D0Ev,_ZTv0_n24_N8S19558C2D0Ev),
  0,
  0,
  ABISELECT(-1760,-1052),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  0,
  ABISELECT(-1824,-1088),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-1824,-1088),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(1920,1140),
  ABISELECT(1920,1140),
  ABISELECT(1360,816),
  ABISELECT(1360,816),
  ABISELECT(640,384),
  0,
  ABISELECT(64,36),
  0,
  0,
  ABISELECT(-2048,-1232),
  0,
  0,
  ABISELECT(-224,-144),
  ABISELECT(-288,-180),
  ABISELECT(-496,-300),
  ABISELECT(-1216,-732),
  ABISELECT(-1344,-808),
  ABISELECT(-1368,-816),
  ABISELECT(-2048,-1232),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19558C2D1Ev,_ZTv0_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19558C2D0Ev,_ZTv0_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN9S19558C123v12Ev,
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19558C2D1Ev,_ZTvn36_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19558C2D0Ev,_ZTvn36_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-2336,-1412),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n88_N8S19558C2D1Ev,_ZTvn180_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n88_N8S19558C2D0Ev,_ZTvn180_n44_N8S19558C2D0Ev),
  ABISELECT(-1776,-1072),
  ABISELECT(-2480,-1496),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n88_N8S19558C2D1Ev,_ZTvn264_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n88_N8S19558C2D0Ev,_ZTvn264_n44_N8S19558C2D0Ev),
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  ABISELECT(-2688,-1616),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n88_N8S19558C2D1Ev,_ZTvn384_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n88_N8S19558C2D0Ev,_ZTvn384_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-1648,-996),
  ABISELECT(-1856,-1116),
  ABISELECT(-1584,-960),
  ABISELECT(-2704,-1624),
  ABISELECT(-3408,-2048),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1360_n88_N8S19558C2D1Ev,_ZTvn816_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1360_n88_N8S19558C2D0Ev,_ZTvn816_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  ABISELECT(-3968,-2372),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1920_n88_N8S19558C2D1Ev,_ZTvn1140_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1920_n88_N8S19558C2D0Ev,_ZTvn1140_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-4192,-2516),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2144_n88_N8S19558C2D1Ev,_ZTvn1284_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2144_n88_N8S19558C2D0Ev,_ZTvn1284_n44_N8S19558C2D0Ev),
  ABISELECT(-3616,-2168),
  ABISELECT(-4320,-2592),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2272_n88_N8S19558C2D1Ev,_ZTvn1360_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2272_n88_N8S19558C2D0Ev,_ZTvn1360_n44_N8S19558C2D0Ev),
  0,
  0,
  0,
  ABISELECT(-4656,-2812),
  0,
  0,
  ABISELECT(-3824,-2312),
  ABISELECT(2160,1320),
  ABISELECT(-3976,-2396),
  ABISELECT(992,608),
  ABISELECT(-2896,-1760),
  ABISELECT(-3104,-1880),
  ABISELECT(-2832,-1724),
  ABISELECT(-3952,-2388),
  ABISELECT(-4656,-2812),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19558C2D1Ev,_ZTv0_n52_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19558C2D0Ev,_ZTv0_n52_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  (VTBL_ENTRY)&_ZN9S19558C163v13Ev,
  ABISELECT(-3456,-2084),
  ABISELECT(-3664,-2204),
  ABISELECT(-4512,-2712),
  ABISELECT(-3392,-2048),
  ABISELECT(1600,996),
  ABISELECT(-5216,-3136),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn560_n104_N8S19558C2D1Ev,_ZTvn324_n52_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn560_n104_N8S19558C2D0Ev,_ZTvn324_n52_N8S19558C2D0Ev),
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  ABISELECT(-5344,-3212),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn688_n104_N8S19558C2D1Ev,_ZTvn400_n52_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn688_n104_N8S19558C2D0Ev,_ZTvn400_n52_N8S19558C2D0Ev),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-5648,-3420),
  ABISELECT(-4968,-3004),
  ABISELECT(-4096,-2488),
  ABISELECT(-3888,-2368),
  ABISELECT(-4944,-2996),
  ABISELECT(-5648,-3420),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C2D1Ev,_ZTv0_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C2D0Ev,_ZTv0_n28_N8S19558C2D0Ev),
  ABISELECT(-4960,-3004),
  ABISELECT(-5664,-3428),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19558C2D1Ev,_ZTvn8_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19558C2D0Ev,_ZTvn8_n28_N8S19558C2D0Ev),
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  ABISELECT(-5872,-3548),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N8S19558C2D1Ev,_ZTvn128_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N8S19558C2D0Ev,_ZTvn128_n28_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-6096,-3692),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S19558C2D1Ev,_ZTvn272_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S19558C2D0Ev,_ZTvn272_n28_N8S19558C2D0Ev),
  ABISELECT(-5520,-3344),
  ABISELECT(-6224,-3768),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S19558C2D1Ev,_ZTvn348_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S19558C2D0Ev,_ZTvn348_n28_N8S19558C2D0Ev),
  0,
  0,
  ABISELECT(-6816,-4132),
  0,
  0,
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  ABISELECT(-6816,-4132),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19558C2D1Ev,_ZTv0_n36_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19558C2D0Ev,_ZTv0_n36_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern VTBL_ENTRY _ZTV8S19558C2[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C3D1Ev();
extern void _ZN8S19558C3D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C3__8S19558C2[] = {
  ABISELECT(1760,1052),
  ABISELECT(1552,932),
  ABISELECT(832,500),
  ABISELECT(704,424),
  ABISELECT(680,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C3__A1__8S19558C2[] = {
  ABISELECT(1696,1016),
  ABISELECT(1488,896),
  ABISELECT(640,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C3__A1__8S19558C2[] = {
  ABISELECT(640,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C3__A2__8S19558C2[] = {
  ABISELECT(640,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn640_N8S19558C9D1Ev,_ZThn388_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn640_N8S19558C9D0Ev,_ZThn388_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C3__A2__8S19558C2[] = {
  ABISELECT(-640,-388),
  0,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn640_N9S19558C10D1Ev,_ZThn388_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn640_N9S19558C10D0Ev,_ZThn388_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C3__A1__8S19558C2[] = {
  ABISELECT(-640,-388),
  0,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn640_N8S19558C8D1Ev,_ZThn388_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn640_N8S19558C8D0Ev,_ZThn388_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C3__A1__8S19558C2[] = {
  ABISELECT(-640,-388),
  0,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn1488_N8S19558C8D1Ev,_ZThn896_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn1488_N8S19558C8D0Ev,_ZThn896_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C3__A1__8S19558C2[] = {
  ABISELECT(-1488,-896),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1488,-896),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C3__A1__8S19558C2[] = {
  0,
  0,
  ABISELECT(-1696,-1016),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn680_N8S19558C3D1Ev,_ZThn416_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn680_N8S19558C3D0Ev,_ZThn416_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C3__8S19558C2[] = {
  ABISELECT(-680,-416),
  ABISELECT(24,8),
  ABISELECT(-680,-416),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn704_N8S19558C3D1Ev,_ZThn424_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn704_N8S19558C3D0Ev,_ZThn424_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C3__8S19558C2[] = {
  ABISELECT(-704,-424),
  0,
  0,
  ABISELECT(-704,-424),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn832_N8S19558C3D1Ev,_ZThn500_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn832_N8S19558C3D0Ev,_ZThn500_N8S19558C3D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C3__8S19558C2[] = {
  0,
  0,
  ABISELECT(-832,-500),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-832,-500),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C3D1Ev,_ZThn932_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C3D0Ev,_ZThn932_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C3__8S19558C2[] = {
  ABISELECT(-1552,-932),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-932),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__8S19558C3__8S19558C2[] = {
  0,
  0,
  ABISELECT(-1760,-1052),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__8S19558C3__8S19558C2[] = {
  ABISELECT(1696,1016),
  ABISELECT(1488,896),
  ABISELECT(640,388),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C10__A6__8S19558C2[] = {
  ABISELECT(272,160),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C10__A10__8S19558C2[] = {
  ABISELECT(272,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn272_N8S19558C9D1Ev,_ZThn160_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn272_N8S19558C9D0Ev,_ZThn160_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C10__A10__8S19558C2[] = {
  ABISELECT(-272,-160),
  0,
  0,
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn272_N9S19558C10D1Ev,_ZThn160_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn272_N9S19558C10D0Ev,_ZThn160_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C10__A6__8S19558C2[] = {
  ABISELECT(-272,-160),
  0,
  0,
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C2[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__8S19558C2[] = {
  ABISELECT(-24,-8),
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C2[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C7__8S19558C2[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C7__8S19558C2[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C2[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__8S19558C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C7__8S19558C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C7__8S19558C2[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C7__8S19558C2[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C7__8S19558C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7__8S19558C2[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C7__8S19558C2[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C2[] = {
  ABISELECT(-848,-508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__8S19558C2[] = {
  ABISELECT(848,508),
  0,
  0,
  ABISELECT(848,508),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A2__8S19558C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__A2__8S19558C2[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A3__8S19558C2[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A3__8S19558C2[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__A2__8S19558C2[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__A2__8S19558C2[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__A2__8S19558C2[] = {
  ABISELECT(272,156),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__A2__8S19558C2[] = {
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C12D1Ev();
extern void _ZN9S19558C12D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN9S19558C123v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C12__8S19558C2[] = {
  ABISELECT(-224,-144),
  ABISELECT(-288,-180),
  ABISELECT(-496,-300),
  ABISELECT(-1216,-732),
  ABISELECT(-1344,-808),
  ABISELECT(-1368,-816),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN9S19558C123v12Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C3D1Ev();
extern void _ZN8S19558C3D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C39S19558C12__A1__8S19558C2[] = {
  ABISELECT(-288,-180),
  ABISELECT(-496,-300),
  ABISELECT(-1216,-732),
  ABISELECT(-1344,-808),
  ABISELECT(-1368,-816),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C39S19558C12__A3__8S19558C2[] = {
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C2[] = {
  ABISELECT(-1408,-844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C2[] = {
  ABISELECT(-1408,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C2[] = {
  ABISELECT(1408,844),
  0,
  0,
  ABISELECT(1408,844),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C2[] = {
  ABISELECT(1408,844),
  0,
  0,
  ABISELECT(1408,844),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C39S19558C12__A3__8S19558C2[] = {
  ABISELECT(1408,844),
  0,
  0,
  ABISELECT(1408,844),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C39S19558C12__A3__8S19558C2[] = {
  ABISELECT(560,336),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(560,336),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C39S19558C12__A3__8S19558C2[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C39S19558C12__A1__8S19558C2[] = {
  ABISELECT(1368,816),
  ABISELECT(24,8),
  ABISELECT(1368,816),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C39S19558C12__A1__8S19558C2[] = {
  ABISELECT(1344,808),
  0,
  0,
  ABISELECT(1344,808),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C39S19558C12__A1__8S19558C2[] = {
  0,
  0,
  ABISELECT(1216,732),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(1216,732),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C39S19558C12__A1__8S19558C2[] = {
  ABISELECT(496,300),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(496,300),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__8S19558C39S19558C12__A1__8S19558C2[] = {
  0,
  0,
  ABISELECT(288,180),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__8S19558C39S19558C12__A1__8S19558C2[] = {
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C12__A5__8S19558C2[] = {
  ABISELECT(-1776,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C12__A5__8S19558C2[] = {
  ABISELECT(1776,1072),
  0,
  0,
  ABISELECT(1776,1072),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C79S19558C12__A1__8S19558C2[] = {
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C79S19558C12__A4__8S19558C2[] = {
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C2[] = {
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C2[] = {
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C2[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C2[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C79S19558C12__A4__8S19558C2[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C79S19558C12__A4__8S19558C2[] = {
  ABISELECT(1136,684),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(1136,684),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C79S19558C12__A4__8S19558C2[] = {
  0,
  0,
  ABISELECT(928,564),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C79S19558C12__A1__8S19558C2[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C79S19558C12__A1__8S19558C2[] = {
  ABISELECT(1136,684),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(1136,684),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C79S19558C12__A1__8S19558C2[] = {
  0,
  0,
  ABISELECT(928,564),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C139S19558C12__8S19558C2[] = {
  ABISELECT(-1648,-996),
  ABISELECT(-1856,-1116),
  ABISELECT(-1584,-960),
  ABISELECT(-2704,-1624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C139S19558C12__A7__8S19558C2[] = {
  ABISELECT(-2704,-1624),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C139S19558C12__A7__8S19558C2[] = {
  ABISELECT(2704,1624),
  0,
  0,
  ABISELECT(2704,1624),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C139S19558C12__8S19558C2[] = {
  0,
  ABISELECT(1584,960),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(1584,960),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C139S19558C12__8S19558C2[] = {
  ABISELECT(2704,1624),
  0,
  0,
  ABISELECT(2704,1624),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C139S19558C12__8S19558C2[] = {
  ABISELECT(1856,1116),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(1856,1116),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C139S19558C12__8S19558C2[] = {
  0,
  0,
  ABISELECT(1648,996),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[] = {
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[] = {
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C2[] = {
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C2[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[] = {
  ABISELECT(2416,1440),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(2416,1440),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[] = {
  0,
  0,
  ABISELECT(2208,1320),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C2[] = {
  ABISELECT(-3616,-2168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C2[] = {
  ABISELECT(3616,2168),
  0,
  0,
  ABISELECT(3616,2168),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C149S19558C12__8S19558C2[] = {
  0,
  0,
  ABISELECT(2208,1320),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(2416,1440),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(2416,1440),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(3288,1956),
  ABISELECT(24,8),
  ABISELECT(3288,1956),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(-3616,-2168),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C149S19558C12__8S19558C2[] = {
  0,
  0,
  ABISELECT(2208,1320),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(2416,1440),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(2416,1440),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(3288,1956),
  ABISELECT(24,8),
  ABISELECT(3288,1956),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C12__8S19558C2[] = {
  ABISELECT(-3616,-2168),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C12D1Ev,_ZTv0_n16_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C12D0Ev,_ZTv0_n16_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C12__8S19558C2[] = {
  ABISELECT(1368,816),
  ABISELECT(24,8),
  ABISELECT(1368,816),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C12D1Ev,_ZTv0_n16_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C12D0Ev,_ZTv0_n16_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C12D1Ev,_ZTv0_n20_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C12D0Ev,_ZTv0_n20_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C12__8S19558C2[] = {
  ABISELECT(1344,808),
  0,
  0,
  ABISELECT(1344,808),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C12D1Ev,_ZTv0_n20_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C12D0Ev,_ZTv0_n20_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__9S19558C12__8S19558C2[] = {
  0,
  0,
  ABISELECT(1216,732),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(1216,732),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C12D1Ev,_ZTv0_n24_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C12D0Ev,_ZTv0_n24_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C12__8S19558C2[] = {
  ABISELECT(496,300),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(496,300),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C12D1Ev,_ZTv0_n24_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C12D0Ev,_ZTv0_n24_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__9S19558C12__8S19558C2[] = {
  0,
  0,
  ABISELECT(288,180),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N9S19558C12D1Ev,_ZThn36_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19558C12D0Ev,_ZThn36_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C3__A1__9S19558C12__8S19558C2[] = {
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19558C12D1Ev,_ZThn36_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19558C12D0Ev,_ZThn36_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn432_N9S19558C12D1Ev,_ZThn264_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn432_N9S19558C12D0Ev,_ZThn264_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C12__8S19558C2[] = {
  ABISELECT(-1776,-1072),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N9S19558C12D1Ev,_ZThn264_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N9S19558C12D0Ev,_ZThn264_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn640_N9S19558C12D1Ev,_ZThn384_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn640_N9S19558C12D0Ev,_ZThn384_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__A__9S19558C12__8S19558C2[] = {
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  ABISELECT(-640,-384),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N9S19558C12D1Ev,_ZThn384_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N9S19558C12D0Ev,_ZThn384_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn1360_N9S19558C12D1Ev,_ZThn816_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19558C12D0Ev,_ZThn816_N9S19558C12D0Ev)();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__9S19558C12__8S19558C2[] = {
  ABISELECT(-1648,-996),
  ABISELECT(-1856,-1116),
  ABISELECT(-1584,-960),
  ABISELECT(-2704,-1624),
  ABISELECT(-1360,-816),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N9S19558C12D1Ev,_ZThn816_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N9S19558C12D0Ev,_ZThn816_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A3__9S19558C12__8S19558C2[] = {
  0,
  ABISELECT(224,144),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(224,144),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn1920_N9S19558C12D1Ev,_ZThn1140_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn1920_N9S19558C12D0Ev,_ZThn1140_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C12__8S19558C2[] = {
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S19558C12D1Ev,_ZThn1140_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S19558C12D0Ev,_ZThn1140_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn2272_N9S19558C12D1Ev,_ZThn1360_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn2272_N9S19558C12D0Ev,_ZThn1360_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A8__9S19558C12__8S19558C2[] = {
  ABISELECT(-3616,-2168),
  ABISELECT(-2272,-1360),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N9S19558C12D1Ev,_ZThn1360_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N9S19558C12D0Ev,_ZThn1360_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C16D1Ev();
extern void _ZN9S19558C16D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN9S19558C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C16__8S19558C2[] = {
  ABISELECT(-3824,-2312),
  ABISELECT(2160,1320),
  ABISELECT(-3976,-2396),
  ABISELECT(992,608),
  ABISELECT(-2896,-1760),
  ABISELECT(-3104,-1880),
  ABISELECT(-2832,-1724),
  ABISELECT(-3952,-2388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  (VTBL_ENTRY)&_ZN9S19558C163v13Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C139S19558C16__A1__8S19558C2[] = {
  ABISELECT(-2896,-1760),
  ABISELECT(-3104,-1880),
  ABISELECT(-2832,-1724),
  ABISELECT(-3952,-2388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C139S19558C16__A14__8S19558C2[] = {
  ABISELECT(-3952,-2388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C139S19558C16__A14__8S19558C2[] = {
  ABISELECT(3952,2388),
  0,
  0,
  ABISELECT(3952,2388),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C139S19558C16__A1__8S19558C2[] = {
  0,
  ABISELECT(2832,1724),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(2832,1724),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C139S19558C16__A1__8S19558C2[] = {
  ABISELECT(3952,2388),
  0,
  0,
  ABISELECT(3952,2388),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C139S19558C16__A1__8S19558C2[] = {
  ABISELECT(3104,1880),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3104,1880),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C139S19558C16__A1__8S19558C2[] = {
  0,
  0,
  ABISELECT(2896,1760),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C18D1Ev();
extern void _ZN9S19558C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C189S19558C16__8S19558C2[] = {
  ABISELECT(-3456,-2084),
  ABISELECT(-3664,-2204),
  ABISELECT(-4512,-2712),
  ABISELECT(-3392,-2048),
  ABISELECT(1600,996),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C19D1Ev();
extern void _ZN9S19558C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C199S19558C189S19558C16__8S19558C2[] = {
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C2[] = {
  ABISELECT(-4640,-2788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C2[] = {
  ABISELECT(-4640,-2788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C2[] = {
  ABISELECT(4640,2788),
  0,
  0,
  ABISELECT(4640,2788),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C2[] = {
  ABISELECT(4640,2788),
  0,
  0,
  ABISELECT(4640,2788),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C199S19558C189S19558C16__8S19558C2[] = {
  ABISELECT(4640,2788),
  0,
  0,
  ABISELECT(4640,2788),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C199S19558C189S19558C16__8S19558C2[] = {
  ABISELECT(3792,2280),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3792,2280),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn1600_N9S19558C18D1Ev,_ZThn996_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn1600_N9S19558C18D0Ev,_ZThn996_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__9S19558C189S19558C16__8S19558C2[] = {
  0,
  0,
  ABISELECT(-1600,-996),
  0,
  0,
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  ABISELECT(-1600,-996),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C189S19558C16__8S19558C2[] = {
  0,
  ABISELECT(3392,2048),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(3392,2048),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__A1__9S19558C189S19558C16__8S19558C2[] = {
  ABISELECT(4512,2712),
  0,
  0,
  ABISELECT(4512,2712),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C189S19558C16__8S19558C2[] = {
  ABISELECT(3664,2204),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3664,2204),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__9S19558C189S19558C16__8S19558C2[] = {
  0,
  0,
  ABISELECT(3456,2084),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C19__9S19558C189S19558C16__8S19558C2[] = {
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C16D1Ev,_ZTv0_n24_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C16D0Ev,_ZTv0_n24_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C16__8S19558C2[] = {
  ABISELECT(3104,1880),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3104,1880),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C16D1Ev,_ZTv0_n24_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C16D0Ev,_ZTv0_n24_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C16D1Ev,_ZTv0_n20_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C16D0Ev,_ZTv0_n20_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C16__8S19558C2[] = {
  ABISELECT(3952,2388),
  0,
  0,
  ABISELECT(3952,2388),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C16D1Ev,_ZTv0_n20_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C16D0Ev,_ZTv0_n20_N9S19558C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn992_N9S19558C16D1Ev,_ZThn608_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn992_N9S19558C16D0Ev,_ZThn608_N9S19558C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19558C17__9S19558C16__8S19558C2[] = {
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-992,-608),
  ABISELECT(-4968,-3004),
  ABISELECT(-4096,-2488),
  ABISELECT(-3888,-2368),
  ABISELECT(-4944,-2996),
  ABISELECT(-992,-608),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn16_n56_N9S19558C16D1Ev,_ZTvn8_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N9S19558C16D0Ev,_ZTvn8_n28_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C17__A1__9S19558C16__8S19558C2[] = {
  ABISELECT(-4960,-3004),
  ABISELECT(-1008,-616),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S19558C16D1Ev,_ZTvn8_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S19558C16D0Ev,_ZTvn8_n28_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn224_n56_N9S19558C16D1Ev,_ZTvn128_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N9S19558C16D0Ev,_ZTvn128_n28_N9S19558C16D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C17__9S19558C16__8S19558C2[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  ABISELECT(-1216,-736),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N9S19558C16D1Ev,_ZTvn128_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N9S19558C16D0Ev,_ZTvn128_n28_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C16__8S19558C2[] = {
  0,
  0,
  ABISELECT(2896,1760),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn448_n56_N9S19558C16D1Ev,_ZTvn272_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N9S19558C16D0Ev,_ZTvn272_n28_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C59S19558C159S19558C149S19558C17__A1__9S19558C16__8S19558C2[] = {
  ABISELECT(-1440,-880),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N9S19558C16D1Ev,_ZTvn272_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N9S19558C16D0Ev,_ZTvn272_n28_N9S19558C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C16D1Ev,_ZTv0_n16_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C16D0Ev,_ZTv0_n16_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C16__8S19558C2[] = {
  ABISELECT(3976,2396),
  ABISELECT(24,8),
  ABISELECT(3976,2396),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C16D1Ev,_ZTv0_n16_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C16D0Ev,_ZTv0_n16_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn576_n56_N9S19558C16D1Ev,_ZTvn348_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N9S19558C16D0Ev,_ZTvn348_n28_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16__8S19558C2[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-1568,-956),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N9S19558C16D1Ev,_ZTvn348_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N9S19558C16D0Ev,_ZTvn348_n28_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__9S19558C16__8S19558C2[] = {
  0,
  ABISELECT(2832,1724),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(2832,1724),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn560_N9S19558C16D1Ev,_ZThn324_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn560_N9S19558C16D0Ev,_ZThn324_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C18__9S19558C16__8S19558C2[] = {
  ABISELECT(-3456,-2084),
  ABISELECT(-3664,-2204),
  ABISELECT(-4512,-2712),
  ABISELECT(-3392,-2048),
  ABISELECT(1600,996),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N9S19558C16D1Ev,_ZThn324_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N9S19558C16D0Ev,_ZThn324_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn2160_N9S19558C16D1Ev,_ZThn1320_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn2160_N9S19558C16D0Ev,_ZThn1320_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__A1__9S19558C16__8S19558C2[] = {
  0,
  0,
  ABISELECT(-2160,-1320),
  0,
  0,
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  ABISELECT(-2160,-1320),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn688_N9S19558C16D1Ev,_ZThn400_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn688_N9S19558C16D0Ev,_ZThn400_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C199S19558C18__9S19558C16__8S19558C2[] = {
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  ABISELECT(-688,-400),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N9S19558C16D1Ev,_ZThn400_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N9S19558C16D0Ev,_ZThn400_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__9S19558C16__8S19558C2[] = {
  0,
  0,
  ABISELECT(3824,2312),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(3824,2312),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN9S19558C17D1Ev();
extern void _ZN9S19558C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C17__8S19558C2[] = {
  ABISELECT(-4968,-3004),
  ABISELECT(-4096,-2488),
  ABISELECT(-3888,-2368),
  ABISELECT(-4944,-2996),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN9S19558C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C17D0Ev,
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C49S19558C17__A1__8S19558C2[] = {
  ABISELECT(-4944,-2996),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C49S19558C17__A1__8S19558C2[] = {
  ABISELECT(4944,2996),
  0,
  0,
  ABISELECT(4944,2996),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C17__A11__8S19558C2[] = {
  ABISELECT(-4960,-3004),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C17__A11__8S19558C2[] = {
  ABISELECT(4960,3004),
  0,
  0,
  ABISELECT(4960,3004),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[] = {
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C2[] = {
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C2[] = {
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C2[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C2[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[] = {
  ABISELECT(4320,2616),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4320,2616),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[] = {
  0,
  0,
  ABISELECT(4112,2496),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C2[] = {
  ABISELECT(-5520,-3344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C2[] = {
  ABISELECT(5520,3344),
  0,
  0,
  ABISELECT(5520,3344),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__A1__8S19558C2[] = {
  0,
  0,
  ABISELECT(4112,2496),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(4320,2616),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4320,2616),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(5192,3132),
  ABISELECT(24,8),
  ABISELECT(5192,3132),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C149S19558C17__A1__8S19558C2[] = {
  0,
  0,
  ABISELECT(4112,2496),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(4320,2616),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4320,2616),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(5192,3132),
  ABISELECT(24,8),
  ABISELECT(5192,3132),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__A1__8S19558C2[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C17__8S19558C2[] = {
  ABISELECT(4944,2996),
  0,
  0,
  ABISELECT(4944,2996),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C17__8S19558C2[] = {
  ABISELECT(-4960,-3004),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C17__8S19558C2[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A2__9S19558C17__8S19558C2[] = {
  0,
  0,
  ABISELECT(3888,2368),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C17__8S19558C2[] = {
  ABISELECT(4096,2488),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4096,2488),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C17__8S19558C2[] = {
  ABISELECT(4968,3004),
  ABISELECT(24,8),
  ABISELECT(4968,3004),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__8S19558C2[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__A2__8S19558C2[] = {
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C13__A15__8S19558C2[] = {
  ABISELECT(-6112,-3708),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C13__A15__8S19558C2[] = {
  ABISELECT(6112,3708),
  0,
  0,
  ABISELECT(6112,3708),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C13__A2__8S19558C2[] = {
  0,
  ABISELECT(4992,3044),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(4992,3044),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C13__A2__8S19558C2[] = {
  ABISELECT(6112,3708),
  0,
  0,
  ABISELECT(6112,3708),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C13__A2__8S19558C2[] = {
  ABISELECT(5264,3200),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(5264,3200),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C13__A2__8S19558C2[] = {
  0,
  0,
  ABISELECT(5056,3080),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
static  VTT_ENTRY vtt_S19558C2[] = {
  {&(_ZTV8S19558C2[12]),  12,308},
  {&(_tg__ZTV8S19558C3__8S19558C2[7]),  7,13},
  {&(_tg__ZTV8S19558C88S19558C3__A1__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C3__A1__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C3__A2__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C3__A2__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C3__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C3__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C3__A1__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C3__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C4__8S19558C3__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C3__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C3__8S19558C2[10]),  10,16},
  {&(_tg__ZTV8S19558C9__8S19558C3__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__8S19558C3__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C8__A1__8S19558C3__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C10__A6__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C10__A10__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C10__A10__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C10__A6__8S19558C2[5]),  5,9},
  {&(_ZTV8S19558C2[46]),  46,308},
  {&(_ZTV8S19558C2[53]),  53,308},
  {&(_ZTV8S19558C2[67]),  67,308},
  {&(_ZTV8S19558C2[79]),  79,308},
  {&(_ZTV8S19558C2[87]),  87,308},
  {&(_ZTV8S19558C2[24]),  24,308},
  {&(_ZTV8S19558C2[98]),  98,308},
  {&(_ZTV8S19558C2[123]),  123,308},
  {&(_ZTV8S19558C2[135]),  135,308},
  {&(_ZTV8S19558C2[142]),  142,308},
  {&(_ZTV8S19558C2[149]),  149,308},
  {&(_ZTV8S19558C2[158]),  158,308},
  {&(_ZTV8S19558C2[170]),  170,308},
  {&(_ZTV8S19558C2[182]),  182,308},
  {&(_ZTV8S19558C2[191]),  191,308},
  {&(_ZTV8S19558C2[198]),  198,308},
  {&(_ZTV8S19558C2[38]),  38,308},
  {&(_ZTV8S19558C2[218]),  218,308},
  {&(_ZTV8S19558C2[256]),  256,308},
  {&(_ZTV8S19558C2[261]),  261,308},
  {&(_ZTV8S19558C2[271]),  271,308},
  {&(_ZTV8S19558C2[280]),  280,308},
  {&(_ZTV8S19558C2[287]),  287,308},
  {&(_ZTV8S19558C2[232]),  232,308},
  {&(_ZTV8S19558C2[302]),  302,308},
  {&(_ZTV8S19558C2[240]),  240,308},
  {&(_tg__ZTV8S19558C4__8S19558C2[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C2[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C7__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C7__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C7__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C7__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C7__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C7__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C7__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C7__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C9__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C8__A2__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__A2__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A3__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A3__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__A2__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__A2__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__A2__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__A2__8S19558C2[4]),  4,6},
  {&(_tg__ZTV9S19558C12__8S19558C2[8]),  8,15},
  {&(_tg__ZTV8S19558C39S19558C12__A1__8S19558C2[7]),  7,13},
  {&(_tg__ZTV8S19558C88S19558C39S19558C12__A3__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C39S19558C12__A3__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C39S19558C12__A3__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C39S19558C12__A3__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C4__8S19558C39S19558C12__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C39S19558C12__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C39S19558C12__A1__8S19558C2[10]),  10,16},
  {&(_tg__ZTV8S19558C9__8S19558C39S19558C12__A1__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__8S19558C39S19558C12__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C8__A1__8S19558C39S19558C12__A1__8S19558C2[5]),  5,10},
  {&(_tg__ZTV8S19558C99S19558C12__A5__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C12__A5__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C79S19558C12__A1__8S19558C2[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C79S19558C12__A4__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C79S19558C12__A4__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C79S19558C12__A4__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C79S19558C12__A4__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C79S19558C12__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C79S19558C12__A1__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C79S19558C12__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV9S19558C139S19558C12__8S19558C2[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C139S19558C12__A7__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C139S19558C12__A7__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C139S19558C12__8S19558C2[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C139S19558C12__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C139S19558C12__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C139S19558C12__8S19558C2[4]),  4,6},
  {&(_tg__ZTV9S19558C149S19558C12__8S19558C2[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C149S19558C12__8S19558C2[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C149S19558C12__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C149S19558C12__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C149S19558C12__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C149S19558C12__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C12__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C149S19558C12__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C149S19558C12__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C149S19558C12__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C149S19558C12__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C12__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C4__9S19558C12__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C12__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C7__9S19558C12__8S19558C2[10]),  10,16},
  {&(_tg__ZTV8S19558C9__9S19558C12__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__9S19558C12__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C88S19558C3__A1__9S19558C12__8S19558C2[5]),  5,10},
  {&(_tg__ZTV8S19558C9__A__9S19558C12__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C7__A__9S19558C12__8S19558C2[5]),  5,11},
  {&(_tg__ZTV9S19558C13__9S19558C12__8S19558C2[6]),  6,12},
  {&(_tg__ZTV8S19558C8__A3__9S19558C12__8S19558C2[9]),  9,14},
  {&(_tg__ZTV9S19558C14__9S19558C12__8S19558C2[6]),  6,13},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A8__9S19558C12__8S19558C2[3]),  3,7},
  {&(_tg__ZTV9S19558C16__8S19558C2[10]),  10,17},
  {&(_tg__ZTV9S19558C139S19558C16__A1__8S19558C2[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C139S19558C16__A14__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C139S19558C16__A14__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C139S19558C16__A1__8S19558C2[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C139S19558C16__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C139S19558C16__A1__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C139S19558C16__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV9S19558C189S19558C16__8S19558C2[7]),  7,11},
  {&(_tg__ZTV9S19558C199S19558C189S19558C16__8S19558C2[4]),  4,8},
  {&(_tg__ZTV9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C199S19558C189S19558C16__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A1__9S19558C199S19558C189S19558C16__8S19558C2[6]),  6,10},
  {&(_tg__ZTV9S19558C13__9S19558C189S19558C16__8S19558C2[11]),  11,17},
  {&(_tg__ZTV8S19558C8__9S19558C189S19558C16__8S19558C2[9]),  9,14},
  {&(_tg__ZTV8S19558C5__A1__9S19558C189S19558C16__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C189S19558C16__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__9S19558C189S19558C16__8S19558C2[4]),  4,6},
  {&(_tg__ZTV9S19558C19__9S19558C189S19558C16__8S19558C2[4]),  4,8},
  {&(_tg__ZTV8S19558C9__9S19558C16__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C5__9S19558C16__8S19558C2[5]),  5,9},
  {&(_tg__ZTV9S19558C17__9S19558C16__8S19558C2[12]),  12,14},
  {&(_tg__ZTV8S19558C99S19558C17__A1__9S19558C16__8S19558C2[3]),  3,7},
  {&(_tg__ZTV9S19558C149S19558C17__9S19558C16__8S19558C2[6]),  6,13},
  {&(_tg__ZTV8S19558C6__A3__9S19558C16__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C59S19558C159S19558C149S19558C17__A1__9S19558C16__8S19558C2[2]),  2,6},
  {&(_tg__ZTV8S19558C4__A1__9S19558C16__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C8__A1__9S19558C16__8S19558C2[9]),  9,14},
  {&(_tg__ZTV9S19558C18__9S19558C16__8S19558C2[7]),  7,11},
  {&(_tg__ZTV9S19558C13__A1__9S19558C16__8S19558C2[11]),  11,17},
  {&(_tg__ZTV9S19558C199S19558C18__9S19558C16__8S19558C2[4]),  4,8},
  {&(_tg__ZTV8S19558C7__9S19558C16__8S19558C2[10]),  10,16},
  {&(_tg__ZTV9S19558C17__8S19558C2[6]),  6,8},
  {&(_tg__ZTV8S19558C49S19558C17__A1__8S19558C2[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C49S19558C17__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C99S19558C17__A11__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C17__A11__8S19558C2[5]),  5,9},
  {&(_tg__ZTV9S19558C149S19558C17__A1__8S19558C2[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C149S19558C17__A1__8S19558C2[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__A1__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__A1__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C149S19558C17__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C149S19558C17__A1__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C149S19558C17__A1__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C149S19558C17__A1__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__A1__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__9S19558C17__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A__9S19558C17__8S19558C2[3]),  3,7},
  {&(_tg__ZTV9S19558C14__9S19558C17__8S19558C2[6]),  6,13},
  {&(_tg__ZTV8S19558C6__A2__9S19558C17__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A1__9S19558C17__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C4__A1__9S19558C17__8S19558C2[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__8S19558C2[3]),  3,7},
  {&(_tg__ZTV9S19558C13__A2__8S19558C2[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C13__A15__8S19558C2[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C13__A15__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C13__A2__8S19558C2[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C13__A2__8S19558C2[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C13__A2__8S19558C2[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C13__A2__8S19558C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19558C2[];
extern  VTBL_ENTRY _ZTV8S19558C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C2[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S19558C16D0Ev,_ZThn1320_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S19558C16D1Ev,_ZThn1320_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C16D0Ev,_ZThn608_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C16D1Ev,_ZThn608_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N9S19558C18D0Ev,_ZThn996_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N9S19558C18D1Ev,_ZThn996_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C3D0Ev,_ZThn932_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C3D1Ev,_ZThn932_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C3D0Ev,_ZThn500_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C3D1Ev,_ZThn500_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C3D0Ev,_ZThn424_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C3D1Ev,_ZThn424_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C3D0Ev,_ZThn416_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C3D1Ev,_ZThn416_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N8S19558C8D0Ev,_ZThn896_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N8S19558C8D1Ev,_ZThn896_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C8D0Ev,_ZThn388_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C8D1Ev,_ZThn388_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19558C10D0Ev,_ZThn160_N9S19558C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19558C10D0Ev,_ZThn388_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19558C10D1Ev,_ZThn160_N9S19558C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19558C10D1Ev,_ZThn388_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19558C9D0Ev,_ZThn160_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C9D0Ev,_ZThn388_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19558C9D1Ev,_ZThn160_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C9D1Ev,_ZThn388_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19558C2D0Ev,_ZTv0_n36_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6816_N8S19558C2D0Ev,_ZThn4132_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19558C2D1Ev,_ZTv0_n36_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6816_N8S19558C2D1Ev,_ZThn4132_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19558C2D0Ev,_ZTv0_n28_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5648_N8S19558C2D0Ev,_ZThn3420_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19558C2D1Ev,_ZTv0_n28_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5648_N8S19558C2D1Ev,_ZThn3420_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19558C2D0Ev,_ZTv0_n52_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19558C2D0Ev,_ZThn2812_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19558C2D1Ev,_ZTv0_n52_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19558C2D1Ev,_ZThn2812_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19558C2D0Ev,_ZTv0_n44_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S19558C2D0Ev,_ZThn1232_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19558C2D1Ev,_ZTv0_n44_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S19558C2D1Ev,_ZThn1232_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C2D0Ev,_ZTv0_n24_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C2D0Ev,_ZThn932_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C2D1Ev,_ZTv0_n24_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C2D1Ev,_ZThn932_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19558C2D0Ev,_ZThn1088_N8S19558C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C2D0Ev,_ZThn500_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19558C2D1Ev,_ZThn1088_N8S19558C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C2D1Ev,_ZThn500_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C2D0Ev,_ZTv0_n20_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C2D0Ev,_ZThn424_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C2D1Ev,_ZTv0_n20_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C2D1Ev,_ZThn424_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C2D0Ev,_ZTv0_n16_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C2D0Ev,_ZThn416_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C2D1Ev,_ZTv0_n16_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C2D1Ev,_ZThn416_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C2 = {  "S19558C2", // class name
  bases_S19558C2, 83,
  &(vtc_S19558C2[0]), // expected_vtbl_contents
  &(vtt_S19558C2[0]), // expected_vtt_contents
  ABISELECT(7376,4456), // object size
  NSPAIRA(_ZTI8S19558C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19558C2),308, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19558C2),218, //virtual table table var
  83, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19558C21  : S19558C7 {
  __tsi64 s19558c21f0:64;
  char s19558c21f1;
  ~S19558C21(); // tgen
  S19558C21(); // tgen
};
//SIG(-1 S19558C21) C1{ BC2{ BC3{ VBC4{ BC5{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC6{ VBC4 BC5 vd Fi FC4 Fi} BC7{ BC6 vd Fi Fp Fi[2]} VBC5 vd v3 FU8{ m Fi[2] FL}} vd v4 FD[3] Fi Fc FC6 Fi:9 Fc[5] Fi Fp[9]} FL:64 Fc}


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

static void Test_S19558C21()
{
  extern Class_Descriptor cd_S19558C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(72,170)];
    init_test(&cd_S19558C21, buf);
    S19558C21 *dp, &lv = *(dp=new (buf) S19558C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1136,676), "sizeof(S19558C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C21)");
    check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(736,444), "S19558C21");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*), ABISELECT(736,444), "S19558C21");
    /*is_ambiguous_... S19558C21::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(736,444), "S19558C21");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(736,444), "S19558C21");
    /*is_ambiguous_... S19558C21::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(864,520), "S19558C21");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*), ABISELECT(864,520), "S19558C21");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), 0, "S19558C21");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), 0, "S19558C21");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*), 0, "S19558C21");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*), ABISELECT(1072,640), "S19558C21");
    check_base_class_offset(lv, (S19558C8*)(S19558C7*), 0, "S19558C21");
    check_base_class_offset(lv, (S19558C7*), 0, "S19558C21");
    set_bf_and_test(lv, s19558c21f0, ABISELECT(712,432), 0, 64, 1, "S19558C21");
    set_bf_and_test(lv, s19558c21f0, ABISELECT(712,432), 0, 64, hide_sll(1LL<<63), "S19558C21");
    check_field_offset(lv, s19558c21f1, ABISELECT(720,440), "S19558C21.s19558c21f1");
    test_class_info(&lv, &cd_S19558C21);
    dp->~S19558C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C21(Test_S19558C21, "S19558C21", ABISELECT(1136,676));

#else // __cplusplus

extern void _ZN9S19558C21C1Ev();
extern void _ZN9S19558C21D1Ev();
Name_Map name_map_S19558C21[] = {
  NSPAIR(_ZN9S19558C21C1Ev),
  NSPAIR(_ZN9S19558C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
static Base_Class bases_S19558C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(736,444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(736,444), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(864,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19558C9,    ABISELECT(864,520), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S19558C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19558C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(1072,640), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19558C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19558C7,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19558C21[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C21D1Ev();
extern void _ZN9S19558C21D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C21D1Ev,_ZTv0_n20_N9S19558C21D1Ev)();
extern void ABISELECT(_ZThn736_N9S19558C21D1Ev,_ZThn444_N9S19558C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C21D0Ev,_ZTv0_n20_N9S19558C21D0Ev)();
extern void ABISELECT(_ZThn736_N9S19558C21D0Ev,_ZThn444_N9S19558C21D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C21D1Ev,_ZTv0_n24_N9S19558C21D1Ev)();
extern void ABISELECT(_ZThn864_N9S19558C21D1Ev,_ZThn520_N9S19558C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C21D0Ev,_ZTv0_n24_N9S19558C21D0Ev)();
extern void ABISELECT(_ZThn864_N9S19558C21D0Ev,_ZThn520_N9S19558C21D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY vtc_S19558C21[] = {
  ABISELECT(1072,640),
  ABISELECT(864,520),
  ABISELECT(736,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C21D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-736,-444),
  0,
  0,
  ABISELECT(-736,-444),
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C21D1Ev,_ZTv0_n20_N9S19558C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C21D0Ev,_ZTv0_n20_N9S19558C21D0Ev),
  ABISELECT(-864,-520),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-864,-520),
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C21D1Ev,_ZTv0_n24_N9S19558C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C21D0Ev,_ZTv0_n24_N9S19558C21D0Ev),
  0,
  0,
  ABISELECT(-1072,-640),
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern VTBL_ENTRY _ZTV9S19558C21[];
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__9S19558C21[] = {
  ABISELECT(1072,640),
  ABISELECT(864,520),
  ABISELECT(736,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C7__9S19558C21[] = {
  ABISELECT(1072,640),
  ABISELECT(864,520),
  ABISELECT(736,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C7__9S19558C21[] = {
  ABISELECT(736,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C21[] = {
  ABISELECT(736,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn736_N8S19558C9D1Ev,_ZThn444_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn736_N8S19558C9D0Ev,_ZThn444_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C21[] = {
  ABISELECT(-736,-444),
  0,
  0,
  ABISELECT(-736,-444),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn736_N9S19558C10D1Ev,_ZThn444_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn736_N9S19558C10D0Ev,_ZThn444_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__9S19558C21[] = {
  ABISELECT(-736,-444),
  0,
  0,
  ABISELECT(-736,-444),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn736_N8S19558C8D1Ev,_ZThn444_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn736_N8S19558C8D0Ev,_ZThn444_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C7__9S19558C21[] = {
  ABISELECT(-736,-444),
  0,
  0,
  ABISELECT(-736,-444),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn864_N8S19558C8D1Ev,_ZThn520_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn864_N8S19558C8D0Ev,_ZThn520_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C7__9S19558C21[] = {
  ABISELECT(-864,-520),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-864,-520),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C7__9S19558C21[] = {
  0,
  0,
  ABISELECT(-1072,-640),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn736_N8S19558C7D1Ev,_ZThn444_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn736_N8S19558C7D0Ev,_ZThn444_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C7__9S19558C21[] = {
  ABISELECT(-736,-444),
  0,
  0,
  ABISELECT(-736,-444),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn864_N8S19558C7D1Ev,_ZThn520_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn864_N8S19558C7D0Ev,_ZThn520_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7__9S19558C21[] = {
  ABISELECT(-864,-520),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-864,-520),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C7__9S19558C21[] = {
  0,
  0,
  ABISELECT(-1072,-640),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C21[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__9S19558C21[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
static  VTT_ENTRY vtt_S19558C21[] = {
  {&(_ZTV9S19558C21[5]),  5,36},
  {&(_tg__ZTV8S19558C7__9S19558C21[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C7__9S19558C21[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C7__9S19558C21[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C21[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__9S19558C21[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__9S19558C21[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C7__9S19558C21[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C7__9S19558C21[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C7__9S19558C21[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C7__9S19558C21[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C7__9S19558C21[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C7__9S19558C21[4]),  4,6},
  {&(_ZTV9S19558C21[16]),  16,36},
  {&(_ZTV9S19558C21[26]),  26,36},
  {&(_ZTV9S19558C21[34]),  34,36},
  {&(_tg__ZTV8S19558C9__9S19558C21[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__9S19558C21[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19558C21[];
extern  VTBL_ENTRY _ZTV9S19558C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C21[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S19558C7D0Ev,_ZThn520_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S19558C7D1Ev,_ZThn520_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19558C7D0Ev,_ZThn444_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19558C7D1Ev,_ZThn444_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S19558C8D0Ev,_ZThn520_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S19558C8D1Ev,_ZThn520_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19558C8D0Ev,_ZThn444_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19558C8D1Ev,_ZThn444_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S19558C10D0Ev,_ZThn444_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S19558C10D1Ev,_ZThn444_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19558C9D0Ev,_ZThn444_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N8S19558C9D1Ev,_ZThn444_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C21D0Ev,_ZTv0_n24_N9S19558C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19558C21D0Ev,_ZThn520_N9S19558C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C21D1Ev,_ZTv0_n24_N9S19558C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N9S19558C21D1Ev,_ZThn520_N9S19558C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C21D0Ev,_ZTv0_n20_N9S19558C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S19558C21D0Ev,_ZThn444_N9S19558C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C21D1Ev,_ZTv0_n20_N9S19558C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn736_N9S19558C21D1Ev,_ZThn444_N9S19558C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C21 = {  "S19558C21", // class name
  bases_S19558C21, 10,
  &(vtc_S19558C21[0]), // expected_vtbl_contents
  &(vtt_S19558C21[0]), // expected_vtt_contents
  ABISELECT(1136,676), // object size
  NSPAIRA(_ZTI9S19558C21),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19558C21),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19558C21),18, //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  S19558C1  : virtual S19558C2 , virtual S19558C21 , virtual S19558C19 , S19558C17 , S19558C10 {
  void *s19558c1f0[10];
  void *s19558c1f1;
  char s19558c1f2[9];
  __tsi64 s19558c1f3;
  ::S19558C9 s19558c1f4;
  void *s19558c1f5[4];
  __tsi64 s19558c1f6;
  int s19558c1f7;
  short s19558c1f8;
  virtual void  v1(); // _ZN8S19558C12v1Ev
  ~S19558C1(); // tgen
  S19558C1(); // tgen
};
//SIG(1 S19558C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ BC6{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC6 VBC7{ BC8{ VBC5 VBC9{ VBC5 BC6 vd Fi FC5 Fi} BC10{ BC9 vd Fi Fp Fi[2]} VBC6 vd v4 FU11{ m Fi[2] FL}} vd v5 FD[3] Fi Fc FC9 Fi:9 Fc[5] Fi Fp[9]} BC8 BC5 vd v6 v7 Fc:0 Fc Fi:10 Fc Fi} VBC8 VBC12{ BC3 BC9 BC7 BC13{ VBC8 BC9 vd v8 v9 Fc FC9 Fc} BC14{ BC15{ VBC6 BC8 BC5 VBC4 BC9 vd v10 Fi Fi Fi} vd v11 Fi Fl Fi FL} vd v12 Fc Fc Fi FD[4] Fp FL:54} BC10 VBC16{ VBC9 VBC17{ BC4 BC9 BC14 FC10} BC13 BC18{ BC5 VBC13 BC19{ BC10 VBC9 vd Fi Fi} Fi Fi[9] FU20{ m Fi FD Fi:32 Fp Fp}} VBC7 vd v13 Fi:4 Fi:12 Fi Fc} vd v14 FD Fi} VBC21{ BC7 FL:64 Fc} VBC19 BC17 BC10 v1 Fp[10] Fp Fc[9] FL FC9 Fp[4] FL Fi Fs}


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

static void Test_S19558C1()
{
  extern Class_Descriptor cd_S19558C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(640,1547)];
    init_test(&cd_S19558C1, buf);
    S19558C1 *dp, &lv = *(dp=new (buf) S19558C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10224,6184), "sizeof(S19558C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19558C1)");
    /*is_ambiguous_... S19558C1::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C4 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C2*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*)(S19558C16*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C13*), ABISELECT(2592,1564), "S19558C1");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(2592,1564), "S19558C1");
    check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(2592,1564), "S19558C1");
    check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C19 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C19*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C4*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C9*)(S19558C10*), ABISELECT(2592,1564), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C3*)(S19558C2*), ABISELECT(2568,1556), "S19558C1");
    check_base_class_offset(lv, (S19558C4*)(S19558C3*)(S19558C12*), ABISELECT(2568,1556), "S19558C1");
    check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(2568,1556), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2568,1556), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(2568,1556), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C3*)(S19558C2*), ABISELECT(1888,1140), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C16::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C16*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C19::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C8::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C19 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C19*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(3440,2072), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2720,1640), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2720,1640), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*), ABISELECT(2720,1640), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C15::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C8::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(3648,2192), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C7*), ABISELECT(2720,1640), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C7*)(S19558C3*)(S19558C2*), ABISELECT(2720,1640), "S19558C1");
    check_base_class_offset(lv, (S19558C7*)(S19558C3*)(S19558C12*), ABISELECT(2720,1640), "S19558C1");
    check_base_class_offset(lv, (S19558C7*)(S19558C16*), ABISELECT(2720,1640), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(1952,1176), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(1952,1176), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(1952,1176), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C3*)(S19558C2*), ABISELECT(1952,1176), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C3*)(S19558C2*), ABISELECT(2176,1320), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C3*)(S19558C2*), ABISELECT(2176,1320), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C3 */ AMB_check_base_class_offset(lv, (S19558C3*)(S19558C2*), ABISELECT(1888,1140), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(3712,2228), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*), ABISELECT(3712,2228), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*), ABISELECT(3712,2228), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C2*), ABISELECT(3712,2228), "S19558C1");
    check_base_class_offset(lv, (S19558C8*)(S19558C13*)(S19558C12*), ABISELECT(3712,2228), "S19558C1");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C13*)(S19558C16*), ABISELECT(3712,2228), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C13*), ABISELECT(3712,2228), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C3*)(S19558C12*), ABISELECT(3936,2372), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(4000,2408), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(4000,2408), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(4000,2408), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C8 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C3*)(S19558C12*), ABISELECT(4000,2408), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C3*)(S19558C12*), ABISELECT(4224,2552), "S19558C1");
    /*is_ambiguous_... S19558C3::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C3*)(S19558C12*), ABISELECT(4224,2552), "S19558C1");
    check_base_class_offset(lv, (S19558C3*)(S19558C12*), ABISELECT(3936,2372), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C12*), ABISELECT(4368,2636), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C12*), ABISELECT(4368,2636), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(4576,2756), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(4576,2756), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(4576,2756), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C7*)(S19558C12*), ABISELECT(4576,2756), "S19558C1");
    /*is_ambiguous_... S19558C12::S19558C7 */ AMB_check_base_class_offset(lv, (S19558C7*)(S19558C12*), ABISELECT(4576,2756), "S19558C1");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*)(S19558C12*), ABISELECT(5296,3188), "S19558C1");
    /*is_ambiguous_... S19558C13::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*)(S19558C12*), ABISELECT(5296,3188), "S19558C1");
    check_base_class_offset(lv, (S19558C13*)(S19558C12*), ABISELECT(5296,3188), "S19558C1");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(5856,3512), "S19558C1");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(5856,3512), "S19558C1");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(5856,3512), "S19558C1");
    check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(5856,3512), "S19558C1");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(6080,3656), "S19558C1");
    /*is_ambiguous_... S19558C15::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(6080,3656), "S19558C1");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(6208,3732), "S19558C1");
    /*is_ambiguous_... S19558C15::S19558C9 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(6208,3732), "S19558C1");
    check_base_class_offset(lv, (S19558C15*)(S19558C14*)(S19558C12*), ABISELECT(5856,3512), "S19558C1");
    check_base_class_offset(lv, (S19558C14*)(S19558C12*), ABISELECT(5856,3512), "S19558C1");
    check_base_class_offset(lv, (S19558C12*)(S19558C2*), ABISELECT(3936,2372), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C2*), ABISELECT(2320,1404), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C2*), ABISELECT(2320,1404), "S19558C1");
    /*is_ambiguous_... S19558C2::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C2*), ABISELECT(2320,1404), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C17*), ABISELECT(7536,4560), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C17*), ABISELECT(7552,4568), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C17*), ABISELECT(7552,4568), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(7760,4688), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(7760,4688), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(7760,4688), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(7760,4688), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(7984,4832), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(7984,4832), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(8112,4908), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(8112,4908), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(7760,4688), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C14*)(S19558C17*), ABISELECT(7760,4688), "S19558C1");
    check_base_class_offset(lv, (S19558C17*)(S19558C16*), ABISELECT(7536,4560), "S19558C1");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*)(S19558C16*), ABISELECT(6544,3952), "S19558C1");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*)(S19558C16*), ABISELECT(6544,3952), "S19558C1");
    /*is_ambiguous_... S19558C16::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C13*)(S19558C16*), ABISELECT(6544,3952), "S19558C1");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C18*)(S19558C16*), ABISELECT(7104,4276), "S19558C1");
    /*is_ambiguous_... S19558C18::S19558C5 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C18*)(S19558C16*), ABISELECT(7104,4276), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C13*), ABISELECT(8704,5272), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C13 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C13*), ABISELECT(8704,5272), "S19558C1");
    check_base_class_offset(lv, (S19558C13*)(S19558C18*)(S19558C16*), ABISELECT(8704,5272), "S19558C1");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(7232,4352), "S19558C1");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(7232,4352), "S19558C1");
    check_base_class_offset(lv, (S19558C10*)(S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(7232,4352), "S19558C1");
    check_base_class_offset(lv, (S19558C19*)(S19558C18*)(S19558C16*), ABISELECT(7232,4352), "S19558C1");
    check_base_class_offset(lv, (S19558C18*)(S19558C16*), ABISELECT(7104,4276), "S19558C1");
    check_base_class_offset(lv, (S19558C16*)(S19558C2*), ABISELECT(6544,3952), "S19558C1");
    check_base_class_offset(lv, (S19558C2*), ABISELECT(1888,1140), "S19558C1");
    /*is_ambiguous_... S19558C9::S19558C6 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(9264,5596), "S19558C1");
    check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(9264,5596), "S19558C1");
    check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(9264,5596), "S19558C1");
    check_base_class_offset(lv, (S19558C8*)(S19558C7*)(S19558C21*), ABISELECT(9264,5596), "S19558C1");
    check_base_class_offset(lv, (S19558C7*)(S19558C21*), ABISELECT(9264,5596), "S19558C1");
    check_base_class_offset(lv, (S19558C21*), ABISELECT(9264,5596), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C19 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C19*), ABISELECT(10000,6040), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C19 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C19*), ABISELECT(10000,6040), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C19 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C19*), ABISELECT(10000,6040), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C19 */ AMB_check_base_class_offset(lv, (S19558C19*), ABISELECT(10000,6040), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C4*)(S19558C17*), 0, "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C17*), ABISELECT(16,8), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C17*), ABISELECT(16,8), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(224,128), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(224,128), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C10*)(S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(224,128), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C8*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(224,128), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(448,272), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C5*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(448,272), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(576,348), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(576,348), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C15*)(S19558C14*)(S19558C17*), ABISELECT(224,128), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C14*)(S19558C17*), ABISELECT(224,128), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C17 */ AMB_check_base_class_offset(lv, (S19558C17*), 0, "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C6*)(S19558C9*)(S19558C10*), ABISELECT(1168,712), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C9*)(S19558C10*), ABISELECT(1168,712), "S19558C1");
    /*is_ambiguous_... S19558C1::S19558C10 */ AMB_check_base_class_offset(lv, (S19558C10*), ABISELECT(1168,712), "S19558C1");
    check_field_offset(lv, s19558c1f0, ABISELECT(1384,848), "S19558C1.s19558c1f0");
    check_field_offset(lv, s19558c1f1, ABISELECT(1464,888), "S19558C1.s19558c1f1");
    check_field_offset(lv, s19558c1f2, ABISELECT(1472,892), "S19558C1.s19558c1f2");
    check_field_offset(lv, s19558c1f3, ABISELECT(1488,904), "S19558C1.s19558c1f3");
    check_field_offset(lv, s19558c1f4, ABISELECT(1504,912), "S19558C1.s19558c1f4");
    check_field_offset(lv, s19558c1f5, ABISELECT(1840,1108), "S19558C1.s19558c1f5");
    check_field_offset(lv, s19558c1f6, ABISELECT(1872,1124), "S19558C1.s19558c1f6");
    check_field_offset(lv, s19558c1f7, ABISELECT(1880,1132), "S19558C1.s19558c1f7");
    check_field_offset(lv, s19558c1f8, ABISELECT(1884,1136), "S19558C1.s19558c1f8");
    test_class_info(&lv, &cd_S19558C1);
    dp->~S19558C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19558C1(Test_S19558C1, "S19558C1", ABISELECT(10224,6184));

#else // __cplusplus

extern void _ZN8S19558C1C1Ev();
extern void _ZN8S19558C1D1Ev();
Name_Map name_map_S19558C1[] = {
  NSPAIR(_ZN8S19558C1C1Ev),
  NSPAIR(_ZN8S19558C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C3;
extern VTBL_ENTRY _ZTI8S19558C3[];
extern  VTBL_ENTRY _ZTV8S19558C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C3[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C3;
extern VTBL_ENTRY _ZTI8S19558C3[];
extern  VTBL_ENTRY _ZTV8S19558C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C3[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
extern Class_Descriptor cd_S19558C12;
extern VTBL_ENTRY _ZTI9S19558C12[];
extern  VTBL_ENTRY _ZTV9S19558C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C12[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
extern Class_Descriptor cd_S19558C17;
extern VTBL_ENTRY _ZTI9S19558C17[];
extern  VTBL_ENTRY _ZTV9S19558C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C17[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C13;
extern VTBL_ENTRY _ZTI9S19558C13[];
extern  VTBL_ENTRY _ZTV9S19558C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C13[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C19;
extern VTBL_ENTRY _ZTI9S19558C19[];
extern  VTBL_ENTRY _ZTV9S19558C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C19[];
extern Class_Descriptor cd_S19558C18;
extern VTBL_ENTRY _ZTI9S19558C18[];
extern  VTBL_ENTRY _ZTV9S19558C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C18[];
extern Class_Descriptor cd_S19558C16;
extern VTBL_ENTRY _ZTI9S19558C16[];
extern  VTBL_ENTRY _ZTV9S19558C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C16[];
extern Class_Descriptor cd_S19558C2;
extern VTBL_ENTRY _ZTI8S19558C2[];
extern  VTBL_ENTRY _ZTV8S19558C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C2[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C7;
extern VTBL_ENTRY _ZTI8S19558C7[];
extern  VTBL_ENTRY _ZTV8S19558C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C7[];
extern Class_Descriptor cd_S19558C21;
extern VTBL_ENTRY _ZTI9S19558C21[];
extern  VTBL_ENTRY _ZTV9S19558C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C21[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C19;
extern VTBL_ENTRY _ZTI9S19558C19[];
extern  VTBL_ENTRY _ZTV9S19558C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C19[];
extern Class_Descriptor cd_S19558C4;
extern VTBL_ENTRY _ZTI8S19558C4[];
extern  VTBL_ENTRY _ZTV8S19558C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C4[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
extern Class_Descriptor cd_S19558C8;
extern VTBL_ENTRY _ZTI8S19558C8[];
extern  VTBL_ENTRY _ZTV8S19558C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C8[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C5;
extern VTBL_ENTRY _ZTI8S19558C5[];
extern  VTBL_ENTRY _ZTV8S19558C5[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C15;
extern VTBL_ENTRY _ZTI9S19558C15[];
extern  VTBL_ENTRY _ZTV9S19558C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C15[];
extern Class_Descriptor cd_S19558C14;
extern VTBL_ENTRY _ZTI9S19558C14[];
extern  VTBL_ENTRY _ZTV9S19558C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C14[];
extern Class_Descriptor cd_S19558C17;
extern VTBL_ENTRY _ZTI9S19558C17[];
extern  VTBL_ENTRY _ZTV9S19558C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C17[];
extern Class_Descriptor cd_S19558C6;
extern VTBL_ENTRY _ZTI8S19558C6[];
extern  VTBL_ENTRY _ZTV8S19558C6[];
extern Class_Descriptor cd_S19558C9;
extern VTBL_ENTRY _ZTI8S19558C9[];
extern  VTBL_ENTRY _ZTV8S19558C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C9[];
extern Class_Descriptor cd_S19558C10;
extern VTBL_ENTRY _ZTI9S19558C10[];
extern  VTBL_ENTRY _ZTV9S19558C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19558C10[];
static Base_Class bases_S19558C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19558C6,    ABISELECT(2592,1564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(2592,1564), //bcp->offset
    113, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19558C4,    ABISELECT(2568,1556), //bcp->offset
    107, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(1888,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    73, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(3440,2072), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(3440,2072), //bcp->offset
    138, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    134, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(2720,1640), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(2720,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(2720,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(3648,2192), //bcp->offset
    148, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19558C8,    ABISELECT(2720,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(2720,1640), //bcp->offset
    122, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    122, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(1952,1176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    74, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1952,1176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    75, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(1952,1176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    76, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(1952,1176), //bcp->offset
    84, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    77, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(2176,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
    78, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(2176,1320), //bcp->offset
    94, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    79, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19558C3,    ABISELECT(1888,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    80, //init_seq
    83, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(3712,2228), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19558C9,    ABISELECT(3712,2228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(3712,2228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(3712,2228), //bcp->offset
    154, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    136, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(3936,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
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(4000,2408), //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(4000,2408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(4000,2408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(4000,2408), //bcp->offset
    195, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(4224,2552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(4224,2552), //bcp->offset
    205, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19558C3,    ABISELECT(3936,2372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(4368,2636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(4368,2636), //bcp->offset
    211, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    160, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(4576,2756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(4576,2756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    165, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(4576,2756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    164, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(4576,2756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(4576,2756), //bcp->offset
    218, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    162, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(5296,3188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(5296,3188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    175, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(5296,3188), //bcp->offset
    229, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    174, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(5856,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
    34, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(5856,3512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    185, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(5856,3512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    184, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(5856,3512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    183, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(6080,3656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(6080,3656), //bcp->offset
    254, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(6208,3732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(6208,3732), //bcp->offset
    260, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    191, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(5856,3512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    182, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(5856,3512), //bcp->offset
    241, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    181, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S19558C12,    ABISELECT(3936,2372), //bcp->offset
    168, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    144, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    83, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(2320,1404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    81, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(2320,1404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    82, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(2320,1404), //bcp->offset
    100, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    83, //init_seq
    83, //immediately_derived
  0, 0},
  {&cd_S19558C4,    ABISELECT(7536,4560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    252, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(7552,4568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(7552,4568), //bcp->offset
    323, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    254, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(7760,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(7760,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    260, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(7760,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    259, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(7760,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    258, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(7984,4832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    63, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(7984,4832), //bcp->offset
    343, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(8112,4908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(8112,4908), //bcp->offset
    349, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    266, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(7760,4688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    257, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(7760,4688), //bcp->offset
    330, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    256, //bcp->base_subarray_index_in_construction_vtbl_array
    57, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S19558C17,    ABISELECT(7536,4560), //bcp->offset
    309, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    251, //bcp->base_subarray_index_in_construction_vtbl_array
    58, //init_seq
    82, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(6544,3952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    62, //init_seq
    70, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(6544,3952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    217, //bcp->base_subarray_index_in_construction_vtbl_array
    63, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(6544,3952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    216, //bcp->base_subarray_index_in_construction_vtbl_array
    64, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(7104,4276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    65, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(7104,4276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    66, //init_seq
    81, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(8704,5272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    59, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(8704,5272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    286, //bcp->base_subarray_index_in_construction_vtbl_array
    60, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S19558C13,    ABISELECT(8704,5272), //bcp->offset
    356, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    285, //bcp->base_subarray_index_in_construction_vtbl_array
    61, //init_seq
    81, //immediately_derived
  0, 1},
  {&cd_S19558C6,    ABISELECT(7232,4352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    67, //init_seq
    78, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(7232,4352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    226, //bcp->base_subarray_index_in_construction_vtbl_array
    68, //init_seq
    79, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(7232,4352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    225, //bcp->base_subarray_index_in_construction_vtbl_array
    69, //init_seq
    80, //immediately_derived
  0, 0},
  {&cd_S19558C19,    ABISELECT(7232,4352), //bcp->offset
    301, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    224, //bcp->base_subarray_index_in_construction_vtbl_array
    70, //init_seq
    81, //immediately_derived
  0, 0},
  {&cd_S19558C18,    ABISELECT(7104,4276), //bcp->offset
    290, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    223, //bcp->base_subarray_index_in_construction_vtbl_array
    71, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S19558C16,    ABISELECT(6544,3952), //bcp->offset
    267, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    215, //bcp->base_subarray_index_in_construction_vtbl_array
    72, //init_seq
    83, //immediately_derived
  0, 1},
  {&cd_S19558C2,    ABISELECT(1888,1140), //bcp->offset
    58, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    84, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(9264,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    85, //init_seq
    85, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(9264,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    296, //bcp->base_subarray_index_in_construction_vtbl_array
    86, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(9264,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    295, //bcp->base_subarray_index_in_construction_vtbl_array
    87, //init_seq
    87, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(9264,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    294, //bcp->base_subarray_index_in_construction_vtbl_array
    88, //init_seq
    88, //immediately_derived
  0, 0},
  {&cd_S19558C7,    ABISELECT(9264,5596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    293, //bcp->base_subarray_index_in_construction_vtbl_array
    89, //init_seq
    89, //immediately_derived
  0, 0},
  {&cd_S19558C21,    ABISELECT(9264,5596), //bcp->offset
    373, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    292, //bcp->base_subarray_index_in_construction_vtbl_array
    90, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C6,    ABISELECT(10000,6040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    91, //init_seq
    91, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(10000,6040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    310, //bcp->base_subarray_index_in_construction_vtbl_array
    92, //init_seq
    92, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(10000,6040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    309, //bcp->base_subarray_index_in_construction_vtbl_array
    93, //init_seq
    93, //immediately_derived
  0, 0},
  {&cd_S19558C19,    ABISELECT(10000,6040), //bcp->offset
    389, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    308, //bcp->base_subarray_index_in_construction_vtbl_array
    94, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19558C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    95, //init_seq
    107, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    96, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    70, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    97, //init_seq
    107, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    98, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    99, //init_seq
    99, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    100, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S19558C8,    ABISELECT(224,128), //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
    101, //init_seq
    105, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(448,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
    102, //init_seq
    102, //immediately_derived
  0, 0},
  {&cd_S19558C5,    ABISELECT(448,272), //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
    103, //init_seq
    105, //immediately_derived
  0, 0},
  {&cd_S19558C6,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    104, //init_seq
    104, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(576,348), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    72, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    105, //init_seq
    105, //immediately_derived
  0, 0},
  {&cd_S19558C15,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    106, //init_seq
    106, //immediately_derived
  0, 0},
  {&cd_S19558C14,    ABISELECT(224,128), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    107, //init_seq
    107, //immediately_derived
  0, 0},
  {&cd_S19558C17,    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
    108, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19558C6,    ABISELECT(1168,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    109, //init_seq
    109, //immediately_derived
  0, 0},
  {&cd_S19558C9,    ABISELECT(1168,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    110, //init_seq
    110, //immediately_derived
  0, 0},
  {&cd_S19558C10,    ABISELECT(1168,712), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    73, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    111, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19558C1[];
extern void _ZN8S19558C1D1Ev();
extern void _ZN8S19558C1D0Ev();
extern void _ZN8S19558C12v1Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn16_N8S19558C1D1Ev,_ZThn8_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19558C1D0Ev,_ZThn8_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N8S19558C1D1Ev,_ZThn128_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19558C1D0Ev,_ZThn128_N8S19558C1D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn448_N8S19558C1D1Ev,_ZThn272_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn448_N8S19558C1D0Ev,_ZThn272_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn576_N8S19558C1D1Ev,_ZThn348_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn576_N8S19558C1D0Ev,_ZThn348_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn1168_N8S19558C1D1Ev,_ZThn712_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn1168_N8S19558C1D0Ev,_ZThn712_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n120_N8S19558C1D1Ev,_ZTv0_n60_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn1888_N8S19558C1D1Ev,_ZThn1140_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19558C1D0Ev,_ZTv0_n60_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn1888_N8S19558C1D0Ev,_ZThn1140_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN8S19558C23v14Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn64_n120_N8S19558C1D1Ev,_ZTvn36_n60_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn64_n120_N8S19558C1D0Ev,_ZTvn36_n60_N8S19558C1D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn288_n120_N8S19558C1D1Ev,_ZTvn180_n60_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn288_n120_N8S19558C1D0Ev,_ZTvn180_n60_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn432_n120_N8S19558C1D1Ev,_ZTvn264_n60_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn432_n120_N8S19558C1D0Ev,_ZTvn264_n60_N8S19558C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19558C1D1Ev,_ZTv0_n16_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn2568_N8S19558C1D1Ev,_ZThn1556_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19558C1D0Ev,_ZTv0_n16_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn2568_N8S19558C1D0Ev,_ZThn1556_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C1D1Ev,_ZTv0_n20_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn2592_N8S19558C1D1Ev,_ZThn1564_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C1D0Ev,_ZTv0_n20_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn2592_N8S19558C1D0Ev,_ZThn1564_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C1D1Ev,_ZTv0_n32_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn2720_N8S19558C1D1Ev,_ZThn1640_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C1D0Ev,_ZTv0_n32_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn2720_N8S19558C1D0Ev,_ZThn1640_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C1D1Ev,_ZTv0_n24_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn3440_N8S19558C1D1Ev,_ZThn2072_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C1D0Ev,_ZTv0_n24_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn3440_N8S19558C1D0Ev,_ZThn2072_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C1D1Ev,_ZTv0_n32_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn3712_N8S19558C1D1Ev,_ZThn2228_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C1D0Ev,_ZTv0_n32_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn3712_N8S19558C1D0Ev,_ZThn2228_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S19558C1D1Ev,_ZTv0_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19558C1D1Ev,_ZThn2372_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19558C1D0Ev,_ZTv0_n44_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn3936_N8S19558C1D0Ev,_ZThn2372_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN9S19558C123v12Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn64_n88_N8S19558C1D1Ev,_ZTvn36_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn64_n88_N8S19558C1D0Ev,_ZTvn36_n44_N8S19558C1D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn288_n88_N8S19558C1D1Ev,_ZTvn180_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn288_n88_N8S19558C1D0Ev,_ZTvn180_n44_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn432_n88_N8S19558C1D1Ev,_ZTvn264_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn432_n88_N8S19558C1D0Ev,_ZTvn264_n44_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn640_n88_N8S19558C1D1Ev,_ZTvn384_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn640_n88_N8S19558C1D0Ev,_ZTvn384_n44_N8S19558C1D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn1360_n88_N8S19558C1D1Ev,_ZTvn816_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn1360_n88_N8S19558C1D0Ev,_ZTvn816_n44_N8S19558C1D0Ev)();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn1920_n88_N8S19558C1D1Ev,_ZTvn1140_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn1920_n88_N8S19558C1D0Ev,_ZTvn1140_n44_N8S19558C1D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn2144_n88_N8S19558C1D1Ev,_ZTvn1284_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn2144_n88_N8S19558C1D0Ev,_ZTvn1284_n44_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn2272_n88_N8S19558C1D1Ev,_ZTvn1360_n44_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn2272_n88_N8S19558C1D0Ev,_ZTvn1360_n44_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n104_N8S19558C1D1Ev,_ZTv0_n52_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn6544_N8S19558C1D1Ev,_ZThn3952_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19558C1D0Ev,_ZTv0_n52_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn6544_N8S19558C1D0Ev,_ZThn3952_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN9S19558C163v13Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn560_n104_N8S19558C1D1Ev,_ZTvn324_n52_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn560_n104_N8S19558C1D0Ev,_ZTvn324_n52_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn688_n104_N8S19558C1D1Ev,_ZTvn400_n52_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn688_n104_N8S19558C1D0Ev,_ZTvn400_n52_N8S19558C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19558C1D1Ev,_ZTv0_n28_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn7536_N8S19558C1D1Ev,_ZThn4560_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19558C1D0Ev,_ZTv0_n28_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn7536_N8S19558C1D0Ev,_ZThn4560_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn16_n56_N8S19558C1D1Ev,_ZTvn8_n28_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19558C1D0Ev,_ZTvn8_n28_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn224_n56_N8S19558C1D1Ev,_ZTvn128_n28_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N8S19558C1D0Ev,_ZTvn128_n28_N8S19558C1D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn448_n56_N8S19558C1D1Ev,_ZTvn272_n28_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N8S19558C1D0Ev,_ZTvn272_n28_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn576_n56_N8S19558C1D1Ev,_ZTvn348_n28_N8S19558C1D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N8S19558C1D0Ev,_ZTvn348_n28_N8S19558C1D0Ev)();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19558C1D1Ev,_ZTv0_n36_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn8704_N8S19558C1D1Ev,_ZThn5272_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19558C1D0Ev,_ZTv0_n36_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn8704_N8S19558C1D0Ev,_ZThn5272_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C1D1Ev,_ZTv0_n32_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn9264_N8S19558C1D1Ev,_ZThn5596_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C1D0Ev,_ZTv0_n32_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn9264_N8S19558C1D0Ev,_ZThn5596_N8S19558C1D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n56_N8S19558C1D1Ev,_ZTv0_n28_N8S19558C1D1Ev)();
extern void ABISELECT(_ZThn10000_N8S19558C1D1Ev,_ZThn6040_N8S19558C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19558C1D0Ev,_ZTv0_n28_N8S19558C1D0Ev)();
extern void ABISELECT(_ZThn10000_N8S19558C1D0Ev,_ZThn6040_N8S19558C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19558C1[] = {
  ABISELECT(10000,6040),
  ABISELECT(9264,5596),
  ABISELECT(8704,5272),
  ABISELECT(7536,4560),
  ABISELECT(6544,3952),
  ABISELECT(3936,2372),
  ABISELECT(3712,2228),
  ABISELECT(2720,1640),
  ABISELECT(1888,1140),
  ABISELECT(2568,1556),
  ABISELECT(3440,2072),
  ABISELECT(3648,2192),
  ABISELECT(2592,1564),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C12v1Ev,
  ABISELECT(2576,1556),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19558C1D1Ev,_ZThn8_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19558C1D0Ev,_ZThn8_N8S19558C1D0Ev),
  ABISELECT(2344,1428),
  ABISELECT(3424,2064),
  ABISELECT(3216,1944),
  ABISELECT(2368,1436),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S19558C1D1Ev,_ZThn128_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S19558C1D0Ev,_ZThn128_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-448,-272),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S19558C1D1Ev,_ZThn272_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S19558C1D0Ev,_ZThn272_N8S19558C1D0Ev),
  ABISELECT(2016,1216),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N8S19558C1D1Ev,_ZThn348_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N8S19558C1D0Ev,_ZThn348_N8S19558C1D0Ev),
  ABISELECT(1424,852),
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1168_N8S19558C1D1Ev,_ZThn712_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1168_N8S19558C1D0Ev,_ZThn712_N8S19558C1D0Ev),
  0,
  ABISELECT(64,36),
  0,
  0,
  ABISELECT(-1888,-1140),
  0,
  0,
  ABISELECT(6816,4132),
  ABISELECT(5648,3420),
  ABISELECT(4656,2812),
  ABISELECT(2048,1232),
  ABISELECT(1824,1088),
  ABISELECT(1760,1052),
  ABISELECT(1552,932),
  ABISELECT(832,500),
  ABISELECT(704,424),
  ABISELECT(680,416),
  ABISELECT(-1888,-1140),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19558C1D1Ev,_ZTv0_n60_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19558C1D0Ev,_ZTv0_n60_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19558C23v14Ev,
  ABISELECT(1696,1016),
  ABISELECT(1488,896),
  ABISELECT(640,388),
  ABISELECT(-1952,-1176),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n120_N8S19558C1D1Ev,_ZTvn36_n60_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n120_N8S19558C1D0Ev,_ZTvn36_n60_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-2176,-1320),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n120_N8S19558C1D1Ev,_ZTvn180_n60_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n120_N8S19558C1D0Ev,_ZTvn180_n60_N8S19558C1D0Ev),
  ABISELECT(272,160),
  ABISELECT(-2320,-1404),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n120_N8S19558C1D1Ev,_ZTvn264_n60_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n120_N8S19558C1D0Ev,_ZTvn264_n60_N8S19558C1D0Ev),
  ABISELECT(-2568,-1556),
  ABISELECT(24,8),
  ABISELECT(-2568,-1556),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C1D1Ev,_ZTv0_n16_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C1D0Ev,_ZTv0_n16_N8S19558C1D0Ev),
  ABISELECT(-2592,-1564),
  0,
  0,
  ABISELECT(-2592,-1564),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C1D1Ev,_ZTv0_n20_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C1D0Ev,_ZTv0_n20_N8S19558C1D0Ev),
  0,
  0,
  ABISELECT(-2720,-1640),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2720,-1640),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C1D1Ev,_ZTv0_n32_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C1D0Ev,_ZTv0_n32_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-3440,-2072),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3440,-2072),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C1D1Ev,_ZTv0_n24_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C1D0Ev,_ZTv0_n24_N8S19558C1D0Ev),
  0,
  0,
  ABISELECT(-3648,-2192),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  0,
  ABISELECT(-3712,-2228),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-3712,-2228),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C1D1Ev,_ZTv0_n32_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C1D0Ev,_ZTv0_n32_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(1920,1140),
  ABISELECT(1920,1140),
  ABISELECT(1360,816),
  ABISELECT(1360,816),
  ABISELECT(640,384),
  0,
  ABISELECT(64,36),
  0,
  0,
  ABISELECT(-3936,-2372),
  0,
  0,
  ABISELECT(-224,-144),
  ABISELECT(-288,-180),
  ABISELECT(-496,-300),
  ABISELECT(-1216,-732),
  ABISELECT(-1344,-808),
  ABISELECT(-1368,-816),
  ABISELECT(-3936,-2372),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19558C1D1Ev,_ZTv0_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19558C1D0Ev,_ZTv0_n44_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN9S19558C123v12Ev,
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  ABISELECT(-4000,-2408),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19558C1D1Ev,_ZTvn36_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19558C1D0Ev,_ZTvn36_n44_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  ABISELECT(-4224,-2552),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n88_N8S19558C1D1Ev,_ZTvn180_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n88_N8S19558C1D0Ev,_ZTvn180_n44_N8S19558C1D0Ev),
  ABISELECT(-1776,-1072),
  ABISELECT(-4368,-2636),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n88_N8S19558C1D1Ev,_ZTvn264_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n88_N8S19558C1D0Ev,_ZTvn264_n44_N8S19558C1D0Ev),
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  ABISELECT(-4576,-2756),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n88_N8S19558C1D1Ev,_ZTvn384_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n88_N8S19558C1D0Ev,_ZTvn384_n44_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-1648,-996),
  ABISELECT(-1856,-1116),
  ABISELECT(-1584,-960),
  ABISELECT(-2704,-1624),
  ABISELECT(-5296,-3188),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1360_n88_N8S19558C1D1Ev,_ZTvn816_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1360_n88_N8S19558C1D0Ev,_ZTvn816_n44_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  ABISELECT(-5856,-3512),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1920_n88_N8S19558C1D1Ev,_ZTvn1140_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1920_n88_N8S19558C1D0Ev,_ZTvn1140_n44_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-6080,-3656),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2144_n88_N8S19558C1D1Ev,_ZTvn1284_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2144_n88_N8S19558C1D0Ev,_ZTvn1284_n44_N8S19558C1D0Ev),
  ABISELECT(-3616,-2168),
  ABISELECT(-6208,-3732),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2272_n88_N8S19558C1D1Ev,_ZTvn1360_n44_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2272_n88_N8S19558C1D0Ev,_ZTvn1360_n44_N8S19558C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-6544,-3952),
  0,
  0,
  ABISELECT(-3824,-2312),
  ABISELECT(2160,1320),
  ABISELECT(-3976,-2396),
  ABISELECT(992,608),
  ABISELECT(-2896,-1760),
  ABISELECT(-3104,-1880),
  ABISELECT(-2832,-1724),
  ABISELECT(-3952,-2388),
  ABISELECT(-6544,-3952),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19558C1D1Ev,_ZTv0_n52_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19558C1D0Ev,_ZTv0_n52_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  (VTBL_ENTRY)&_ZN9S19558C163v13Ev,
  ABISELECT(-3456,-2084),
  ABISELECT(-3664,-2204),
  ABISELECT(-4512,-2712),
  ABISELECT(-3392,-2048),
  ABISELECT(1600,996),
  ABISELECT(-7104,-4276),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn560_n104_N8S19558C1D1Ev,_ZTvn324_n52_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn560_n104_N8S19558C1D0Ev,_ZTvn324_n52_N8S19558C1D0Ev),
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  ABISELECT(-7232,-4352),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn688_n104_N8S19558C1D1Ev,_ZTvn400_n52_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn688_n104_N8S19558C1D0Ev,_ZTvn400_n52_N8S19558C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-7536,-4560),
  ABISELECT(-4968,-3004),
  ABISELECT(-4096,-2488),
  ABISELECT(-3888,-2368),
  ABISELECT(-4944,-2996),
  ABISELECT(-7536,-4560),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C1D1Ev,_ZTv0_n28_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C1D0Ev,_ZTv0_n28_N8S19558C1D0Ev),
  ABISELECT(-4960,-3004),
  ABISELECT(-7552,-4568),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19558C1D1Ev,_ZTvn8_n28_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19558C1D0Ev,_ZTvn8_n28_N8S19558C1D0Ev),
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  ABISELECT(-7760,-4688),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N8S19558C1D1Ev,_ZTvn128_n28_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N8S19558C1D0Ev,_ZTvn128_n28_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
  ABISELECT(-7984,-4832),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S19558C1D1Ev,_ZTvn272_n28_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S19558C1D0Ev,_ZTvn272_n28_N8S19558C1D0Ev),
  ABISELECT(-5520,-3344),
  ABISELECT(-8112,-4908),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S19558C1D1Ev,_ZTvn348_n28_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S19558C1D0Ev,_ZTvn348_n28_N8S19558C1D0Ev),
  0,
  0,
  ABISELECT(-8704,-5272),
  0,
  0,
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  ABISELECT(-8704,-5272),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19558C1D1Ev,_ZTv0_n36_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19558C1D0Ev,_ZTv0_n36_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  0,
  0,
  ABISELECT(-9264,-5596),
  0,
  0,
  ABISELECT(-5616,-3404),
  ABISELECT(-5824,-3524),
  ABISELECT(-6672,-4032),
  ABISELECT(-9264,-5596),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C1D1Ev,_ZTv0_n32_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C1D0Ev,_ZTv0_n32_N8S19558C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
  ABISELECT(-10000,-6040),
  0,
  0,
  ABISELECT(-6560,-3968),
  ABISELECT(-7408,-4476),
  ABISELECT(-10000,-6040),
  (VTBL_ENTRY)&(_ZTI8S19558C1[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C1D1Ev,_ZTv0_n28_N8S19558C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C1D0Ev,_ZTv0_n28_N8S19558C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19558C1[];
extern void _ZN9S19558C17D1Ev();
extern void _ZN9S19558C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C17__A__8S19558C1[] = {
  ABISELECT(2568,1556),
  ABISELECT(3440,2072),
  ABISELECT(3648,2192),
  ABISELECT(2592,1564),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN9S19558C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C17D0Ev,
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C49S19558C17__A2__8S19558C1[] = {
  ABISELECT(2592,1564),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZThn2592_N8S19558C4D1Ev,_ZThn1564_N8S19558C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
extern void ABISELECT(_ZThn2592_N8S19558C4D0Ev,_ZThn1564_N8S19558C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C49S19558C17__A2__8S19558C1[] = {
  ABISELECT(-2592,-1564),
  0,
  0,
  ABISELECT(-2592,-1564),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C17__A19__8S19558C1[] = {
  ABISELECT(2576,1556),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn2576_N8S19558C9D1Ev,_ZThn1556_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn2576_N8S19558C9D0Ev,_ZThn1556_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C17__A19__8S19558C1[] = {
  ABISELECT(-2576,-1556),
  0,
  0,
  ABISELECT(-2576,-1556),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(2344,1428),
  ABISELECT(3424,2064),
  ABISELECT(3216,1944),
  ABISELECT(2368,1436),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(2344,1428),
  ABISELECT(3424,2064),
  ABISELECT(3216,1944),
  ABISELECT(2368,1436),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[] = {
  ABISELECT(3424,2064),
  ABISELECT(3216,1944),
  ABISELECT(2368,1436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__A11__8S19558C1[] = {
  ABISELECT(2368,1436),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A20__8S19558C1[] = {
  ABISELECT(2368,1436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn2368_N8S19558C9D1Ev,_ZThn1436_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn2368_N8S19558C9D0Ev,_ZThn1436_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A20__8S19558C1[] = {
  ABISELECT(-2368,-1436),
  0,
  0,
  ABISELECT(-2368,-1436),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19558C10D1Ev,_ZThn1436_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19558C10D0Ev,_ZThn1436_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__A11__8S19558C1[] = {
  ABISELECT(-2368,-1436),
  0,
  0,
  ABISELECT(-2368,-1436),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn2368_N8S19558C8D1Ev,_ZThn1436_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn2368_N8S19558C8D0Ev,_ZThn1436_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[] = {
  ABISELECT(-2368,-1436),
  0,
  0,
  ABISELECT(-2368,-1436),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn3216_N8S19558C8D1Ev,_ZThn1944_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn3216_N8S19558C8D0Ev,_ZThn1944_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[] = {
  ABISELECT(-3216,-1944),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3216,-1944),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[] = {
  0,
  0,
  ABISELECT(-3424,-2064),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A21__8S19558C1[] = {
  ABISELECT(2016,1216),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn2016_N8S19558C9D1Ev,_ZThn1216_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn2016_N8S19558C9D0Ev,_ZThn1216_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A21__8S19558C1[] = {
  ABISELECT(-2016,-1216),
  0,
  0,
  ABISELECT(-2016,-1216),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__A2__8S19558C1[] = {
  0,
  0,
  ABISELECT(-3424,-2064),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19558C15D1Ev,_ZThn1436_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19558C15D0Ev,_ZThn1436_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(-2368,-1436),
  0,
  0,
  ABISELECT(-2368,-1436),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn3216_N9S19558C15D1Ev,_ZThn1944_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn3216_N9S19558C15D0Ev,_ZThn1944_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(-3216,-1944),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3216,-1944),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn2344_N9S19558C15D1Ev,_ZThn1428_N9S19558C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
extern void ABISELECT(_ZThn2344_N9S19558C15D0Ev,_ZThn1428_N9S19558C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(-2344,-1428),
  ABISELECT(24,8),
  ABISELECT(-2344,-1428),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(2016,1216),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C149S19558C17__A2__8S19558C1[] = {
  0,
  0,
  ABISELECT(-3424,-2064),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn2368_N9S19558C14D1Ev,_ZThn1436_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn2368_N9S19558C14D0Ev,_ZThn1436_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(-2368,-1436),
  0,
  0,
  ABISELECT(-2368,-1436),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn3216_N9S19558C14D1Ev,_ZThn1944_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn3216_N9S19558C14D0Ev,_ZThn1944_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(-3216,-1944),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3216,-1944),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn2344_N9S19558C14D1Ev,_ZThn1428_N9S19558C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
extern void ABISELECT(_ZThn2344_N9S19558C14D0Ev,_ZThn1428_N9S19558C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(-2344,-1428),
  ABISELECT(24,8),
  ABISELECT(-2344,-1428),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__A2__8S19558C1[] = {
  ABISELECT(2016,1216),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn2592_N9S19558C17D1Ev,_ZThn1564_N9S19558C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev)();
extern void ABISELECT(_ZThn2592_N9S19558C17D0Ev,_ZThn1564_N9S19558C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C17__A__8S19558C1[] = {
  ABISELECT(-2592,-1564),
  0,
  0,
  ABISELECT(-2592,-1564),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C17__A__8S19558C1[] = {
  ABISELECT(2576,1556),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C17__A__8S19558C1[] = {
  ABISELECT(2344,1428),
  ABISELECT(3424,2064),
  ABISELECT(3216,1944),
  ABISELECT(2368,1436),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A2__9S19558C17__A__8S19558C1[] = {
  0,
  0,
  ABISELECT(-3648,-2192),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn3440_N9S19558C17D1Ev,_ZThn2072_N9S19558C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev)();
extern void ABISELECT(_ZThn3440_N9S19558C17D0Ev,_ZThn2072_N9S19558C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C17__A__8S19558C1[] = {
  ABISELECT(-3440,-2072),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3440,-2072),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn2568_N9S19558C17D1Ev,_ZThn1556_N9S19558C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev)();
extern void ABISELECT(_ZThn2568_N9S19558C17D0Ev,_ZThn1556_N9S19558C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C17__A__8S19558C1[] = {
  ABISELECT(-2568,-1556),
  ABISELECT(24,8),
  ABISELECT(-2568,-1556),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__A__8S19558C1[] = {
  ABISELECT(2016,1216),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C10__A12__8S19558C1[] = {
  ABISELECT(1424,852),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C10__A22__8S19558C1[] = {
  ABISELECT(1424,852),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn1424_N8S19558C9D1Ev,_ZThn852_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn1424_N8S19558C9D0Ev,_ZThn852_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C10__A22__8S19558C1[] = {
  ABISELECT(-1424,-852),
  0,
  0,
  ABISELECT(-1424,-852),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn1424_N9S19558C10D1Ev,_ZThn852_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn1424_N9S19558C10D0Ev,_ZThn852_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C10__A12__8S19558C1[] = {
  ABISELECT(-1424,-852),
  0,
  0,
  ABISELECT(-1424,-852),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C2D1Ev();
extern void _ZN8S19558C2D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN8S19558C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C2__8S19558C1[] = {
  ABISELECT(6816,4132),
  ABISELECT(5648,3420),
  ABISELECT(4656,2812),
  ABISELECT(2048,1232),
  ABISELECT(1824,1088),
  ABISELECT(1760,1052),
  ABISELECT(1552,932),
  ABISELECT(832,500),
  ABISELECT(704,424),
  ABISELECT(680,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19558C23v14Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C3D1Ev();
extern void _ZN8S19558C3D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C38S19558C2__8S19558C1[] = {
  ABISELECT(1760,1052),
  ABISELECT(1552,932),
  ABISELECT(832,500),
  ABISELECT(704,424),
  ABISELECT(680,416),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C38S19558C2__A1__8S19558C1[] = {
  ABISELECT(1696,1016),
  ABISELECT(1488,896),
  ABISELECT(640,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C38S19558C2__A1__8S19558C1[] = {
  ABISELECT(640,388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C38S19558C2__A2__8S19558C1[] = {
  ABISELECT(640,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn640_N8S19558C9D1Ev,_ZThn388_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn640_N8S19558C9D0Ev,_ZThn388_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C38S19558C2__A2__8S19558C1[] = {
  ABISELECT(-640,-388),
  0,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn640_N9S19558C10D1Ev,_ZThn388_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn640_N9S19558C10D0Ev,_ZThn388_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C38S19558C2__A1__8S19558C1[] = {
  ABISELECT(-640,-388),
  0,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn640_N8S19558C8D1Ev,_ZThn388_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn640_N8S19558C8D0Ev,_ZThn388_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C38S19558C2__A1__8S19558C1[] = {
  ABISELECT(-640,-388),
  0,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn1488_N8S19558C8D1Ev,_ZThn896_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn1488_N8S19558C8D0Ev,_ZThn896_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C38S19558C2__A1__8S19558C1[] = {
  ABISELECT(-1488,-896),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1488,-896),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C38S19558C2__A1__8S19558C1[] = {
  0,
  0,
  ABISELECT(-1696,-1016),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn680_N8S19558C3D1Ev,_ZThn416_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn680_N8S19558C3D0Ev,_ZThn416_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C38S19558C2__8S19558C1[] = {
  ABISELECT(-680,-416),
  ABISELECT(24,8),
  ABISELECT(-680,-416),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn704_N8S19558C3D1Ev,_ZThn424_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn704_N8S19558C3D0Ev,_ZThn424_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C38S19558C2__8S19558C1[] = {
  ABISELECT(-704,-424),
  0,
  0,
  ABISELECT(-704,-424),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn832_N8S19558C3D1Ev,_ZThn500_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn832_N8S19558C3D0Ev,_ZThn500_N8S19558C3D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C38S19558C2__8S19558C1[] = {
  0,
  0,
  ABISELECT(-832,-500),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-832,-500),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C3D1Ev,_ZThn932_N8S19558C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C3D0Ev,_ZThn932_N8S19558C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C38S19558C2__8S19558C1[] = {
  ABISELECT(-1552,-932),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-932),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__8S19558C38S19558C2__8S19558C1[] = {
  0,
  0,
  ABISELECT(-1760,-1052),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__8S19558C38S19558C2__8S19558C1[] = {
  ABISELECT(1696,1016),
  ABISELECT(1488,896),
  ABISELECT(640,388),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C2__A6__8S19558C1[] = {
  ABISELECT(272,160),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C2__A10__8S19558C1[] = {
  ABISELECT(272,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZThn272_N8S19558C9D1Ev,_ZThn160_N8S19558C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
extern void ABISELECT(_ZThn272_N8S19558C9D0Ev,_ZThn160_N8S19558C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C2__A10__8S19558C1[] = {
  ABISELECT(-272,-160),
  0,
  0,
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZThn272_N9S19558C10D1Ev,_ZThn160_N9S19558C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
extern void ABISELECT(_ZThn272_N9S19558C10D0Ev,_ZThn160_N9S19558C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C2__A6__8S19558C1[] = {
  ABISELECT(-272,-160),
  0,
  0,
  ABISELECT(-272,-160),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19558C2D1Ev,_ZTv0_n16_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn680_N8S19558C2D1Ev,_ZThn416_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19558C2D0Ev,_ZTv0_n16_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn680_N8S19558C2D0Ev,_ZThn416_N8S19558C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C2__8S19558C1[] = {
  ABISELECT(-680,-416),
  ABISELECT(24,8),
  ABISELECT(-680,-416),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C2D1Ev,_ZTv0_n16_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C2D0Ev,_ZTv0_n16_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C2D1Ev,_ZTv0_n20_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn704_N8S19558C2D1Ev,_ZThn424_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C2D0Ev,_ZTv0_n20_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn704_N8S19558C2D0Ev,_ZThn424_N8S19558C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C2__8S19558C1[] = {
  ABISELECT(-704,-424),
  0,
  0,
  ABISELECT(-704,-424),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C2D1Ev,_ZTv0_n20_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C2D0Ev,_ZTv0_n20_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn832_N8S19558C2D1Ev,_ZThn500_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn832_N8S19558C2D0Ev,_ZThn500_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C2__8S19558C1[] = {
  0,
  0,
  ABISELECT(-832,-500),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-832,-500),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C2D1Ev,_ZTv0_n24_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C2D1Ev,_ZThn932_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C2D0Ev,_ZTv0_n24_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19558C2D0Ev,_ZThn932_N8S19558C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C2__8S19558C1[] = {
  ABISELECT(-1552,-932),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-932),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C2D1Ev,_ZTv0_n24_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C2D0Ev,_ZTv0_n24_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__8S19558C2__8S19558C1[] = {
  0,
  0,
  ABISELECT(-1760,-1052),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C2D1Ev,_ZThn36_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C2D0Ev,_ZThn36_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C3__A1__8S19558C2__8S19558C1[] = {
  ABISELECT(1696,1016),
  ABISELECT(1488,896),
  ABISELECT(640,388),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C2D1Ev,_ZThn36_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C2D0Ev,_ZThn36_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn1824_N8S19558C2D1Ev,_ZThn1088_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn1824_N8S19558C2D0Ev,_ZThn1088_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A2__8S19558C2__8S19558C1[] = {
  0,
  ABISELECT(-1824,-1088),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-1824,-1088),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n88_N8S19558C2D1Ev,_ZTv0_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn2048_N8S19558C2D1Ev,_ZThn1232_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19558C2D0Ev,_ZTv0_n44_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn2048_N8S19558C2D0Ev,_ZThn1232_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN9S19558C123v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C12__8S19558C2__8S19558C1[] = {
  ABISELECT(1920,1140),
  ABISELECT(1920,1140),
  ABISELECT(1360,816),
  ABISELECT(1360,816),
  ABISELECT(640,384),
  0,
  ABISELECT(64,36),
  0,
  0,
  ABISELECT(-2048,-1232),
  0,
  0,
  ABISELECT(-224,-144),
  ABISELECT(-288,-180),
  ABISELECT(-496,-300),
  ABISELECT(-1216,-732),
  ABISELECT(-1344,-808),
  ABISELECT(-1368,-816),
  ABISELECT(-2048,-1232),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19558C2D1Ev,_ZTv0_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19558C2D0Ev,_ZTv0_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN9S19558C123v12Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn64_n88_N8S19558C2D1Ev,_ZTvn36_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn64_n88_N8S19558C2D0Ev,_ZTvn36_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C39S19558C12__A3__8S19558C2__8S19558C1[] = {
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19558C2D1Ev,_ZTvn36_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n88_N8S19558C2D0Ev,_ZTvn36_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn288_n88_N8S19558C2D1Ev,_ZTvn180_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn288_n88_N8S19558C2D0Ev,_ZTvn180_n44_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C58S19558C39S19558C12__A2__8S19558C2__8S19558C1[] = {
  ABISELECT(-2336,-1412),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n88_N8S19558C2D1Ev,_ZTvn180_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn288_n88_N8S19558C2D0Ev,_ZTvn180_n44_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn432_n88_N8S19558C2D1Ev,_ZTvn264_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn432_n88_N8S19558C2D0Ev,_ZTvn264_n44_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C12__A5__8S19558C2__8S19558C1[] = {
  ABISELECT(-1776,-1072),
  ABISELECT(-2480,-1496),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n88_N8S19558C2D1Ev,_ZTvn264_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn432_n88_N8S19558C2D0Ev,_ZTvn264_n44_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn640_n88_N8S19558C2D1Ev,_ZTvn384_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn640_n88_N8S19558C2D0Ev,_ZTvn384_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C79S19558C12__A1__8S19558C2__8S19558C1[] = {
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  ABISELECT(-2688,-1616),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n88_N8S19558C2D1Ev,_ZTvn384_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n88_N8S19558C2D0Ev,_ZTvn384_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn1360_n88_N8S19558C2D1Ev,_ZTvn816_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn1360_n88_N8S19558C2D0Ev,_ZTvn816_n44_N8S19558C2D0Ev)();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C139S19558C12__8S19558C2__8S19558C1[] = {
  ABISELECT(-1648,-996),
  ABISELECT(-1856,-1116),
  ABISELECT(-1584,-960),
  ABISELECT(-2704,-1624),
  ABISELECT(-3408,-2048),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1360_n88_N8S19558C2D1Ev,_ZTvn816_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1360_n88_N8S19558C2D0Ev,_ZTvn816_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn1920_n88_N8S19558C2D1Ev,_ZTvn1140_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn1920_n88_N8S19558C2D0Ev,_ZTvn1140_n44_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C12__8S19558C2__8S19558C1[] = {
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  ABISELECT(-3968,-2372),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1920_n88_N8S19558C2D1Ev,_ZTvn1140_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1920_n88_N8S19558C2D0Ev,_ZTvn1140_n44_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn2144_n88_N8S19558C2D1Ev,_ZTvn1284_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn2144_n88_N8S19558C2D0Ev,_ZTvn1284_n44_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C59S19558C159S19558C149S19558C12__A3__8S19558C2__8S19558C1[] = {
  ABISELECT(-4192,-2516),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2144_n88_N8S19558C2D1Ev,_ZTvn1284_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2144_n88_N8S19558C2D0Ev,_ZTvn1284_n44_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn2272_n88_N8S19558C2D1Ev,_ZTvn1360_n44_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn2272_n88_N8S19558C2D0Ev,_ZTvn1360_n44_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C2__8S19558C1[] = {
  ABISELECT(-3616,-2168),
  ABISELECT(-4320,-2592),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2272_n88_N8S19558C2D1Ev,_ZTvn1360_n44_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2272_n88_N8S19558C2D0Ev,_ZTvn1360_n44_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn432_N8S19558C2D1Ev,_ZThn264_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn432_N8S19558C2D0Ev,_ZThn264_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C10__A6__8S19558C2__8S19558C1[] = {
  ABISELECT(272,160),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N8S19558C2D1Ev,_ZThn264_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N8S19558C2D0Ev,_ZThn264_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n104_N8S19558C2D1Ev,_ZTv0_n52_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn4656_N8S19558C2D1Ev,_ZThn2812_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19558C2D0Ev,_ZTv0_n52_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn4656_N8S19558C2D0Ev,_ZThn2812_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN9S19558C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C16__8S19558C2__8S19558C1[] = {
  0,
  0,
  0,
  ABISELECT(-4656,-2812),
  0,
  0,
  ABISELECT(-3824,-2312),
  ABISELECT(2160,1320),
  ABISELECT(-3976,-2396),
  ABISELECT(992,608),
  ABISELECT(-2896,-1760),
  ABISELECT(-3104,-1880),
  ABISELECT(-2832,-1724),
  ABISELECT(-3952,-2388),
  ABISELECT(-4656,-2812),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19558C2D1Ev,_ZTv0_n52_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19558C2D0Ev,_ZTv0_n52_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  (VTBL_ENTRY)&_ZN9S19558C163v13Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S19558C2D1Ev,_ZTv0_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn5648_N8S19558C2D1Ev,_ZThn3420_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19558C2D0Ev,_ZTv0_n28_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn5648_N8S19558C2D0Ev,_ZThn3420_N8S19558C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19558C17__8S19558C2__8S19558C1[] = {
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-5648,-3420),
  ABISELECT(-4968,-3004),
  ABISELECT(-4096,-2488),
  ABISELECT(-3888,-2368),
  ABISELECT(-4944,-2996),
  ABISELECT(-5648,-3420),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C2D1Ev,_ZTv0_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19558C2D0Ev,_ZTv0_n28_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn16_n56_N8S19558C2D1Ev,_ZTvn8_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19558C2D0Ev,_ZTvn8_n28_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C17__A11__8S19558C2__8S19558C1[] = {
  ABISELECT(-4960,-3004),
  ABISELECT(-5664,-3428),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19558C2D1Ev,_ZTvn8_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19558C2D0Ev,_ZTvn8_n28_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn224_n56_N8S19558C2D1Ev,_ZTvn128_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N8S19558C2D0Ev,_ZTvn128_n28_N8S19558C2D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C17__A1__8S19558C2__8S19558C1[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  ABISELECT(-5872,-3548),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N8S19558C2D1Ev,_ZTvn128_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N8S19558C2D0Ev,_ZTvn128_n28_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn448_n56_N8S19558C2D1Ev,_ZTvn272_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N8S19558C2D0Ev,_ZTvn272_n28_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C59S19558C159S19558C149S19558C17__A4__8S19558C2__8S19558C1[] = {
  ABISELECT(-6096,-3692),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S19558C2D1Ev,_ZTvn272_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S19558C2D0Ev,_ZTvn272_n28_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn576_n56_N8S19558C2D1Ev,_ZTvn348_n28_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N8S19558C2D0Ev,_ZTvn348_n28_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C2__8S19558C1[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-6224,-3768),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S19558C2D1Ev,_ZTvn348_n28_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S19558C2D0Ev,_ZTvn348_n28_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn560_n104_N8S19558C2D1Ev,_ZTvn324_n52_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn560_n104_N8S19558C2D0Ev,_ZTvn324_n52_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C189S19558C16__8S19558C2__8S19558C1[] = {
  ABISELECT(-3456,-2084),
  ABISELECT(-3664,-2204),
  ABISELECT(-4512,-2712),
  ABISELECT(-3392,-2048),
  ABISELECT(1600,996),
  ABISELECT(-5216,-3136),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn560_n104_N8S19558C2D1Ev,_ZTvn324_n52_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn560_n104_N8S19558C2D0Ev,_ZTvn324_n52_N8S19558C2D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19558C2D1Ev,_ZTv0_n36_N8S19558C2D1Ev)();
extern void ABISELECT(_ZThn6816_N8S19558C2D1Ev,_ZThn4132_N8S19558C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19558C2D0Ev,_ZTv0_n36_N8S19558C2D0Ev)();
extern void ABISELECT(_ZThn6816_N8S19558C2D0Ev,_ZThn4132_N8S19558C2D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__A2__8S19558C2__8S19558C1[] = {
  0,
  0,
  ABISELECT(-6816,-4132),
  0,
  0,
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  ABISELECT(-6816,-4132),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19558C2D1Ev,_ZTv0_n36_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19558C2D0Ev,_ZTv0_n36_N8S19558C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn688_n104_N8S19558C2D1Ev,_ZTvn400_n52_N8S19558C2D1Ev)();
extern void ABISELECT(_ZTvn688_n104_N8S19558C2D0Ev,_ZTvn400_n52_N8S19558C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C199S19558C189S19558C16__8S19558C2__8S19558C1[] = {
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  ABISELECT(-5344,-3212),
  (VTBL_ENTRY)&(_ZTI8S19558C2[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn688_n104_N8S19558C2D1Ev,_ZTvn400_n52_N8S19558C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn688_n104_N8S19558C2D0Ev,_ZTvn400_n52_N8S19558C2D0Ev),
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C1[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C4__8S19558C1[] = {
  ABISELECT(-24,-8),
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C1[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C7__8S19558C1[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C7__8S19558C1[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C1[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__8S19558C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C7__8S19558C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C7__8S19558C1[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C7__8S19558C1[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C7__8S19558C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
extern void ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C7__8S19558C1[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C7__8S19558C1[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C1[] = {
  ABISELECT(-848,-508),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C9__8S19558C1[] = {
  ABISELECT(848,508),
  0,
  0,
  ABISELECT(848,508),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A2__8S19558C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C8__A2__8S19558C1[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C8__A3__8S19558C1[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A3__8S19558C1[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C8__A2__8S19558C1[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C8__A2__8S19558C1[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C8__A2__8S19558C1[] = {
  ABISELECT(272,156),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C8__A2__8S19558C1[] = {
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C12D1Ev();
extern void _ZN9S19558C12D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
extern void _ZN9S19558C123v12Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C12__8S19558C1[] = {
  ABISELECT(-224,-144),
  ABISELECT(-288,-180),
  ABISELECT(-496,-300),
  ABISELECT(-1216,-732),
  ABISELECT(-1344,-808),
  ABISELECT(-1368,-816),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
  (VTBL_ENTRY)&_ZN9S19558C123v12Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C3D1Ev();
extern void _ZN8S19558C3D0Ev();
extern void _ZN8S19558C32v6Ev();
extern void _ZN8S19558C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C39S19558C12__A1__8S19558C1[] = {
  ABISELECT(-288,-180),
  ABISELECT(-496,-300),
  ABISELECT(-1216,-732),
  ABISELECT(-1344,-808),
  ABISELECT(-1368,-816),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19558C32v7Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C39S19558C12__A3__8S19558C1[] = {
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C1[] = {
  ABISELECT(-1408,-844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C1[] = {
  ABISELECT(-1408,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C1[] = {
  ABISELECT(1408,844),
  0,
  0,
  ABISELECT(1408,844),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C1[] = {
  ABISELECT(1408,844),
  0,
  0,
  ABISELECT(1408,844),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C39S19558C12__A3__8S19558C1[] = {
  ABISELECT(1408,844),
  0,
  0,
  ABISELECT(1408,844),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C39S19558C12__A3__8S19558C1[] = {
  ABISELECT(560,336),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(560,336),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C39S19558C12__A3__8S19558C1[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__8S19558C39S19558C12__A1__8S19558C1[] = {
  ABISELECT(1368,816),
  ABISELECT(24,8),
  ABISELECT(1368,816),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C39S19558C12__A1__8S19558C1[] = {
  ABISELECT(1344,808),
  0,
  0,
  ABISELECT(1344,808),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__8S19558C39S19558C12__A1__8S19558C1[] = {
  0,
  0,
  ABISELECT(1216,732),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(1216,732),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C39S19558C12__A1__8S19558C1[] = {
  ABISELECT(496,300),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(496,300),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__8S19558C39S19558C12__A1__8S19558C1[] = {
  0,
  0,
  ABISELECT(288,180),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__8S19558C39S19558C12__A1__8S19558C1[] = {
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19558C3[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D1Ev,_ZThn36_N8S19558C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19558C3D0Ev,_ZThn36_N8S19558C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C12__A5__8S19558C1[] = {
  ABISELECT(-1776,-1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C12__A5__8S19558C1[] = {
  ABISELECT(1776,1072),
  0,
  0,
  ABISELECT(1776,1072),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C79S19558C12__A1__8S19558C1[] = {
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C79S19558C12__A4__8S19558C1[] = {
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C1[] = {
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C1[] = {
  ABISELECT(-1984,-1192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C1[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C1[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C79S19558C12__A4__8S19558C1[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C79S19558C12__A4__8S19558C1[] = {
  ABISELECT(1136,684),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(1136,684),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C79S19558C12__A4__8S19558C1[] = {
  0,
  0,
  ABISELECT(928,564),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C79S19558C12__A1__8S19558C1[] = {
  ABISELECT(1984,1192),
  0,
  0,
  ABISELECT(1984,1192),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C79S19558C12__A1__8S19558C1[] = {
  ABISELECT(1136,684),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(1136,684),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C79S19558C12__A1__8S19558C1[] = {
  0,
  0,
  ABISELECT(928,564),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C139S19558C12__8S19558C1[] = {
  ABISELECT(-1648,-996),
  ABISELECT(-1856,-1116),
  ABISELECT(-1584,-960),
  ABISELECT(-2704,-1624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C139S19558C12__A7__8S19558C1[] = {
  ABISELECT(-2704,-1624),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C139S19558C12__A7__8S19558C1[] = {
  ABISELECT(2704,1624),
  0,
  0,
  ABISELECT(2704,1624),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C139S19558C12__8S19558C1[] = {
  0,
  ABISELECT(1584,960),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(1584,960),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C139S19558C12__8S19558C1[] = {
  ABISELECT(2704,1624),
  0,
  0,
  ABISELECT(2704,1624),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C139S19558C12__8S19558C1[] = {
  ABISELECT(1856,1116),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(1856,1116),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C139S19558C12__8S19558C1[] = {
  0,
  0,
  ABISELECT(1648,996),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[] = {
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[] = {
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C1[] = {
  ABISELECT(-3264,-1948),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C1[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[] = {
  ABISELECT(2416,1440),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(2416,1440),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[] = {
  0,
  0,
  ABISELECT(2208,1320),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C1[] = {
  ABISELECT(-3616,-2168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C1[] = {
  ABISELECT(3616,2168),
  0,
  0,
  ABISELECT(3616,2168),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C149S19558C12__8S19558C1[] = {
  0,
  0,
  ABISELECT(2208,1320),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(2416,1440),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(2416,1440),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(3288,1956),
  ABISELECT(24,8),
  ABISELECT(3288,1956),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(-3616,-2168),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C149S19558C12__8S19558C1[] = {
  0,
  0,
  ABISELECT(2208,1320),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(3264,1948),
  0,
  0,
  ABISELECT(3264,1948),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(2416,1440),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(2416,1440),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(3288,1956),
  ABISELECT(24,8),
  ABISELECT(3288,1956),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C12__8S19558C1[] = {
  ABISELECT(-3616,-2168),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C12D1Ev,_ZTv0_n16_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C12D0Ev,_ZTv0_n16_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C12__8S19558C1[] = {
  ABISELECT(1368,816),
  ABISELECT(24,8),
  ABISELECT(1368,816),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C12D1Ev,_ZTv0_n16_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C12D0Ev,_ZTv0_n16_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C12D1Ev,_ZTv0_n20_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C12D0Ev,_ZTv0_n20_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C12__8S19558C1[] = {
  ABISELECT(1344,808),
  0,
  0,
  ABISELECT(1344,808),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C12D1Ev,_ZTv0_n20_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C12D0Ev,_ZTv0_n20_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__9S19558C12__8S19558C1[] = {
  0,
  0,
  ABISELECT(1216,732),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(1216,732),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C12D1Ev,_ZTv0_n24_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C12D0Ev,_ZTv0_n24_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C12__8S19558C1[] = {
  ABISELECT(496,300),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(496,300),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C12D1Ev,_ZTv0_n24_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C12D0Ev,_ZTv0_n24_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__9S19558C12__8S19558C1[] = {
  0,
  0,
  ABISELECT(288,180),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn64_N9S19558C12D1Ev,_ZThn36_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19558C12D0Ev,_ZThn36_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C3__A1__9S19558C12__8S19558C1[] = {
  ABISELECT(-352,-216),
  ABISELECT(-560,-336),
  ABISELECT(-1408,-844),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19558C12D1Ev,_ZThn36_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19558C12D0Ev,_ZThn36_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn432_N9S19558C12D1Ev,_ZThn264_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn432_N9S19558C12D0Ev,_ZThn264_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C12__8S19558C1[] = {
  ABISELECT(-1776,-1072),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N9S19558C12D1Ev,_ZThn264_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N9S19558C12D0Ev,_ZThn264_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn640_N9S19558C12D1Ev,_ZThn384_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn640_N9S19558C12D0Ev,_ZThn384_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__A__9S19558C12__8S19558C1[] = {
  ABISELECT(-928,-564),
  ABISELECT(-1136,-684),
  ABISELECT(-1984,-1192),
  ABISELECT(-640,-384),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N9S19558C12D1Ev,_ZThn384_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N9S19558C12D0Ev,_ZThn384_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn1360_N9S19558C12D1Ev,_ZThn816_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19558C12D0Ev,_ZThn816_N9S19558C12D0Ev)();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__9S19558C12__8S19558C1[] = {
  ABISELECT(-1648,-996),
  ABISELECT(-1856,-1116),
  ABISELECT(-1584,-960),
  ABISELECT(-2704,-1624),
  ABISELECT(-1360,-816),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N9S19558C12D1Ev,_ZThn816_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N9S19558C12D0Ev,_ZThn816_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A3__9S19558C12__8S19558C1[] = {
  0,
  ABISELECT(224,144),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(224,144),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D1Ev,_ZTv0_n32_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C12D0Ev,_ZTv0_n32_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn1920_N9S19558C12D1Ev,_ZThn1140_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn1920_N9S19558C12D0Ev,_ZThn1140_N9S19558C12D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C12__8S19558C1[] = {
  ABISELECT(-3288,-1956),
  ABISELECT(-2208,-1320),
  ABISELECT(-2416,-1440),
  ABISELECT(-3264,-1948),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S19558C12D1Ev,_ZThn1140_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S19558C12D0Ev,_ZThn1140_N9S19558C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn2272_N9S19558C12D1Ev,_ZThn1360_N9S19558C12D1Ev)();
extern void ABISELECT(_ZThn2272_N9S19558C12D0Ev,_ZThn1360_N9S19558C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A8__9S19558C12__8S19558C1[] = {
  ABISELECT(-3616,-2168),
  ABISELECT(-2272,-1360),
  (VTBL_ENTRY)&(_ZTI9S19558C12[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N9S19558C12D1Ev,_ZThn1360_N9S19558C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N9S19558C12D0Ev,_ZThn1360_N9S19558C12D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C16D1Ev();
extern void _ZN9S19558C16D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
extern void _ZN9S19558C163v13Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C16__8S19558C1[] = {
  ABISELECT(-3824,-2312),
  ABISELECT(2160,1320),
  ABISELECT(-3976,-2396),
  ABISELECT(992,608),
  ABISELECT(-2896,-1760),
  ABISELECT(-3104,-1880),
  ABISELECT(-2832,-1724),
  ABISELECT(-3952,-2388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C16D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
  (VTBL_ENTRY)&_ZN9S19558C163v13Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C139S19558C16__A1__8S19558C1[] = {
  ABISELECT(-2896,-1760),
  ABISELECT(-3104,-1880),
  ABISELECT(-2832,-1724),
  ABISELECT(-3952,-2388),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C139S19558C16__A14__8S19558C1[] = {
  ABISELECT(-3952,-2388),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C139S19558C16__A14__8S19558C1[] = {
  ABISELECT(3952,2388),
  0,
  0,
  ABISELECT(3952,2388),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C139S19558C16__A1__8S19558C1[] = {
  0,
  ABISELECT(2832,1724),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(2832,1724),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C139S19558C16__A1__8S19558C1[] = {
  ABISELECT(3952,2388),
  0,
  0,
  ABISELECT(3952,2388),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C139S19558C16__A1__8S19558C1[] = {
  ABISELECT(3104,1880),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3104,1880),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C139S19558C16__A1__8S19558C1[] = {
  0,
  0,
  ABISELECT(2896,1760),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C18D1Ev();
extern void _ZN9S19558C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C189S19558C16__8S19558C1[] = {
  ABISELECT(-3456,-2084),
  ABISELECT(-3664,-2204),
  ABISELECT(-4512,-2712),
  ABISELECT(-3392,-2048),
  ABISELECT(1600,996),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C18D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C19D1Ev();
extern void _ZN9S19558C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C199S19558C189S19558C16__8S19558C1[] = {
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C1[] = {
  ABISELECT(-4640,-2788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C1[] = {
  ABISELECT(-4640,-2788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C1[] = {
  ABISELECT(4640,2788),
  0,
  0,
  ABISELECT(4640,2788),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C1[] = {
  ABISELECT(4640,2788),
  0,
  0,
  ABISELECT(4640,2788),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C199S19558C189S19558C16__8S19558C1[] = {
  ABISELECT(4640,2788),
  0,
  0,
  ABISELECT(4640,2788),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C199S19558C189S19558C16__8S19558C1[] = {
  ABISELECT(3792,2280),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3792,2280),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn1600_N9S19558C18D1Ev,_ZThn996_N9S19558C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev)();
extern void ABISELECT(_ZThn1600_N9S19558C18D0Ev,_ZThn996_N9S19558C18D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__9S19558C189S19558C16__8S19558C1[] = {
  0,
  0,
  ABISELECT(-1600,-996),
  0,
  0,
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  ABISELECT(-1600,-996),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C189S19558C16__8S19558C1[] = {
  0,
  ABISELECT(3392,2048),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(3392,2048),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D1Ev,_ZTv0_n32_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C18D0Ev,_ZTv0_n32_N9S19558C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__A1__9S19558C189S19558C16__8S19558C1[] = {
  ABISELECT(4512,2712),
  0,
  0,
  ABISELECT(4512,2712),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D1Ev,_ZTv0_n20_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C18D0Ev,_ZTv0_n20_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C189S19558C16__8S19558C1[] = {
  ABISELECT(3664,2204),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3664,2204),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D1Ev,_ZTv0_n24_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C18D0Ev,_ZTv0_n24_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A4__9S19558C189S19558C16__8S19558C1[] = {
  0,
  0,
  ABISELECT(3456,2084),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C19__9S19558C189S19558C16__8S19558C1[] = {
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI9S19558C18[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D1Ev,_ZThn76_N9S19558C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N9S19558C18D0Ev,_ZThn76_N9S19558C18D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C16D1Ev,_ZTv0_n24_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C16D0Ev,_ZTv0_n24_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C16__8S19558C1[] = {
  ABISELECT(3104,1880),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(3104,1880),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C16D1Ev,_ZTv0_n24_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C16D0Ev,_ZTv0_n24_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C16D1Ev,_ZTv0_n20_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C16D0Ev,_ZTv0_n20_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C16__8S19558C1[] = {
  ABISELECT(3952,2388),
  0,
  0,
  ABISELECT(3952,2388),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C16D1Ev,_ZTv0_n20_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C16D0Ev,_ZTv0_n20_N9S19558C16D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn992_N9S19558C16D1Ev,_ZThn608_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn992_N9S19558C16D0Ev,_ZThn608_N9S19558C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19558C17__9S19558C16__8S19558C1[] = {
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-992,-608),
  ABISELECT(-4968,-3004),
  ABISELECT(-4096,-2488),
  ABISELECT(-3888,-2368),
  ABISELECT(-4944,-2996),
  ABISELECT(-992,-608),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn16_n56_N9S19558C16D1Ev,_ZTvn8_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N9S19558C16D0Ev,_ZTvn8_n28_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C17__A1__9S19558C16__8S19558C1[] = {
  ABISELECT(-4960,-3004),
  ABISELECT(-1008,-616),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S19558C16D1Ev,_ZTvn8_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S19558C16D0Ev,_ZTvn8_n28_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn224_n56_N9S19558C16D1Ev,_ZTvn128_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N9S19558C16D0Ev,_ZTvn128_n28_N9S19558C16D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C17__9S19558C16__8S19558C1[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  ABISELECT(-1216,-736),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N9S19558C16D1Ev,_ZTvn128_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N9S19558C16D0Ev,_ZTvn128_n28_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C16__8S19558C1[] = {
  0,
  0,
  ABISELECT(2896,1760),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn448_n56_N9S19558C16D1Ev,_ZTvn272_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N9S19558C16D0Ev,_ZTvn272_n28_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C59S19558C159S19558C149S19558C17__A1__9S19558C16__8S19558C1[] = {
  ABISELECT(-1440,-880),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N9S19558C16D1Ev,_ZTvn272_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N9S19558C16D0Ev,_ZTvn272_n28_N9S19558C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C16D1Ev,_ZTv0_n16_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C16D0Ev,_ZTv0_n16_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C16__8S19558C1[] = {
  ABISELECT(3976,2396),
  ABISELECT(24,8),
  ABISELECT(3976,2396),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C16D1Ev,_ZTv0_n16_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C16D0Ev,_ZTv0_n16_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTvn576_n56_N9S19558C16D1Ev,_ZTvn348_n28_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N9S19558C16D0Ev,_ZTvn348_n28_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16__8S19558C1[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-1568,-956),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N9S19558C16D1Ev,_ZTvn348_n28_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N9S19558C16D0Ev,_ZTvn348_n28_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__A1__9S19558C16__8S19558C1[] = {
  0,
  ABISELECT(2832,1724),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(2832,1724),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn560_N9S19558C16D1Ev,_ZThn324_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn560_N9S19558C16D0Ev,_ZThn324_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C18__9S19558C16__8S19558C1[] = {
  ABISELECT(-3456,-2084),
  ABISELECT(-3664,-2204),
  ABISELECT(-4512,-2712),
  ABISELECT(-3392,-2048),
  ABISELECT(1600,996),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N9S19558C16D1Ev,_ZThn324_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N9S19558C16D0Ev,_ZThn324_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn2160_N9S19558C16D1Ev,_ZThn1320_N9S19558C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev)();
extern void ABISELECT(_ZThn2160_N9S19558C16D0Ev,_ZThn1320_N9S19558C16D0Ev)() __attribute__((weak));
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__A1__9S19558C16__8S19558C1[] = {
  0,
  0,
  ABISELECT(-2160,-1320),
  0,
  0,
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  ABISELECT(-2160,-1320),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn688_N9S19558C16D1Ev,_ZThn400_N9S19558C16D1Ev)();
extern void ABISELECT(_ZThn688_N9S19558C16D0Ev,_ZThn400_N9S19558C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19558C199S19558C18__9S19558C16__8S19558C1[] = {
  ABISELECT(-3792,-2280),
  ABISELECT(-4640,-2788),
  ABISELECT(-688,-400),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N9S19558C16D1Ev,_ZThn400_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N9S19558C16D0Ev,_ZThn400_N9S19558C16D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C7__9S19558C16__8S19558C1[] = {
  0,
  0,
  ABISELECT(3824,2312),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(3824,2312),
  (VTBL_ENTRY)&(_ZTI9S19558C16[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D1Ev,_ZTv0_n32_N9S19558C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C16D0Ev,_ZTv0_n32_N9S19558C16D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN9S19558C17D1Ev();
extern void _ZN9S19558C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C17__8S19558C1[] = {
  ABISELECT(-4968,-3004),
  ABISELECT(-4096,-2488),
  ABISELECT(-3888,-2368),
  ABISELECT(-4944,-2996),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN9S19558C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C17D0Ev,
};
extern void _ZN8S19558C4D1Ev();
extern void _ZN8S19558C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C49S19558C17__A1__8S19558C1[] = {
  ABISELECT(-4944,-2996),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C4D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C49S19558C17__A1__8S19558C1[] = {
  ABISELECT(4944,2996),
  0,
  0,
  ABISELECT(4944,2996),
  (VTBL_ENTRY)&(_ZTI8S19558C4[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C17__A11__8S19558C1[] = {
  ABISELECT(-4960,-3004),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C17__A11__8S19558C1[] = {
  ABISELECT(4960,3004),
  0,
  0,
  ABISELECT(4960,3004),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C14D1Ev();
extern void _ZN9S19558C14D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C14D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C15D1Ev();
extern void _ZN9S19558C15D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C159S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[] = {
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C1[] = {
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C1[] = {
  ABISELECT(-5168,-3124),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C1[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C1[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[] = {
  ABISELECT(4320,2616),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4320,2616),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[] = {
  0,
  0,
  ABISELECT(4112,2496),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C1[] = {
  ABISELECT(-5520,-3344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C1[] = {
  ABISELECT(5520,3344),
  0,
  0,
  ABISELECT(5520,3344),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__A1__8S19558C1[] = {
  0,
  0,
  ABISELECT(4112,2496),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(4320,2616),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4320,2616),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(5192,3132),
  ABISELECT(24,8),
  ABISELECT(5192,3132),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C15[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D1Ev,_ZThn220_N9S19558C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C15D0Ev,_ZThn220_N9S19558C15D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__9S19558C149S19558C17__A1__8S19558C1[] = {
  0,
  0,
  ABISELECT(4112,2496),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(5168,3124),
  0,
  0,
  ABISELECT(5168,3124),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(4320,2616),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4320,2616),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__9S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(5192,3132),
  ABISELECT(24,8),
  ABISELECT(5192,3132),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev)();
extern void ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__A1__8S19558C1[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI9S19558C14[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D1Ev,_ZThn220_N9S19558C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19558C14D0Ev,_ZThn220_N9S19558C14D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C17__8S19558C1[] = {
  ABISELECT(4944,2996),
  0,
  0,
  ABISELECT(4944,2996),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A__9S19558C17__8S19558C1[] = {
  ABISELECT(-4960,-3004),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D1Ev,_ZThn8_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19558C17D0Ev,_ZThn8_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev)();
extern void _ZN8S19558C82v4Ev();
extern void _ZN9S19558C153v10Ev();
extern void _ZN9S19558C143v11Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C14__9S19558C17__8S19558C1[] = {
  ABISELECT(-5192,-3132),
  ABISELECT(-4112,-2496),
  ABISELECT(-4320,-2616),
  ABISELECT(-5168,-3124),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D1Ev,_ZThn128_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S19558C17D0Ev,_ZThn128_N9S19558C17D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN9S19558C153v10Ev,
  (VTBL_ENTRY)&_ZN9S19558C143v11Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A2__9S19558C17__8S19558C1[] = {
  0,
  0,
  ABISELECT(3888,2368),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C17__8S19558C1[] = {
  ABISELECT(4096,2488),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(4096,2488),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C4__A1__9S19558C17__8S19558C1[] = {
  ABISELECT(4968,3004),
  ABISELECT(24,8),
  ABISELECT(4968,3004),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev)();
extern void ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__8S19558C1[] = {
  ABISELECT(-5520,-3344),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI9S19558C17[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D1Ev,_ZThn348_N9S19558C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N9S19558C17D0Ev,_ZThn348_N9S19558C17D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C13D1Ev();
extern void _ZN9S19558C13D0Ev();
extern void _ZN9S19558C132v8Ev();
extern void _ZN9S19558C132v9Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C13__A2__8S19558C1[] = {
  ABISELECT(-5056,-3080),
  ABISELECT(-5264,-3200),
  ABISELECT(-4992,-3044),
  ABISELECT(-6112,-3708),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v8Ev,
  (VTBL_ENTRY)&_ZN9S19558C132v9Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C13__A15__8S19558C1[] = {
  ABISELECT(-6112,-3708),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C13__A15__8S19558C1[] = {
  ABISELECT(6112,3708),
  0,
  0,
  ABISELECT(6112,3708),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev)();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C8__9S19558C13__A2__8S19558C1[] = {
  0,
  ABISELECT(4992,3044),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(4992,3044),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D1Ev,_ZTv0_n32_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19558C13D0Ev,_ZTv0_n32_N9S19558C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C13__A2__8S19558C1[] = {
  ABISELECT(6112,3708),
  0,
  0,
  ABISELECT(6112,3708),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D1Ev,_ZTv0_n20_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C13D0Ev,_ZTv0_n20_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C13__A2__8S19558C1[] = {
  ABISELECT(5264,3200),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(5264,3200),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D1Ev,_ZTv0_n24_N9S19558C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C13D0Ev,_ZTv0_n24_N9S19558C13D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C13__A2__8S19558C1[] = {
  0,
  0,
  ABISELECT(5056,3080),
  (VTBL_ENTRY)&(_ZTI9S19558C13[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C21D1Ev();
extern void _ZN9S19558C21D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C21__8S19558C1[] = {
  ABISELECT(-5616,-3404),
  ABISELECT(-5824,-3524),
  ABISELECT(-6672,-4032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C21D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C7D1Ev();
extern void _ZN8S19558C7D0Ev();
extern void _ZN8S19558C82v4Ev();
extern void _ZN8S19558C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C79S19558C21__A2__8S19558C1[] = {
  ABISELECT(-5616,-3404),
  ABISELECT(-5824,-3524),
  ABISELECT(-6672,-4032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
  (VTBL_ENTRY)&_ZN8S19558C72v5Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C8D1Ev();
extern void _ZN8S19558C8D0Ev();
extern void _ZN8S19558C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C88S19558C79S19558C21__A7__8S19558C1[] = {
  ABISELECT(-5616,-3404),
  ABISELECT(-5824,-3524),
  ABISELECT(-6672,-4032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19558C82v4Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C108S19558C88S19558C79S19558C21__A9__8S19558C1[] = {
  ABISELECT(-6672,-4032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C108S19558C88S19558C79S19558C21__A17__8S19558C1[] = {
  ABISELECT(-6672,-4032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C79S19558C21__A17__8S19558C1[] = {
  ABISELECT(6672,4032),
  0,
  0,
  ABISELECT(6672,4032),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C108S19558C88S19558C79S19558C21__A9__8S19558C1[] = {
  ABISELECT(6672,4032),
  0,
  0,
  ABISELECT(6672,4032),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C88S19558C79S19558C21__A7__8S19558C1[] = {
  ABISELECT(6672,4032),
  0,
  0,
  ABISELECT(6672,4032),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C88S19558C79S19558C21__A7__8S19558C1[] = {
  ABISELECT(5824,3524),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(5824,3524),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C88S19558C79S19558C21__A7__8S19558C1[] = {
  0,
  0,
  ABISELECT(5616,3404),
  (VTBL_ENTRY)&(_ZTI8S19558C8[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C79S19558C21__A2__8S19558C1[] = {
  ABISELECT(6672,4032),
  0,
  0,
  ABISELECT(6672,4032),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D1Ev,_ZTv0_n20_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C7D0Ev,_ZTv0_n20_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__8S19558C79S19558C21__A2__8S19558C1[] = {
  ABISELECT(5824,3524),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(5824,3524),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__8S19558C79S19558C21__A2__8S19558C1[] = {
  0,
  0,
  ABISELECT(5616,3404),
  (VTBL_ENTRY)&(_ZTI8S19558C7[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C21D1Ev,_ZTv0_n20_N9S19558C21D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C21D0Ev,_ZTv0_n20_N9S19558C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C21__8S19558C1[] = {
  ABISELECT(6672,4032),
  0,
  0,
  ABISELECT(6672,4032),
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C21D1Ev,_ZTv0_n20_N9S19558C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C21D0Ev,_ZTv0_n20_N9S19558C21D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C21D1Ev,_ZTv0_n24_N9S19558C21D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C21D0Ev,_ZTv0_n24_N9S19558C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__9S19558C21__8S19558C1[] = {
  ABISELECT(5824,3524),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(5824,3524),
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C21D1Ev,_ZTv0_n24_N9S19558C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C21D0Ev,_ZTv0_n24_N9S19558C21D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C6__A3__9S19558C21__8S19558C1[] = {
  0,
  0,
  ABISELECT(5616,3404),
  (VTBL_ENTRY)&(_ZTI9S19558C21[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C19D1Ev();
extern void _ZN9S19558C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C19__A1__8S19558C1[] = {
  ABISELECT(-6560,-3968),
  ABISELECT(-7408,-4476),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C19D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN9S19558C10D1Ev();
extern void _ZN9S19558C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19558C109S19558C19__A10__8S19558C1[] = {
  ABISELECT(-7408,-4476),
  0,
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19558C10D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void _ZN8S19558C9D1Ev();
extern void _ZN8S19558C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19558C99S19558C109S19558C19__A18__8S19558C1[] = {
  ABISELECT(-7408,-4476),
  0,
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19558C9D0Ev,
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__8S19558C99S19558C109S19558C19__A18__8S19558C1[] = {
  ABISELECT(7408,4476),
  0,
  0,
  ABISELECT(7408,4476),
  (VTBL_ENTRY)&(_ZTI8S19558C9[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C109S19558C19__A10__8S19558C1[] = {
  ABISELECT(7408,4476),
  0,
  0,
  ABISELECT(7408,4476),
  (VTBL_ENTRY)&(_ZTI9S19558C10[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C5__9S19558C19__A1__8S19558C1[] = {
  ABISELECT(7408,4476),
  0,
  0,
  ABISELECT(7408,4476),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D1Ev,_ZTv0_n20_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19558C19D0Ev,_ZTv0_n20_N9S19558C19D0Ev),
};
extern void _ZN8S19558C62v2Ev();
extern void _ZN8S19558C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19558C9__A1__9S19558C19__A1__8S19558C1[] = {
  ABISELECT(6560,3968),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(6560,3968),
  (VTBL_ENTRY)&(_ZTI9S19558C19[0]),
  (VTBL_ENTRY)&_ZN8S19558C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19558C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D1Ev,_ZTv0_n24_N9S19558C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19558C19D0Ev,_ZTv0_n24_N9S19558C19D0Ev),
};
static  VTT_ENTRY vtt_S19558C1[] = {
  {&(_ZTV8S19558C1[15]),  15,400},
  {&(_tg__ZTV9S19558C17__A__8S19558C1[6]),  6,8},
  {&(_tg__ZTV8S19558C49S19558C17__A2__8S19558C1[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C49S19558C17__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C99S19558C17__A19__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C17__A19__8S19558C1[5]),  5,9},
  {&(_tg__ZTV9S19558C149S19558C17__A2__8S19558C1[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C149S19558C17__A2__8S19558C1[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__A11__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A20__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A20__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__A11__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__A8__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A21__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A21__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__A2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__A2__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__A2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__A2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C149S19558C17__A2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C149S19558C17__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C149S19558C17__A2__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C149S19558C17__A2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__A2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__9S19558C17__A__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A__9S19558C17__A__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C14__9S19558C17__A__8S19558C1[6]),  6,13},
  {&(_tg__ZTV8S19558C6__A2__9S19558C17__A__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A1__9S19558C17__A__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__A1__9S19558C17__A__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__A__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C10__A12__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C10__A22__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C10__A22__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C10__A12__8S19558C1[5]),  5,9},
  {&(_ZTV8S19558C1[77]),  77,400},
  {&(_ZTV8S19558C1[111]),  111,400},
  {&(_ZTV8S19558C1[118]),  118,400},
  {&(_ZTV8S19558C1[132]),  132,400},
  {&(_ZTV8S19558C1[144]),  144,400},
  {&(_ZTV8S19558C1[152]),  152,400},
  {&(_ZTV8S19558C1[89]),  89,400},
  {&(_ZTV8S19558C1[96]),  96,400},
  {&(_ZTV8S19558C1[163]),  163,400},
  {&(_ZTV8S19558C1[188]),  188,400},
  {&(_ZTV8S19558C1[200]),  200,400},
  {&(_ZTV8S19558C1[207]),  207,400},
  {&(_ZTV8S19558C1[214]),  214,400},
  {&(_ZTV8S19558C1[223]),  223,400},
  {&(_ZTV8S19558C1[235]),  235,400},
  {&(_ZTV8S19558C1[247]),  247,400},
  {&(_ZTV8S19558C1[256]),  256,400},
  {&(_ZTV8S19558C1[263]),  263,400},
  {&(_ZTV8S19558C1[103]),  103,400},
  {&(_ZTV8S19558C1[283]),  283,400},
  {&(_ZTV8S19558C1[321]),  321,400},
  {&(_ZTV8S19558C1[326]),  326,400},
  {&(_ZTV8S19558C1[336]),  336,400},
  {&(_ZTV8S19558C1[345]),  345,400},
  {&(_ZTV8S19558C1[352]),  352,400},
  {&(_ZTV8S19558C1[297]),  297,400},
  {&(_ZTV8S19558C1[367]),  367,400},
  {&(_ZTV8S19558C1[305]),  305,400},
  {&(_ZTV8S19558C1[383]),  383,400},
  {&(_ZTV8S19558C1[396]),  396,400},
  {&(_ZTV8S19558C1[21]),  21,400},
  {&(_ZTV8S19558C1[31]),  31,400},
  {&(_ZTV8S19558C1[47]),  47,400},
  {&(_ZTV8S19558C1[54]),  54,400},
  {&(_tg__ZTV8S19558C2__8S19558C1[12]),  12,19},
  {&(_tg__ZTV8S19558C38S19558C2__8S19558C1[7]),  7,13},
  {&(_tg__ZTV8S19558C88S19558C38S19558C2__A1__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C38S19558C2__A1__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C38S19558C2__A2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C38S19558C2__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C38S19558C2__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C38S19558C2__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C38S19558C2__A1__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C38S19558C2__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C4__8S19558C38S19558C2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C38S19558C2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C38S19558C2__8S19558C1[10]),  10,16},
  {&(_tg__ZTV8S19558C9__8S19558C38S19558C2__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__8S19558C38S19558C2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C8__A1__8S19558C38S19558C2__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C2__A6__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C2__A10__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C2__A10__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C2__A6__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C4__8S19558C2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C2__8S19558C1[10]),  10,16},
  {&(_tg__ZTV8S19558C9__8S19558C2__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__8S19558C2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C88S19558C3__A1__8S19558C2__8S19558C1[5]),  5,10},
  {&(_tg__ZTV8S19558C8__A2__8S19558C2__8S19558C1[9]),  9,14},
  {&(_tg__ZTV9S19558C12__8S19558C2__8S19558C1[20]),  20,27},
  {&(_tg__ZTV8S19558C88S19558C39S19558C12__A3__8S19558C2__8S19558C1[5]),  5,10},
  {&(_tg__ZTV8S19558C58S19558C39S19558C12__A2__8S19558C2__8S19558C1[2]),  2,6},
  {&(_tg__ZTV8S19558C99S19558C12__A5__8S19558C2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C79S19558C12__A1__8S19558C2__8S19558C1[5]),  5,11},
  {&(_tg__ZTV9S19558C139S19558C12__8S19558C2__8S19558C1[6]),  6,12},
  {&(_tg__ZTV9S19558C149S19558C12__8S19558C2__8S19558C1[6]),  6,13},
  {&(_tg__ZTV8S19558C59S19558C159S19558C149S19558C12__A3__8S19558C2__8S19558C1[2]),  2,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C10__A6__8S19558C2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C16__8S19558C2__8S19558C1[16]),  16,23},
  {&(_tg__ZTV9S19558C17__8S19558C2__8S19558C1[12]),  12,14},
  {&(_tg__ZTV8S19558C99S19558C17__A11__8S19558C2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C149S19558C17__A1__8S19558C2__8S19558C1[6]),  6,13},
  {&(_tg__ZTV8S19558C59S19558C159S19558C149S19558C17__A4__8S19558C2__8S19558C1[2]),  2,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C189S19558C16__8S19558C2__8S19558C1[7]),  7,11},
  {&(_tg__ZTV9S19558C13__A2__8S19558C2__8S19558C1[11]),  11,17},
  {&(_tg__ZTV9S19558C199S19558C189S19558C16__8S19558C2__8S19558C1[4]),  4,8},
  {&(_tg__ZTV8S19558C4__8S19558C1[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C4__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C1[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C7__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C7__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C7__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C7__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C7__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C7__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C7__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C7__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C7__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C7__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C9__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C9__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C8__A2__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C8__A2__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C8__A3__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C8__A3__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C8__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C8__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C8__A2__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C8__A2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV9S19558C12__8S19558C1[8]),  8,15},
  {&(_tg__ZTV8S19558C39S19558C12__A1__8S19558C1[7]),  7,13},
  {&(_tg__ZTV8S19558C88S19558C39S19558C12__A3__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C39S19558C12__A4__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C39S19558C12__A3__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C39S19558C12__A3__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C39S19558C12__A3__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C39S19558C12__A3__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C4__8S19558C39S19558C12__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C39S19558C12__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C7__8S19558C39S19558C12__A1__8S19558C1[10]),  10,16},
  {&(_tg__ZTV8S19558C9__8S19558C39S19558C12__A1__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__8S19558C39S19558C12__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C8__A1__8S19558C39S19558C12__A1__8S19558C1[5]),  5,10},
  {&(_tg__ZTV8S19558C99S19558C12__A5__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C12__A5__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C79S19558C12__A1__8S19558C1[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C79S19558C12__A4__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C79S19558C12__A6__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C79S19558C12__A4__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C79S19558C12__A4__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C79S19558C12__A4__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C79S19558C12__A4__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C79S19558C12__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C79S19558C12__A1__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C79S19558C12__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV9S19558C139S19558C12__8S19558C1[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C139S19558C12__A7__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C139S19558C12__A7__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C139S19558C12__8S19558C1[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C139S19558C12__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C139S19558C12__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C139S19558C12__8S19558C1[4]),  4,6},
  {&(_tg__ZTV9S19558C149S19558C12__8S19558C1[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C149S19558C12__8S19558C1[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C12__A8__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C12__A5__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C12__A9__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C149S19558C12__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C149S19558C12__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C149S19558C12__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C149S19558C12__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C12__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C149S19558C12__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C149S19558C12__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C149S19558C12__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C149S19558C12__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C12__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C4__9S19558C12__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C12__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C7__9S19558C12__8S19558C1[10]),  10,16},
  {&(_tg__ZTV8S19558C9__9S19558C12__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__9S19558C12__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C88S19558C3__A1__9S19558C12__8S19558C1[5]),  5,10},
  {&(_tg__ZTV8S19558C9__A__9S19558C12__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C7__A__9S19558C12__8S19558C1[5]),  5,11},
  {&(_tg__ZTV9S19558C13__9S19558C12__8S19558C1[6]),  6,12},
  {&(_tg__ZTV8S19558C8__A3__9S19558C12__8S19558C1[9]),  9,14},
  {&(_tg__ZTV9S19558C14__9S19558C12__8S19558C1[6]),  6,13},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A8__9S19558C12__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C16__8S19558C1[10]),  10,17},
  {&(_tg__ZTV9S19558C139S19558C16__A1__8S19558C1[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C139S19558C16__A14__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C139S19558C16__A14__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C139S19558C16__A1__8S19558C1[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C139S19558C16__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C139S19558C16__A1__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C139S19558C16__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV9S19558C189S19558C16__8S19558C1[7]),  7,11},
  {&(_tg__ZTV9S19558C199S19558C189S19558C16__8S19558C1[4]),  4,8},
  {&(_tg__ZTV9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C109S19558C199S19558C189S19558C16__A16__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C109S19558C199S19558C189S19558C16__A8__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C199S19558C189S19558C16__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A1__9S19558C199S19558C189S19558C16__8S19558C1[6]),  6,10},
  {&(_tg__ZTV9S19558C13__9S19558C189S19558C16__8S19558C1[11]),  11,17},
  {&(_tg__ZTV8S19558C8__9S19558C189S19558C16__8S19558C1[9]),  9,14},
  {&(_tg__ZTV8S19558C5__A1__9S19558C189S19558C16__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C189S19558C16__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A4__9S19558C189S19558C16__8S19558C1[4]),  4,6},
  {&(_tg__ZTV9S19558C19__9S19558C189S19558C16__8S19558C1[4]),  4,8},
  {&(_tg__ZTV8S19558C9__9S19558C16__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C5__9S19558C16__8S19558C1[5]),  5,9},
  {&(_tg__ZTV9S19558C17__9S19558C16__8S19558C1[12]),  12,14},
  {&(_tg__ZTV8S19558C99S19558C17__A1__9S19558C16__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C149S19558C17__9S19558C16__8S19558C1[6]),  6,13},
  {&(_tg__ZTV8S19558C6__A3__9S19558C16__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C59S19558C159S19558C149S19558C17__A1__9S19558C16__8S19558C1[2]),  2,6},
  {&(_tg__ZTV8S19558C4__A1__9S19558C16__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A3__9S19558C16__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C8__A1__9S19558C16__8S19558C1[9]),  9,14},
  {&(_tg__ZTV9S19558C18__9S19558C16__8S19558C1[7]),  7,11},
  {&(_tg__ZTV9S19558C13__A1__9S19558C16__8S19558C1[11]),  11,17},
  {&(_tg__ZTV9S19558C199S19558C18__9S19558C16__8S19558C1[4]),  4,8},
  {&(_tg__ZTV8S19558C7__9S19558C16__8S19558C1[10]),  10,16},
  {&(_tg__ZTV9S19558C17__8S19558C1[6]),  6,8},
  {&(_tg__ZTV8S19558C49S19558C17__A1__8S19558C1[3]),  3,5},
  {&(_tg__ZTV8S19558C5__8S19558C49S19558C17__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C99S19558C17__A11__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C17__A11__8S19558C1[5]),  5,9},
  {&(_tg__ZTV9S19558C149S19558C17__A1__8S19558C1[6]),  6,13},
  {&(_tg__ZTV9S19558C159S19558C149S19558C17__A1__8S19558C1[6]),  6,12},
  {&(_tg__ZTV8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C89S19558C159S19558C149S19558C17__A12__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C89S19558C159S19558C149S19558C17__A7__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C89S19558C159S19558C149S19558C17__A6__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C159S19558C149S19558C17__A13__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C6__9S19558C159S19558C149S19558C17__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C159S19558C149S19558C17__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C159S19558C149S19558C17__A1__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C159S19558C149S19558C17__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A__9S19558C159S19558C149S19558C17__A1__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C6__9S19558C149S19558C17__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C149S19558C17__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C149S19558C17__A1__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__9S19558C149S19558C17__A1__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C15__A2__9S19558C149S19558C17__A1__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__9S19558C17__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A__9S19558C17__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C14__9S19558C17__8S19558C1[6]),  6,13},
  {&(_tg__ZTV8S19558C6__A2__9S19558C17__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C9__A1__9S19558C17__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C4__A1__9S19558C17__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C99S19558C159S19558C14__A3__9S19558C17__8S19558C1[3]),  3,7},
  {&(_tg__ZTV9S19558C13__A2__8S19558C1[6]),  6,12},
  {&(_tg__ZTV8S19558C99S19558C13__A15__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C13__A15__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C8__9S19558C13__A2__8S19558C1[9]),  9,14},
  {&(_tg__ZTV8S19558C5__9S19558C13__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C13__A2__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C13__A2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV9S19558C21__8S19558C1[5]),  5,11},
  {&(_tg__ZTV8S19558C79S19558C21__A2__8S19558C1[5]),  5,11},
  {&(_tg__ZTV8S19558C88S19558C79S19558C21__A7__8S19558C1[5]),  5,10},
  {&(_tg__ZTV9S19558C108S19558C88S19558C79S19558C21__A9__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C108S19558C88S19558C79S19558C21__A17__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C108S19558C88S19558C79S19558C21__A17__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C108S19558C88S19558C79S19558C21__A9__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__8S19558C88S19558C79S19558C21__A7__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C88S19558C79S19558C21__A7__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C88S19558C79S19558C21__A7__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__8S19558C79S19558C21__A2__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__8S19558C79S19558C21__A2__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__8S19558C79S19558C21__A2__8S19558C1[4]),  4,6},
  {&(_tg__ZTV8S19558C5__9S19558C21__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__9S19558C21__8S19558C1[6]),  6,10},
  {&(_tg__ZTV8S19558C6__A3__9S19558C21__8S19558C1[4]),  4,6},
  {&(_tg__ZTV9S19558C19__A1__8S19558C1[4]),  4,8},
  {&(_tg__ZTV9S19558C109S19558C19__A10__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C99S19558C109S19558C19__A18__8S19558C1[3]),  3,7},
  {&(_tg__ZTV8S19558C5__8S19558C99S19558C109S19558C19__A18__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C109S19558C19__A10__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C5__9S19558C19__A1__8S19558C1[5]),  5,9},
  {&(_tg__ZTV8S19558C9__A1__9S19558C19__A1__8S19558C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S19558C1[];
extern  VTBL_ENTRY _ZTV8S19558C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19558C1[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C16D0Ev,_ZTv0_n36_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S19558C16D0Ev,_ZThn1320_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C16D1Ev,_ZTv0_n36_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N9S19558C16D1Ev,_ZThn1320_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19558C16D0Ev,_ZTv0_n28_N9S19558C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C16D0Ev,_ZThn608_N9S19558C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19558C16D1Ev,_ZTv0_n28_N9S19558C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19558C16D1Ev,_ZThn608_N9S19558C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D0Ev,_ZTv0_n36_N9S19558C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N9S19558C18D0Ev,_ZThn996_N9S19558C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19558C18D1Ev,_ZTv0_n36_N9S19558C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1600_N9S19558C18D1Ev,_ZThn996_N9S19558C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D0Ev,_ZTv0_n24_N8S19558C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D0Ev,_ZThn432_N8S19558C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C7D1Ev,_ZTv0_n24_N8S19558C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C7D1Ev,_ZThn432_N8S19558C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19558C2D0Ev,_ZTv0_n36_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6816_N8S19558C2D0Ev,_ZThn4132_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19558C2D1Ev,_ZTv0_n36_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6816_N8S19558C2D1Ev,_ZThn4132_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19558C2D0Ev,_ZTv0_n28_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5648_N8S19558C2D0Ev,_ZThn3420_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19558C2D1Ev,_ZTv0_n28_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5648_N8S19558C2D1Ev,_ZThn3420_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19558C2D0Ev,_ZTv0_n52_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19558C2D0Ev,_ZThn2812_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19558C2D1Ev,_ZTv0_n52_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19558C2D1Ev,_ZThn2812_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19558C2D0Ev,_ZTv0_n44_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S19558C2D0Ev,_ZThn1232_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19558C2D1Ev,_ZTv0_n44_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2048_N8S19558C2D1Ev,_ZThn1232_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C2D0Ev,_ZTv0_n24_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C2D0Ev,_ZThn932_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C2D1Ev,_ZTv0_n24_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C2D1Ev,_ZThn932_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C2D0Ev,_ZTv0_n32_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19558C2D0Ev,_ZThn1088_N8S19558C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C2D0Ev,_ZThn500_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C2D1Ev,_ZTv0_n32_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1824_N8S19558C2D1Ev,_ZThn1088_N8S19558C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C2D1Ev,_ZThn500_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C2D0Ev,_ZTv0_n20_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C2D0Ev,_ZThn424_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C2D1Ev,_ZTv0_n20_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C2D1Ev,_ZThn424_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C2D0Ev,_ZTv0_n16_N8S19558C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C2D0Ev,_ZThn416_N8S19558C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C2D1Ev,_ZTv0_n16_N8S19558C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C2D1Ev,_ZThn416_N8S19558C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D0Ev,_ZTv0_n24_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C3D0Ev,_ZThn932_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C3D1Ev,_ZTv0_n24_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19558C3D1Ev,_ZThn932_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D0Ev,_ZTv0_n32_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C3D0Ev,_ZThn500_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C3D1Ev,_ZTv0_n32_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19558C3D1Ev,_ZThn500_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D0Ev,_ZTv0_n20_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C3D0Ev,_ZThn424_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C3D1Ev,_ZTv0_n20_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S19558C3D1Ev,_ZThn424_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D0Ev,_ZTv0_n16_N8S19558C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C3D0Ev,_ZThn416_N8S19558C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C3D1Ev,_ZTv0_n16_N8S19558C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn680_N8S19558C3D1Ev,_ZThn416_N8S19558C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C17D0Ev,_ZTv0_n16_N9S19558C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2568_N9S19558C17D0Ev,_ZThn1556_N9S19558C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C17D1Ev,_ZTv0_n16_N9S19558C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2568_N9S19558C17D1Ev,_ZThn1556_N9S19558C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C17D0Ev,_ZTv0_n24_N9S19558C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19558C17D0Ev,_ZThn2072_N9S19558C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C17D1Ev,_ZTv0_n24_N9S19558C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19558C17D1Ev,_ZThn2072_N9S19558C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C17D0Ev,_ZTv0_n20_N9S19558C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N9S19558C17D0Ev,_ZThn1564_N9S19558C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C17D1Ev,_ZTv0_n20_N9S19558C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N9S19558C17D1Ev,_ZThn1564_N9S19558C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D0Ev,_ZTv0_n16_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2344_N9S19558C14D0Ev,_ZThn1428_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C14D1Ev,_ZTv0_n16_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2344_N9S19558C14D1Ev,_ZThn1428_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D0Ev,_ZTv0_n24_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3216_N9S19558C14D0Ev,_ZThn1944_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C14D1Ev,_ZTv0_n24_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3216_N9S19558C14D1Ev,_ZThn1944_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D0Ev,_ZTv0_n20_N9S19558C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19558C14D0Ev,_ZThn1436_N9S19558C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C14D1Ev,_ZTv0_n20_N9S19558C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19558C14D1Ev,_ZThn1436_N9S19558C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D0Ev,_ZTv0_n16_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2344_N9S19558C15D0Ev,_ZThn1428_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19558C15D1Ev,_ZTv0_n16_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2344_N9S19558C15D1Ev,_ZThn1428_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D0Ev,_ZTv0_n24_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3216_N9S19558C15D0Ev,_ZThn1944_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19558C15D1Ev,_ZTv0_n24_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3216_N9S19558C15D1Ev,_ZThn1944_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D0Ev,_ZTv0_n20_N9S19558C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19558C15D0Ev,_ZThn1436_N9S19558C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C15D1Ev,_ZTv0_n20_N9S19558C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19558C15D1Ev,_ZThn1436_N9S19558C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D0Ev,_ZTv0_n24_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D0Ev,_ZThn432_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N8S19558C8D0Ev,_ZThn896_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3216_N8S19558C8D0Ev,_ZThn1944_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C8D1Ev,_ZTv0_n24_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S19558C8D1Ev,_ZThn432_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N8S19558C8D1Ev,_ZThn896_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3216_N8S19558C8D1Ev,_ZThn1944_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D0Ev,_ZTv0_n20_N8S19558C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C8D0Ev,_ZThn388_N8S19558C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S19558C8D0Ev,_ZThn1436_N8S19558C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C8D1Ev,_ZTv0_n20_N8S19558C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C8D1Ev,_ZThn388_N8S19558C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S19558C8D1Ev,_ZThn1436_N8S19558C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D0Ev,_ZTv0_n20_N9S19558C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19558C10D0Ev,_ZThn160_N9S19558C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19558C10D0Ev,_ZThn388_N9S19558C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N9S19558C10D0Ev,_ZThn852_N9S19558C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19558C10D0Ev,_ZThn1436_N9S19558C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19558C10D1Ev,_ZTv0_n20_N9S19558C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S19558C10D1Ev,_ZThn160_N9S19558C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N9S19558C10D1Ev,_ZThn388_N9S19558C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N9S19558C10D1Ev,_ZThn852_N9S19558C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N9S19558C10D1Ev,_ZThn1436_N9S19558C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D0Ev,_ZTv0_n20_N8S19558C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19558C9D0Ev,_ZThn160_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C9D0Ev,_ZThn388_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N8S19558C9D0Ev,_ZThn852_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S19558C9D0Ev,_ZThn1216_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S19558C9D0Ev,_ZThn1436_N8S19558C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N8S19558C9D0Ev,_ZThn1556_N8S19558C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C9D1Ev,_ZTv0_n20_N8S19558C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19558C9D1Ev,_ZThn160_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S19558C9D1Ev,_ZThn388_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N8S19558C9D1Ev,_ZThn852_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S19558C9D1Ev,_ZThn1216_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2368_N8S19558C9D1Ev,_ZThn1436_N8S19558C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N8S19558C9D1Ev,_ZThn1556_N8S19558C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D0Ev,_ZTv0_n20_N8S19558C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19558C4D0Ev,_ZThn8_N8S19558C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19558C4D0Ev,_ZThn1564_N8S19558C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C4D1Ev,_ZTv0_n20_N8S19558C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19558C4D1Ev,_ZThn8_N8S19558C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19558C4D1Ev,_ZThn1564_N8S19558C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19558C1D0Ev,_ZTv0_n36_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8704_N8S19558C1D0Ev,_ZThn5272_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19558C1D1Ev,_ZTv0_n36_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8704_N8S19558C1D1Ev,_ZThn5272_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19558C1D0Ev,_ZTv0_n28_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10000_N8S19558C1D0Ev,_ZThn6040_N8S19558C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7536_N8S19558C1D0Ev,_ZThn4560_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19558C1D1Ev,_ZTv0_n28_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10000_N8S19558C1D1Ev,_ZThn6040_N8S19558C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7536_N8S19558C1D1Ev,_ZThn4560_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19558C1D0Ev,_ZTv0_n52_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6544_N8S19558C1D0Ev,_ZThn3952_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19558C1D1Ev,_ZTv0_n52_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6544_N8S19558C1D1Ev,_ZThn3952_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19558C1D0Ev,_ZTv0_n44_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3936_N8S19558C1D0Ev,_ZThn2372_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19558C1D1Ev,_ZTv0_n44_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3936_N8S19558C1D1Ev,_ZThn2372_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C1D0Ev,_ZTv0_n24_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S19558C1D0Ev,_ZThn2072_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19558C1D1Ev,_ZTv0_n24_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S19558C1D1Ev,_ZThn2072_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C1D0Ev,_ZTv0_n32_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9264_N8S19558C1D0Ev,_ZThn5596_N8S19558C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3712_N8S19558C1D0Ev,_ZThn2228_N8S19558C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N8S19558C1D0Ev,_ZThn1640_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19558C1D1Ev,_ZTv0_n32_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9264_N8S19558C1D1Ev,_ZThn5596_N8S19558C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3712_N8S19558C1D1Ev,_ZThn2228_N8S19558C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2720_N8S19558C1D1Ev,_ZThn1640_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C1D0Ev,_ZTv0_n20_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19558C1D0Ev,_ZThn1564_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19558C1D1Ev,_ZTv0_n20_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S19558C1D1Ev,_ZThn1564_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C1D0Ev,_ZTv0_n16_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2568_N8S19558C1D0Ev,_ZThn1556_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19558C1D1Ev,_ZTv0_n16_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2568_N8S19558C1D1Ev,_ZThn1556_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19558C1D0Ev,_ZTv0_n60_N8S19558C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1888_N8S19558C1D0Ev,_ZThn1140_N8S19558C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19558C1D1Ev,_ZTv0_n60_N8S19558C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1888_N8S19558C1D1Ev,_ZThn1140_N8S19558C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19558C1 = {  "S19558C1", // class name
  bases_S19558C1, 111,
  &(vtc_S19558C1[0]), // expected_vtbl_contents
  &(vtt_S19558C1[0]), // expected_vtt_contents
  ABISELECT(10224,6184), // object size
  NSPAIRA(_ZTI8S19558C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19558C1),400, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19558C1),314, //virtual table table var
  111, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C4_nt  {
  virtual  ~S2011C4_nt(); // _ZN10S2011C4_ntD1Ev
  virtual void  v10(); // _ZN10S2011C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2011C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2011C4_nt3v12Ev
  S2011C4_nt(); // tgen
};
//SIG(-1 S2011C4_nt) C1{ vd v1 v2 v3}


 S2011C4_nt ::~S2011C4_nt(){ note_dtor("S2011C4_nt", this);}
void  S2011C4_nt ::v10(){vfunc_called(this, "_ZN10S2011C4_nt3v10Ev");}
void  S2011C4_nt ::v11(){vfunc_called(this, "_ZN10S2011C4_nt3v11Ev");}
void  S2011C4_nt ::v12(){vfunc_called(this, "_ZN10S2011C4_nt3v12Ev");}
S2011C4_nt ::S2011C4_nt(){ note_ctor("S2011C4_nt", this);} // tgen

//skip512 S2011C4_nt

#else // __cplusplus

extern void _ZN10S2011C4_ntC1Ev();
extern void _ZN10S2011C4_ntD1Ev();
Name_Map name_map_S2011C4_nt[] = {
  NSPAIR(_ZN10S2011C4_ntC1Ev),
  NSPAIR(_ZN10S2011C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2011C4_nt[];
extern void _ZN10S2011C4_ntD1Ev();
extern void _ZN10S2011C4_ntD0Ev();
extern void _ZN10S2011C4_nt3v10Ev();
extern void _ZN10S2011C4_nt3v11Ev();
extern void _ZN10S2011C4_nt3v12Ev();
static  VTBL_ENTRY vtc_S2011C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2011C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2011C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S2011C4_nt[];
VTBL_ENTRY *P__ZTI10S2011C4_nt = _ZTI10S2011C4_nt; 
extern  VTBL_ENTRY _ZTV10S2011C4_nt[];
Class_Descriptor cd_S2011C4_nt = {  "S2011C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2011C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2011C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2011C4_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  S2011C3_nt  : S2011C4_nt {
  virtual  ~S2011C3_nt(); // _ZN10S2011C3_ntD1Ev
  virtual void  v13(); // _ZN10S2011C3_nt3v13Ev
  virtual void  v14(); // _ZN10S2011C3_nt3v14Ev
  virtual void  v15(); // _ZN10S2011C3_nt3v15Ev
  S2011C3_nt(); // tgen
};
//SIG(-1 S2011C3_nt) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2011C3_nt ::~S2011C3_nt(){ note_dtor("S2011C3_nt", this);}
void  S2011C3_nt ::v13(){vfunc_called(this, "_ZN10S2011C3_nt3v13Ev");}
void  S2011C3_nt ::v14(){vfunc_called(this, "_ZN10S2011C3_nt3v14Ev");}
void  S2011C3_nt ::v15(){vfunc_called(this, "_ZN10S2011C3_nt3v15Ev");}
S2011C3_nt ::S2011C3_nt(){ note_ctor("S2011C3_nt", this);} // tgen

//skip512 S2011C3_nt

#else // __cplusplus

extern void _ZN10S2011C3_ntC1Ev();
extern void _ZN10S2011C3_ntD1Ev();
Name_Map name_map_S2011C3_nt[] = {
  NSPAIR(_ZN10S2011C3_ntC1Ev),
  NSPAIR(_ZN10S2011C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C4_nt;
extern VTBL_ENTRY _ZTI10S2011C4_nt[];
extern  VTBL_ENTRY _ZTV10S2011C4_nt[];
static Base_Class bases_S2011C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2011C3_nt[];
extern void _ZN10S2011C3_ntD1Ev();
extern void _ZN10S2011C3_ntD0Ev();
extern void _ZN10S2011C4_nt3v10Ev();
extern void _ZN10S2011C4_nt3v11Ev();
extern void _ZN10S2011C4_nt3v12Ev();
extern void _ZN10S2011C3_nt3v13Ev();
extern void _ZN10S2011C3_nt3v14Ev();
extern void _ZN10S2011C3_nt3v15Ev();
static  VTBL_ENTRY vtc_S2011C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2011C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2011C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI10S2011C3_nt[];
VTBL_ENTRY *P__ZTI10S2011C3_nt = _ZTI10S2011C3_nt; 
extern  VTBL_ENTRY _ZTV10S2011C3_nt[];
Class_Descriptor cd_S2011C3_nt = {  "S2011C3_nt", // class name
  bases_S2011C3_nt, 1,
  &(vtc_S2011C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2011C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2011C3_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C2_nt  : S2011C3_nt {
  ::S7368C77 s2011c2f0;
  ::S10256C6_nt s2011c2f1;
  char s2011c2f2;
  virtual  ~S2011C2_nt(); // _ZN10S2011C2_ntD1Ev
  virtual void  v16(); // _ZN10S2011C2_nt3v16Ev
  virtual void  v17(); // _ZN10S2011C2_nt3v17Ev
  virtual void  v18(); // _ZN10S2011C2_nt3v18Ev
  S2011C2_nt(); // tgen
};
//SIG(-1 S2011C2_nt) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc}


 S2011C2_nt ::~S2011C2_nt(){ note_dtor("S2011C2_nt", this);}
void  S2011C2_nt ::v16(){vfunc_called(this, "_ZN10S2011C2_nt3v16Ev");}
void  S2011C2_nt ::v17(){vfunc_called(this, "_ZN10S2011C2_nt3v17Ev");}
void  S2011C2_nt ::v18(){vfunc_called(this, "_ZN10S2011C2_nt3v18Ev");}
S2011C2_nt ::S2011C2_nt(){ note_ctor("S2011C2_nt", this);} // tgen

//skip512 S2011C2_nt

#else // __cplusplus

extern void _ZN10S2011C2_ntC1Ev();
extern void _ZN10S2011C2_ntD1Ev();
Name_Map name_map_S2011C2_nt[] = {
  NSPAIR(_ZN10S2011C2_ntC1Ev),
  NSPAIR(_ZN10S2011C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C4_nt;
extern VTBL_ENTRY _ZTI10S2011C4_nt[];
extern  VTBL_ENTRY _ZTV10S2011C4_nt[];
extern Class_Descriptor cd_S2011C3_nt;
extern VTBL_ENTRY _ZTI10S2011C3_nt[];
extern  VTBL_ENTRY _ZTV10S2011C3_nt[];
static Base_Class bases_S2011C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2011C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2011C2_nt[];
extern void _ZN10S2011C2_ntD1Ev();
extern void _ZN10S2011C2_ntD0Ev();
extern void _ZN10S2011C4_nt3v10Ev();
extern void _ZN10S2011C4_nt3v11Ev();
extern void _ZN10S2011C4_nt3v12Ev();
extern void _ZN10S2011C3_nt3v13Ev();
extern void _ZN10S2011C3_nt3v14Ev();
extern void _ZN10S2011C3_nt3v15Ev();
extern void _ZN10S2011C2_nt3v16Ev();
extern void _ZN10S2011C2_nt3v17Ev();
extern void _ZN10S2011C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S2011C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2011C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2011C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2011C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2011C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2011C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2011C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S2011C2_nt[];
VTBL_ENTRY *P__ZTI10S2011C2_nt = _ZTI10S2011C2_nt; 
extern  VTBL_ENTRY _ZTV10S2011C2_nt[];
Class_Descriptor cd_S2011C2_nt = {  "S2011C2_nt", // class name
  bases_S2011C2_nt, 2,
  &(vtc_S2011C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI10S2011C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2011C2_nt),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  S2011C10_nt  {
  void *s2011c10f0[2];
  virtual  ~S2011C10_nt(); // _ZN11S2011C10_ntD1Ev
  virtual void  v19(); // _ZN11S2011C10_nt3v19Ev
  virtual void  v20(); // _ZN11S2011C10_nt3v20Ev
  virtual void  v21(); // _ZN11S2011C10_nt3v21Ev
  virtual void  v22(); // _ZN11S2011C10_nt3v22Ev
  virtual void  v23(); // _ZN11S2011C10_nt3v23Ev
  virtual void  v24(); // _ZN11S2011C10_nt3v24Ev
  virtual void  v25(); // _ZN11S2011C10_nt3v25Ev
  virtual void  v26(); // _ZN11S2011C10_nt3v26Ev
  virtual void  v27(); // _ZN11S2011C10_nt3v27Ev
  virtual void  v28(); // _ZN11S2011C10_nt3v28Ev
  virtual void  v29(); // _ZN11S2011C10_nt3v29Ev
  virtual void  v30(); // _ZN11S2011C10_nt3v30Ev
  virtual void  v31(); // _ZN11S2011C10_nt3v31Ev
  virtual void  v32(); // _ZN11S2011C10_nt3v32Ev
  S2011C10_nt(); // tgen
};
//SIG(-1 S2011C10_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2011C10_nt ::~S2011C10_nt(){ note_dtor("S2011C10_nt", this);}
void  S2011C10_nt ::v19(){vfunc_called(this, "_ZN11S2011C10_nt3v19Ev");}
void  S2011C10_nt ::v20(){vfunc_called(this, "_ZN11S2011C10_nt3v20Ev");}
void  S2011C10_nt ::v21(){vfunc_called(this, "_ZN11S2011C10_nt3v21Ev");}
void  S2011C10_nt ::v22(){vfunc_called(this, "_ZN11S2011C10_nt3v22Ev");}
void  S2011C10_nt ::v23(){vfunc_called(this, "_ZN11S2011C10_nt3v23Ev");}
void  S2011C10_nt ::v24(){vfunc_called(this, "_ZN11S2011C10_nt3v24Ev");}
void  S2011C10_nt ::v25(){vfunc_called(this, "_ZN11S2011C10_nt3v25Ev");}
void  S2011C10_nt ::v26(){vfunc_called(this, "_ZN11S2011C10_nt3v26Ev");}
void  S2011C10_nt ::v27(){vfunc_called(this, "_ZN11S2011C10_nt3v27Ev");}
void  S2011C10_nt ::v28(){vfunc_called(this, "_ZN11S2011C10_nt3v28Ev");}
void  S2011C10_nt ::v29(){vfunc_called(this, "_ZN11S2011C10_nt3v29Ev");}
void  S2011C10_nt ::v30(){vfunc_called(this, "_ZN11S2011C10_nt3v30Ev");}
void  S2011C10_nt ::v31(){vfunc_called(this, "_ZN11S2011C10_nt3v31Ev");}
void  S2011C10_nt ::v32(){vfunc_called(this, "_ZN11S2011C10_nt3v32Ev");}
S2011C10_nt ::S2011C10_nt(){ note_ctor("S2011C10_nt", this);} // tgen

//skip512 S2011C10_nt

#else // __cplusplus

extern void _ZN11S2011C10_ntC1Ev();
extern void _ZN11S2011C10_ntD1Ev();
Name_Map name_map_S2011C10_nt[] = {
  NSPAIR(_ZN11S2011C10_ntC1Ev),
  NSPAIR(_ZN11S2011C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2011C10_nt[];
extern void _ZN11S2011C10_ntD1Ev();
extern void _ZN11S2011C10_ntD0Ev();
extern void _ZN11S2011C10_nt3v19Ev();
extern void _ZN11S2011C10_nt3v20Ev();
extern void _ZN11S2011C10_nt3v21Ev();
extern void _ZN11S2011C10_nt3v22Ev();
extern void _ZN11S2011C10_nt3v23Ev();
extern void _ZN11S2011C10_nt3v24Ev();
extern void _ZN11S2011C10_nt3v25Ev();
extern void _ZN11S2011C10_nt3v26Ev();
extern void _ZN11S2011C10_nt3v27Ev();
extern void _ZN11S2011C10_nt3v28Ev();
extern void _ZN11S2011C10_nt3v29Ev();
extern void _ZN11S2011C10_nt3v30Ev();
extern void _ZN11S2011C10_nt3v31Ev();
extern void _ZN11S2011C10_nt3v32Ev();
static  VTBL_ENTRY vtc_S2011C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI11S2011C10_nt[];
VTBL_ENTRY *P__ZTI11S2011C10_nt = _ZTI11S2011C10_nt; 
extern  VTBL_ENTRY _ZTV11S2011C10_nt[];
Class_Descriptor cd_S2011C10_nt = {  "S2011C10_nt", // class name
  0,0,//no base classes
  &(vtc_S2011C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S2011C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2011C10_nt),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C9_nt  : S2011C10_nt {
  ::S7368C58 s2011c9f0;
  virtual  ~S2011C9_nt(); // _ZN10S2011C9_ntD1Ev
  virtual void  v33(); // _ZN10S2011C9_nt3v33Ev
  virtual void  v34(); // _ZN10S2011C9_nt3v34Ev
  virtual void  v35(); // _ZN10S2011C9_nt3v35Ev
  virtual void  v36(); // _ZN10S2011C9_nt3v36Ev
  virtual void  v37(); // _ZN10S2011C9_nt3v37Ev
  virtual void  v38(); // _ZN10S2011C9_nt3v38Ev
  virtual void  v39(); // _ZN10S2011C9_nt3v39Ev
  S2011C9_nt(); // tgen
};
//SIG(-1 S2011C9_nt) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2011C9_nt ::~S2011C9_nt(){ note_dtor("S2011C9_nt", this);}
void  S2011C9_nt ::v33(){vfunc_called(this, "_ZN10S2011C9_nt3v33Ev");}
void  S2011C9_nt ::v34(){vfunc_called(this, "_ZN10S2011C9_nt3v34Ev");}
void  S2011C9_nt ::v35(){vfunc_called(this, "_ZN10S2011C9_nt3v35Ev");}
void  S2011C9_nt ::v36(){vfunc_called(this, "_ZN10S2011C9_nt3v36Ev");}
void  S2011C9_nt ::v37(){vfunc_called(this, "_ZN10S2011C9_nt3v37Ev");}
void  S2011C9_nt ::v38(){vfunc_called(this, "_ZN10S2011C9_nt3v38Ev");}
void  S2011C9_nt ::v39(){vfunc_called(this, "_ZN10S2011C9_nt3v39Ev");}
S2011C9_nt ::S2011C9_nt(){ note_ctor("S2011C9_nt", this);} // tgen

//skip512 S2011C9_nt

#else // __cplusplus

extern void _ZN10S2011C9_ntC1Ev();
extern void _ZN10S2011C9_ntD1Ev();
Name_Map name_map_S2011C9_nt[] = {
  NSPAIR(_ZN10S2011C9_ntC1Ev),
  NSPAIR(_ZN10S2011C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C10_nt;
extern VTBL_ENTRY _ZTI11S2011C10_nt[];
extern  VTBL_ENTRY _ZTV11S2011C10_nt[];
static Base_Class bases_S2011C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2011C9_nt[];
extern void _ZN10S2011C9_ntD1Ev();
extern void _ZN10S2011C9_ntD0Ev();
extern void _ZN11S2011C10_nt3v19Ev();
extern void _ZN11S2011C10_nt3v20Ev();
extern void _ZN11S2011C10_nt3v21Ev();
extern void _ZN11S2011C10_nt3v22Ev();
extern void _ZN11S2011C10_nt3v23Ev();
extern void _ZN11S2011C10_nt3v24Ev();
extern void _ZN11S2011C10_nt3v25Ev();
extern void _ZN11S2011C10_nt3v26Ev();
extern void _ZN11S2011C10_nt3v27Ev();
extern void _ZN11S2011C10_nt3v28Ev();
extern void _ZN11S2011C10_nt3v29Ev();
extern void _ZN11S2011C10_nt3v30Ev();
extern void _ZN11S2011C10_nt3v31Ev();
extern void _ZN11S2011C10_nt3v32Ev();
extern void _ZN10S2011C9_nt3v33Ev();
extern void _ZN10S2011C9_nt3v34Ev();
extern void _ZN10S2011C9_nt3v35Ev();
extern void _ZN10S2011C9_nt3v36Ev();
extern void _ZN10S2011C9_nt3v37Ev();
extern void _ZN10S2011C9_nt3v38Ev();
extern void _ZN10S2011C9_nt3v39Ev();
static  VTBL_ENTRY vtc_S2011C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2011C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S2011C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v39Ev,
};
extern VTBL_ENTRY _ZTI10S2011C9_nt[];
VTBL_ENTRY *P__ZTI10S2011C9_nt = _ZTI10S2011C9_nt; 
extern  VTBL_ENTRY _ZTV10S2011C9_nt[];
Class_Descriptor cd_S2011C9_nt = {  "S2011C9_nt", // class name
  bases_S2011C9_nt, 1,
  &(vtc_S2011C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI10S2011C9_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2011C9_nt),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C14_nt  {
  virtual  ~S2011C14_nt(); // _ZN11S2011C14_ntD1Ev
  S2011C14_nt(); // tgen
};
//SIG(-1 S2011C14_nt) C1{ vd}


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

//skip512 S2011C14_nt

#else // __cplusplus

extern void _ZN11S2011C14_ntC1Ev();
extern void _ZN11S2011C14_ntD1Ev();
Name_Map name_map_S2011C14_nt[] = {
  NSPAIR(_ZN11S2011C14_ntC1Ev),
  NSPAIR(_ZN11S2011C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern void _ZN11S2011C14_ntD1Ev();
extern void _ZN11S2011C14_ntD0Ev();
static  VTBL_ENTRY vtc_S2011C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C14_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C14_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
VTBL_ENTRY *P__ZTI11S2011C14_nt = _ZTI11S2011C14_nt; 
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
Class_Descriptor cd_S2011C14_nt = {  "S2011C14_nt", // class name
  0,0,//no base classes
  &(vtc_S2011C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S2011C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2011C14_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  S2011C16_nt  {
  virtual  ~S2011C16_nt(); // _ZN11S2011C16_ntD1Ev
  virtual void  v42(); // _ZN11S2011C16_nt3v42Ev
  virtual void  v43(); // _ZN11S2011C16_nt3v43Ev
  S2011C16_nt(); // tgen
};
//SIG(-1 S2011C16_nt) C1{ vd v1 v2}


 S2011C16_nt ::~S2011C16_nt(){ note_dtor("S2011C16_nt", this);}
void  S2011C16_nt ::v42(){vfunc_called(this, "_ZN11S2011C16_nt3v42Ev");}
void  S2011C16_nt ::v43(){vfunc_called(this, "_ZN11S2011C16_nt3v43Ev");}
S2011C16_nt ::S2011C16_nt(){ note_ctor("S2011C16_nt", this);} // tgen

//skip512 S2011C16_nt

#else // __cplusplus

extern void _ZN11S2011C16_ntC1Ev();
extern void _ZN11S2011C16_ntD1Ev();
Name_Map name_map_S2011C16_nt[] = {
  NSPAIR(_ZN11S2011C16_ntC1Ev),
  NSPAIR(_ZN11S2011C16_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2011C16_nt[];
extern void _ZN11S2011C16_ntD1Ev();
extern void _ZN11S2011C16_ntD0Ev();
extern void _ZN11S2011C16_nt3v42Ev();
extern void _ZN11S2011C16_nt3v43Ev();
static  VTBL_ENTRY vtc_S2011C16_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C16_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v43Ev,
};
extern VTBL_ENTRY _ZTI11S2011C16_nt[];
VTBL_ENTRY *P__ZTI11S2011C16_nt = _ZTI11S2011C16_nt; 
extern  VTBL_ENTRY _ZTV11S2011C16_nt[];
Class_Descriptor cd_S2011C16_nt = {  "S2011C16_nt", // class name
  0,0,//no base classes
  &(vtc_S2011C16_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S2011C16_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2011C16_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  S2011C15_nt  : S2011C16_nt {
  ::S7368C9_nt s2011c15f0;
  ::S7368C9_nt s2011c15f1;
  int s2011c15f2;
  virtual  ~S2011C15_nt(); // _ZN11S2011C15_ntD1Ev
  virtual void  v40(); // _ZN11S2011C15_nt3v40Ev
  virtual void  v41(); // _ZN11S2011C15_nt3v41Ev
  S2011C15_nt(); // tgen
};
//SIG(-1 S2011C15_nt) C1{ BC2{ vd v3 v4} vd v1 v2 FC3{ m Fp Fi FC4{ m}} FC3 Fi}


 S2011C15_nt ::~S2011C15_nt(){ note_dtor("S2011C15_nt", this);}
void  S2011C15_nt ::v40(){vfunc_called(this, "_ZN11S2011C15_nt3v40Ev");}
void  S2011C15_nt ::v41(){vfunc_called(this, "_ZN11S2011C15_nt3v41Ev");}
S2011C15_nt ::S2011C15_nt(){ note_ctor("S2011C15_nt", this);} // tgen

//skip512 S2011C15_nt

#else // __cplusplus

extern void _ZN11S2011C15_ntC1Ev();
extern void _ZN11S2011C15_ntD1Ev();
Name_Map name_map_S2011C15_nt[] = {
  NSPAIR(_ZN11S2011C15_ntC1Ev),
  NSPAIR(_ZN11S2011C15_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C16_nt;
extern VTBL_ENTRY _ZTI11S2011C16_nt[];
extern  VTBL_ENTRY _ZTV11S2011C16_nt[];
static Base_Class bases_S2011C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S2011C15_nt[];
extern void _ZN11S2011C15_ntD1Ev();
extern void _ZN11S2011C15_ntD0Ev();
extern void _ZN11S2011C16_nt3v42Ev();
extern void _ZN11S2011C16_nt3v43Ev();
extern void _ZN11S2011C15_nt3v40Ev();
extern void _ZN11S2011C15_nt3v41Ev();
static  VTBL_ENTRY vtc_S2011C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C15_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S2011C15_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S2011C15_nt3v41Ev,
};
extern VTBL_ENTRY _ZTI11S2011C15_nt[];
VTBL_ENTRY *P__ZTI11S2011C15_nt = _ZTI11S2011C15_nt; 
extern  VTBL_ENTRY _ZTV11S2011C15_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C20_nt  : S2011C16_nt {
  ::S7368C9_nt s2011c20f0;
  virtual  ~S2011C20_nt(); // _ZN11S2011C20_ntD1Ev
  virtual void  v46(); // _ZN11S2011C20_nt3v46Ev
  virtual void  v47(); // _ZN11S2011C20_nt3v47Ev
  S2011C20_nt(); // tgen
};
//SIG(-1 S2011C20_nt) C1{ BC2{ vd v3 v4} vd v1 v2 FC3{ m Fp Fi FC4{ m}}}


 S2011C20_nt ::~S2011C20_nt(){ note_dtor("S2011C20_nt", this);}
void  S2011C20_nt ::v46(){vfunc_called(this, "_ZN11S2011C20_nt3v46Ev");}
void  S2011C20_nt ::v47(){vfunc_called(this, "_ZN11S2011C20_nt3v47Ev");}
S2011C20_nt ::S2011C20_nt(){ note_ctor("S2011C20_nt", this);} // tgen

//skip512 S2011C20_nt

#else // __cplusplus

extern void _ZN11S2011C20_ntC1Ev();
extern void _ZN11S2011C20_ntD1Ev();
Name_Map name_map_S2011C20_nt[] = {
  NSPAIR(_ZN11S2011C20_ntC1Ev),
  NSPAIR(_ZN11S2011C20_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C16_nt;
extern VTBL_ENTRY _ZTI11S2011C16_nt[];
extern  VTBL_ENTRY _ZTV11S2011C16_nt[];
static Base_Class bases_S2011C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S2011C20_nt[];
extern void _ZN11S2011C20_ntD1Ev();
extern void _ZN11S2011C20_ntD0Ev();
extern void _ZN11S2011C16_nt3v42Ev();
extern void _ZN11S2011C16_nt3v43Ev();
extern void _ZN11S2011C20_nt3v46Ev();
extern void _ZN11S2011C20_nt3v47Ev();
static  VTBL_ENTRY vtc_S2011C20_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C20_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C20_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C20_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S2011C20_nt3v46Ev,
  (VTBL_ENTRY)&_ZN11S2011C20_nt3v47Ev,
};
extern VTBL_ENTRY _ZTI11S2011C20_nt[];
VTBL_ENTRY *P__ZTI11S2011C20_nt = _ZTI11S2011C20_nt; 
extern  VTBL_ENTRY _ZTV11S2011C20_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C21_nt  : S7368C50 , S2011C16_nt {
  virtual  ~S2011C21_nt(); // _ZN11S2011C21_ntD1Ev
  virtual void  v48(); // _ZN11S2011C21_nt3v48Ev
  virtual void  v49(); // _ZN11S2011C21_nt3v49Ev
  S2011C21_nt(); // tgen
};
//SIG(-1 S2011C21_nt) C1{ BC2{ m Fp Fi[2] FC3{ m}} BC4{ vd v3 v4} vd v1 v2}


 S2011C21_nt ::~S2011C21_nt(){ note_dtor("S2011C21_nt", this);}
void  S2011C21_nt ::v48(){vfunc_called(this, "_ZN11S2011C21_nt3v48Ev");}
void  S2011C21_nt ::v49(){vfunc_called(this, "_ZN11S2011C21_nt3v49Ev");}
S2011C21_nt ::S2011C21_nt(){ note_ctor("S2011C21_nt", this);} // tgen

//skip512 S2011C21_nt

#else // __cplusplus

extern void _ZN11S2011C21_ntC1Ev();
extern void _ZN11S2011C21_ntD1Ev();
Name_Map name_map_S2011C21_nt[] = {
  NSPAIR(_ZN11S2011C21_ntC1Ev),
  NSPAIR(_ZN11S2011C21_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C50;
extern VTBL_ENTRY _ZTI8S7368C50[];
extern Class_Descriptor cd_S2011C16_nt;
extern VTBL_ENTRY _ZTI11S2011C16_nt[];
extern  VTBL_ENTRY _ZTV11S2011C16_nt[];
static Base_Class bases_S2011C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C50,    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_S2011C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S2011C21_nt[];
extern void _ZN11S2011C21_ntD1Ev();
extern void _ZN11S2011C21_ntD0Ev();
extern void _ZN11S2011C16_nt3v42Ev();
extern void _ZN11S2011C16_nt3v43Ev();
extern void _ZN11S2011C21_nt3v48Ev();
extern void _ZN11S2011C21_nt3v49Ev();
static  VTBL_ENTRY vtc_S2011C21_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C21_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C21_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S2011C21_nt3v48Ev,
  (VTBL_ENTRY)&_ZN11S2011C21_nt3v49Ev,
};
extern VTBL_ENTRY _ZTI11S2011C21_nt[];
VTBL_ENTRY *P__ZTI11S2011C21_nt = _ZTI11S2011C21_nt; 
extern  VTBL_ENTRY _ZTV11S2011C21_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C25_nt  {
  short s2011c25f0[6];
  int s2011c25f1[2];
  char s2011c25f2;
  short s2011c25f3;
  void  mf2011c25(); // _ZN11S2011C25_nt9mf2011c25Ev
};
//SIG(-1 S2011C25_nt) C1{ m Fs[6] Fi[2] Fc Fs}


void  S2011C25_nt ::mf2011c25(){}

//skip512 S2011C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C24_nt  {
  ::S2011C25_nt s2011c24f0;
  void  mf2011c24(); // _ZN11S2011C24_nt9mf2011c24Ev
  virtual  ~S2011C24_nt(); // _ZN11S2011C24_ntD1Ev
  S2011C24_nt(); // tgen
};
//SIG(-1 S2011C24_nt) C1{ vd m FC2{ m Fs[6] Fi[2] Fc Fs}}


void  S2011C24_nt ::mf2011c24(){}
 S2011C24_nt ::~S2011C24_nt(){ note_dtor("S2011C24_nt", this);}
S2011C24_nt ::S2011C24_nt(){ note_ctor("S2011C24_nt", this);} // tgen

//skip512 S2011C24_nt

#else // __cplusplus

extern void _ZN11S2011C24_ntC1Ev();
extern void _ZN11S2011C24_ntD1Ev();
Name_Map name_map_S2011C24_nt[] = {
  NSPAIR(_ZN11S2011C24_ntC1Ev),
  NSPAIR(_ZN11S2011C24_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2011C24_nt[];
extern void _ZN11S2011C24_ntD1Ev();
extern void _ZN11S2011C24_ntD0Ev();
static  VTBL_ENTRY vtc_S2011C24_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C24_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C24_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C24_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S2011C24_nt[];
VTBL_ENTRY *P__ZTI11S2011C24_nt = _ZTI11S2011C24_nt; 
extern  VTBL_ENTRY _ZTV11S2011C24_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C19_nt  : S2011C16_nt {
  ::S2011C20_nt s2011c19f0;
  ::S2011C15_nt s2011c19f1;
  ::S2011C21_nt s2011c19f2;
  ::S2011C24_nt s2011c19f3;
  ::S487C11_nt s2011c19f4;
  ::S487C11_nt s2011c19f5;
  char s2011c19f6[2];
  int s2011c19f7;
  ::S7368C9_nt s2011c19f8;
  ::S7368C9_nt s2011c19f9;
  ::S487C11_nt s2011c19f10;
  ::S7368C9_nt s2011c19f11;
  ::S7368C9_nt s2011c19f12;
  int s2011c19f13[3];
  void *s2011c19f14;
  ::S7368C9_nt s2011c19f15;
  ::S2011C24_nt s2011c19f16;
  ::S7368C9_nt s2011c19f17;
  int s2011c19f18;
  virtual  ~S2011C19_nt(); // _ZN11S2011C19_ntD1Ev
  virtual void  v44(); // _ZN11S2011C19_nt3v44Ev
  virtual void  v45(); // _ZN11S2011C19_nt3v45Ev
  S2011C19_nt(); // tgen
};
//SIG(-1 S2011C19_nt) C1{ BC2{ vd v3 v4} vd v1 v2 FC3{ BC2 vd v5 v6 FC4{ m Fp Fi FC5{ m}}} FC6{ BC2 vd v7 v8 FC4 FC4 Fi} FC7{ BC8{ m Fp Fi[2] FC9{ m}} BC2 vd v9 v10} FC10{ vd m FC11{ m Fs[6] Fi[2] Fc Fs}} FC12{ m Fp Fi FC13{ m}} FC12 Fc[2] Fi FC4 FC4 FC12 FC4 FC4 Fi[3] Fp FC4 FC10 FC4 Fi}


 S2011C19_nt ::~S2011C19_nt(){ note_dtor("S2011C19_nt", this);}
void  S2011C19_nt ::v44(){vfunc_called(this, "_ZN11S2011C19_nt3v44Ev");}
void  S2011C19_nt ::v45(){vfunc_called(this, "_ZN11S2011C19_nt3v45Ev");}
S2011C19_nt ::S2011C19_nt(){ note_ctor("S2011C19_nt", this);} // tgen

//skip512 S2011C19_nt

#else // __cplusplus

extern void _ZN11S2011C19_ntC1Ev();
extern void _ZN11S2011C19_ntD1Ev();
Name_Map name_map_S2011C19_nt[] = {
  NSPAIR(_ZN11S2011C19_ntC1Ev),
  NSPAIR(_ZN11S2011C19_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C16_nt;
extern VTBL_ENTRY _ZTI11S2011C16_nt[];
extern  VTBL_ENTRY _ZTV11S2011C16_nt[];
static Base_Class bases_S2011C19_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S2011C19_nt[];
extern void _ZN11S2011C19_ntD1Ev();
extern void _ZN11S2011C19_ntD0Ev();
extern void _ZN11S2011C16_nt3v42Ev();
extern void _ZN11S2011C16_nt3v43Ev();
extern void _ZN11S2011C19_nt3v44Ev();
extern void _ZN11S2011C19_nt3v45Ev();
static  VTBL_ENTRY vtc_S2011C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C19_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2011C16_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S2011C19_nt3v44Ev,
  (VTBL_ENTRY)&_ZN11S2011C19_nt3v45Ev,
};
extern VTBL_ENTRY _ZTI11S2011C19_nt[];
VTBL_ENTRY *P__ZTI11S2011C19_nt = _ZTI11S2011C19_nt; 
extern  VTBL_ENTRY _ZTV11S2011C19_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C29_nt  {
  void *s2011c29f0[3];
  char s2011c29f1[60];
  int s2011c29f2;
};
//SIG(-1 S2011C29_nt) C1{ Fp[3] Fc[60] Fi}



//skip512 S2011C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C28_nt  {
  int s2011c28f0;
  ::S2011C29_nt s2011c28f1;
  int s2011c28f2[3];
  void *s2011c28f3[5];
  char s2011c28f4[28];
};
//SIG(-1 S2011C28_nt) C1{ Fi FC2{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}



//skip512 S2011C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C13_nt  : S2011C14_nt {
  int s2011c13f0;
  ::S2011C15_nt s2011c13f1;
  ::S2011C19_nt s2011c13f2;
  ::S2011C28_nt s2011c13f3;
  ~S2011C13_nt(); // tgen
  S2011C13_nt(); // tgen
};
//SIG(-1 S2011C13_nt) C1{ BC2{ vd} Fi FC3{ BC4{ vd v3 v4} vd v1 v2 FC5{ m Fp Fi FC6{ m}} FC5 Fi} FC7{ BC4 vd v5 v6 FC8{ BC4 vd v7 v8 FC5} FC3 FC9{ BC10{ m Fp Fi[2] FC11{ m}} BC4 vd v9 v10} FC12{ vd m FC13{ m Fs[6] Fi[2] Fc Fs}} FC14{ m Fp Fi FC15{ m}} FC14 Fc[2] Fi FC5 FC5 FC14 FC5 FC5 Fi[3] Fp FC5 FC12 FC5 Fi} FC16{ Fi FC17{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}}


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

//skip512 S2011C13_nt

#else // __cplusplus

extern void _ZN11S2011C13_ntC1Ev();
extern void _ZN11S2011C13_ntD1Ev();
Name_Map name_map_S2011C13_nt[] = {
  NSPAIR(_ZN11S2011C13_ntC1Ev),
  NSPAIR(_ZN11S2011C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
static Base_Class bases_S2011C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S2011C13_nt[];
extern void _ZN11S2011C13_ntD1Ev();
extern void _ZN11S2011C13_ntD0Ev();
static  VTBL_ENTRY vtc_S2011C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2011C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S2011C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2011C13_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S2011C13_nt[];
VTBL_ENTRY *P__ZTI11S2011C13_nt = _ZTI11S2011C13_nt; 
extern  VTBL_ENTRY _ZTV11S2011C13_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2011C1  : S2011C2_nt , S2011C9_nt {
  ::S2011C13_nt s2011c1f0;
  virtual  ~S2011C1(); // _ZN7S2011C1D1Ev
  virtual void  v1(); // _ZN7S2011C12v1Ev
  virtual void  v2(); // _ZN7S2011C12v2Ev
  virtual void  v3(); // _ZN7S2011C12v3Ev
  virtual void  v4(); // _ZN7S2011C12v4Ev
  virtual void  v5(); // _ZN7S2011C12v5Ev
  virtual void  v6(); // _ZN7S2011C12v6Ev
  virtual void  v7(); // _ZN7S2011C12v7Ev
  virtual void  v8(); // _ZN7S2011C12v8Ev
  virtual void  v9(); // _ZN7S2011C12v9Ev
  S2011C1(); // tgen
};
//SIG(1 S2011C1) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12} vd v13 v14 v15} vd v16 v17 v18 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc} BC9{ BC10{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp[2]} vd v33 v34 v35 v36 v37 v38 v39 FC11{ m Fp Fi[2] FC12{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC13{ BC14{ vd} Fi FC15{ BC16{ vd v42 v43} vd v40 v41 FC17{ m Fp Fi FC18{ m}} FC17 Fi} FC19{ BC16 vd v44 v45 FC20{ BC16 vd v46 v47 FC17} FC15 FC21{ BC22{ m Fp Fi[2] FC12} BC16 vd v48 v49} FC23{ vd m FC24{ m Fs[6] Fi[2] Fc Fs}} FC25{ m Fp Fi FC6} FC25 Fc[2] Fi FC17 FC17 FC25 FC17 FC17 Fi[3] Fp FC17 FC23 FC17 Fi} FC26{ Fi FC27{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}}}


 S2011C1 ::~S2011C1(){ note_dtor("S2011C1", this);}
void  S2011C1 ::v1(){vfunc_called(this, "_ZN7S2011C12v1Ev");}
void  S2011C1 ::v2(){vfunc_called(this, "_ZN7S2011C12v2Ev");}
void  S2011C1 ::v3(){vfunc_called(this, "_ZN7S2011C12v3Ev");}
void  S2011C1 ::v4(){vfunc_called(this, "_ZN7S2011C12v4Ev");}
void  S2011C1 ::v5(){vfunc_called(this, "_ZN7S2011C12v5Ev");}
void  S2011C1 ::v6(){vfunc_called(this, "_ZN7S2011C12v6Ev");}
void  S2011C1 ::v7(){vfunc_called(this, "_ZN7S2011C12v7Ev");}
void  S2011C1 ::v8(){vfunc_called(this, "_ZN7S2011C12v8Ev");}
void  S2011C1 ::v9(){vfunc_called(this, "_ZN7S2011C12v9Ev");}
S2011C1 ::S2011C1(){ note_ctor("S2011C1", this);} // tgen

static void Test_S2011C1()
{
  extern Class_Descriptor cd_S2011C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,129)];
    init_test(&cd_S2011C1, buf);
    S2011C1 *dp, &lv = *(dp=new (buf) S2011C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,512), "sizeof(S2011C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2011C1)");
    check_base_class_offset(lv, (S2011C4_nt*)(S2011C3_nt*)(S2011C2_nt*), 0, "S2011C1");
    check_base_class_offset(lv, (S2011C3_nt*)(S2011C2_nt*), 0, "S2011C1");
    check_base_class_offset(lv, (S2011C2_nt*), 0, "S2011C1");
    check_base_class_offset(lv, (S2011C10_nt*)(S2011C9_nt*), ABISELECT(72,40), "S2011C1");
    check_base_class_offset(lv, (S2011C9_nt*), ABISELECT(72,40), "S2011C1");
    check_field_offset(lv, s2011c1f0, ABISELECT(120,68), "S2011C1.s2011c1f0");
    test_class_info(&lv, &cd_S2011C1);
    dp->~S2011C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2011C1(Test_S2011C1, "S2011C1", ABISELECT(728,512));

#else // __cplusplus

extern void _ZN7S2011C1C1Ev();
extern void _ZN7S2011C1D1Ev();
Name_Map name_map_S2011C1[] = {
  NSPAIR(_ZN7S2011C1C1Ev),
  NSPAIR(_ZN7S2011C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C4_nt;
extern VTBL_ENTRY _ZTI10S2011C4_nt[];
extern  VTBL_ENTRY _ZTV10S2011C4_nt[];
extern Class_Descriptor cd_S2011C3_nt;
extern VTBL_ENTRY _ZTI10S2011C3_nt[];
extern  VTBL_ENTRY _ZTV10S2011C3_nt[];
extern Class_Descriptor cd_S2011C2_nt;
extern VTBL_ENTRY _ZTI10S2011C2_nt[];
extern  VTBL_ENTRY _ZTV10S2011C2_nt[];
extern Class_Descriptor cd_S2011C10_nt;
extern VTBL_ENTRY _ZTI11S2011C10_nt[];
extern  VTBL_ENTRY _ZTV11S2011C10_nt[];
extern Class_Descriptor cd_S2011C9_nt;
extern VTBL_ENTRY _ZTI10S2011C9_nt[];
extern  VTBL_ENTRY _ZTV10S2011C9_nt[];
static Base_Class bases_S2011C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2011C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2011C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2011C10_nt,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2011C9_nt,    ABISELECT(72,40), //bcp->offset
    22, //bcp->virtual_function_table_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 _ZTI7S2011C1[];
extern void _ZN7S2011C1D1Ev();
extern void _ZN7S2011C1D0Ev();
extern void _ZN10S2011C4_nt3v10Ev();
extern void _ZN10S2011C4_nt3v11Ev();
extern void _ZN10S2011C4_nt3v12Ev();
extern void _ZN10S2011C3_nt3v13Ev();
extern void _ZN10S2011C3_nt3v14Ev();
extern void _ZN10S2011C3_nt3v15Ev();
extern void _ZN10S2011C2_nt3v16Ev();
extern void _ZN10S2011C2_nt3v17Ev();
extern void _ZN10S2011C2_nt3v18Ev();
extern void _ZN7S2011C12v1Ev();
extern void _ZN7S2011C12v2Ev();
extern void _ZN7S2011C12v3Ev();
extern void _ZN7S2011C12v4Ev();
extern void _ZN7S2011C12v5Ev();
extern void _ZN7S2011C12v6Ev();
extern void _ZN7S2011C12v7Ev();
extern void _ZN7S2011C12v8Ev();
extern void _ZN7S2011C12v9Ev();
extern void ABISELECT(_ZThn72_N7S2011C1D1Ev,_ZThn40_N7S2011C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2011C1D0Ev,_ZThn40_N7S2011C1D0Ev)();
extern void _ZN11S2011C10_nt3v19Ev();
extern void _ZN11S2011C10_nt3v20Ev();
extern void _ZN11S2011C10_nt3v21Ev();
extern void _ZN11S2011C10_nt3v22Ev();
extern void _ZN11S2011C10_nt3v23Ev();
extern void _ZN11S2011C10_nt3v24Ev();
extern void _ZN11S2011C10_nt3v25Ev();
extern void _ZN11S2011C10_nt3v26Ev();
extern void _ZN11S2011C10_nt3v27Ev();
extern void _ZN11S2011C10_nt3v28Ev();
extern void _ZN11S2011C10_nt3v29Ev();
extern void _ZN11S2011C10_nt3v30Ev();
extern void _ZN11S2011C10_nt3v31Ev();
extern void _ZN11S2011C10_nt3v32Ev();
extern void _ZN10S2011C9_nt3v33Ev();
extern void _ZN10S2011C9_nt3v34Ev();
extern void _ZN10S2011C9_nt3v35Ev();
extern void _ZN10S2011C9_nt3v36Ev();
extern void _ZN10S2011C9_nt3v37Ev();
extern void _ZN10S2011C9_nt3v38Ev();
extern void _ZN10S2011C9_nt3v39Ev();
static  VTBL_ENTRY vtc_S2011C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2011C1[0]),
  (VTBL_ENTRY)&_ZN7S2011C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2011C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2011C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2011C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2011C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2011C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2011C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2011C12v9Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2011C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2011C1D1Ev,_ZThn40_N7S2011C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2011C1D0Ev,_ZThn40_N7S2011C1D0Ev),
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v28Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v31Ev,
  (VTBL_ENTRY)&_ZN11S2011C10_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2011C9_nt3v39Ev,
};
extern VTBL_ENTRY _ZTI7S2011C1[];
extern  VTBL_ENTRY _ZTV7S2011C1[];
Class_Descriptor cd_S2011C1 = {  "S2011C1", // class name
  bases_S2011C1, 5,
  &(vtc_S2011C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(728,512), // object size
  NSPAIRA(_ZTI7S2011C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2011C1),47, //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  S2013C4  {
  virtual  ~S2013C4(); // _ZN7S2013C4D1Ev
  virtual void  v10(); // _ZN7S2013C43v10Ev
  virtual void  v11(); // _ZN7S2013C43v11Ev
  virtual void  v12(); // _ZN7S2013C43v12Ev
  S2013C4(); // tgen
};
//SIG(-1 S2013C4) C1{ vd v1 v2 v3}


 S2013C4 ::~S2013C4(){ note_dtor("S2013C4", this);}
void  S2013C4 ::v10(){vfunc_called(this, "_ZN7S2013C43v10Ev");}
void  S2013C4 ::v11(){vfunc_called(this, "_ZN7S2013C43v11Ev");}
void  S2013C4 ::v12(){vfunc_called(this, "_ZN7S2013C43v12Ev");}
S2013C4 ::S2013C4(){ note_ctor("S2013C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2013C4C1Ev();
extern void _ZN7S2013C4D1Ev();
Name_Map name_map_S2013C4[] = {
  NSPAIR(_ZN7S2013C4C1Ev),
  NSPAIR(_ZN7S2013C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2013C4[];
extern void _ZN7S2013C4D1Ev();
extern void _ZN7S2013C4D0Ev();
extern void _ZN7S2013C43v10Ev();
extern void _ZN7S2013C43v11Ev();
extern void _ZN7S2013C43v12Ev();
static  VTBL_ENTRY vtc_S2013C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2013C4[0]),
  (VTBL_ENTRY)&_ZN7S2013C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2013C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v12Ev,
};
extern VTBL_ENTRY _ZTI7S2013C4[];
extern  VTBL_ENTRY _ZTV7S2013C4[];
Class_Descriptor cd_S2013C4 = {  "S2013C4", // class name
  0,0,//no base classes
  &(vtc_S2013C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2013C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2013C4),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  S2013C3  : S2013C4 {
  virtual  ~S2013C3(); // _ZN7S2013C3D1Ev
  virtual void  v13(); // _ZN7S2013C33v13Ev
  virtual void  v14(); // _ZN7S2013C33v14Ev
  virtual void  v15(); // _ZN7S2013C33v15Ev
  S2013C3(); // tgen
};
//SIG(-1 S2013C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2013C3 ::~S2013C3(){ note_dtor("S2013C3", this);}
void  S2013C3 ::v13(){vfunc_called(this, "_ZN7S2013C33v13Ev");}
void  S2013C3 ::v14(){vfunc_called(this, "_ZN7S2013C33v14Ev");}
void  S2013C3 ::v15(){vfunc_called(this, "_ZN7S2013C33v15Ev");}
S2013C3 ::S2013C3(){ note_ctor("S2013C3", this);} // tgen

static void Test_S2013C3()
{
  extern Class_Descriptor cd_S2013C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2013C3, buf);
    S2013C3 *dp, &lv = *(dp=new (buf) S2013C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2013C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2013C3)");
    check_base_class_offset(lv, (S2013C4*), 0, "S2013C3");
    test_class_info(&lv, &cd_S2013C3);
    dp->~S2013C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2013C3(Test_S2013C3, "S2013C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2013C3C1Ev();
extern void _ZN7S2013C3D1Ev();
Name_Map name_map_S2013C3[] = {
  NSPAIR(_ZN7S2013C3C1Ev),
  NSPAIR(_ZN7S2013C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2013C4;
extern VTBL_ENTRY _ZTI7S2013C4[];
extern  VTBL_ENTRY _ZTV7S2013C4[];
static Base_Class bases_S2013C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2013C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2013C3[];
extern void _ZN7S2013C3D1Ev();
extern void _ZN7S2013C3D0Ev();
extern void _ZN7S2013C43v10Ev();
extern void _ZN7S2013C43v11Ev();
extern void _ZN7S2013C43v12Ev();
extern void _ZN7S2013C33v13Ev();
extern void _ZN7S2013C33v14Ev();
extern void _ZN7S2013C33v15Ev();
static  VTBL_ENTRY vtc_S2013C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2013C3[0]),
  (VTBL_ENTRY)&_ZN7S2013C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2013C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S2013C3[];
extern  VTBL_ENTRY _ZTV7S2013C3[];
Class_Descriptor cd_S2013C3 = {  "S2013C3", // class name
  bases_S2013C3, 1,
  &(vtc_S2013C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2013C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2013C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2013C7_nt  {
  __tsi64 s2013c7f0[4];
  void  mf2013c7(); // _ZN10S2013C7_nt8mf2013c7Ev
};
//SIG(-1 S2013C7_nt) C1{ m FL[4]}


void  S2013C7_nt ::mf2013c7(){}

//skip512 S2013C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2013C2_nt  : S2013C3 {
  ::S7368C77 s2013c2f0;
  ::S2013C7_nt s2013c2f1;
  char s2013c2f2;
  virtual  ~S2013C2_nt(); // _ZN10S2013C2_ntD1Ev
  virtual void  v16(); // _ZN10S2013C2_nt3v16Ev
  virtual void  v17(); // _ZN10S2013C2_nt3v17Ev
  virtual void  v18(); // _ZN10S2013C2_nt3v18Ev
  S2013C2_nt(); // tgen
};
//SIG(-1 S2013C2_nt) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S2013C2_nt ::~S2013C2_nt(){ note_dtor("S2013C2_nt", this);}
void  S2013C2_nt ::v16(){vfunc_called(this, "_ZN10S2013C2_nt3v16Ev");}
void  S2013C2_nt ::v17(){vfunc_called(this, "_ZN10S2013C2_nt3v17Ev");}
void  S2013C2_nt ::v18(){vfunc_called(this, "_ZN10S2013C2_nt3v18Ev");}
S2013C2_nt ::S2013C2_nt(){ note_ctor("S2013C2_nt", this);} // tgen

//skip512 S2013C2_nt

#else // __cplusplus

extern void _ZN10S2013C2_ntC1Ev();
extern void _ZN10S2013C2_ntD1Ev();
Name_Map name_map_S2013C2_nt[] = {
  NSPAIR(_ZN10S2013C2_ntC1Ev),
  NSPAIR(_ZN10S2013C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2013C4;
extern VTBL_ENTRY _ZTI7S2013C4[];
extern  VTBL_ENTRY _ZTV7S2013C4[];
extern Class_Descriptor cd_S2013C3;
extern VTBL_ENTRY _ZTI7S2013C3[];
extern  VTBL_ENTRY _ZTV7S2013C3[];
static Base_Class bases_S2013C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2013C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2013C2_nt[];
extern void _ZN10S2013C2_ntD1Ev();
extern void _ZN10S2013C2_ntD0Ev();
extern void _ZN7S2013C43v10Ev();
extern void _ZN7S2013C43v11Ev();
extern void _ZN7S2013C43v12Ev();
extern void _ZN7S2013C33v13Ev();
extern void _ZN7S2013C33v14Ev();
extern void _ZN7S2013C33v15Ev();
extern void _ZN10S2013C2_nt3v16Ev();
extern void _ZN10S2013C2_nt3v17Ev();
extern void _ZN10S2013C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S2013C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2013C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2013C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2013C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v15Ev,
  (VTBL_ENTRY)&_ZN10S2013C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2013C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2013C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S2013C2_nt[];
VTBL_ENTRY *P__ZTI10S2013C2_nt = _ZTI10S2013C2_nt; 
extern  VTBL_ENTRY _ZTV10S2013C2_nt[];
Class_Descriptor cd_S2013C2_nt = {  "S2013C2_nt", // class name
  bases_S2013C2_nt, 2,
  &(vtc_S2013C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S2013C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2013C2_nt),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  S2013C9  {
  void *s2013c9f0[2];
  virtual  ~S2013C9(); // _ZN7S2013C9D1Ev
  virtual void  v19(); // _ZN7S2013C93v19Ev
  virtual void  v20(); // _ZN7S2013C93v20Ev
  virtual void  v21(); // _ZN7S2013C93v21Ev
  virtual void  v22(); // _ZN7S2013C93v22Ev
  virtual void  v23(); // _ZN7S2013C93v23Ev
  virtual void  v24(); // _ZN7S2013C93v24Ev
  virtual void  v25(); // _ZN7S2013C93v25Ev
  virtual void  v26(); // _ZN7S2013C93v26Ev
  virtual void  v27(); // _ZN7S2013C93v27Ev
  virtual void  v28(); // _ZN7S2013C93v28Ev
  virtual void  v29(); // _ZN7S2013C93v29Ev
  virtual void  v30(); // _ZN7S2013C93v30Ev
  virtual void  v31(); // _ZN7S2013C93v31Ev
  virtual void  v32(); // _ZN7S2013C93v32Ev
  S2013C9(); // tgen
};
//SIG(-1 S2013C9) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2013C9 ::~S2013C9(){ note_dtor("S2013C9", this);}
void  S2013C9 ::v19(){vfunc_called(this, "_ZN7S2013C93v19Ev");}
void  S2013C9 ::v20(){vfunc_called(this, "_ZN7S2013C93v20Ev");}
void  S2013C9 ::v21(){vfunc_called(this, "_ZN7S2013C93v21Ev");}
void  S2013C9 ::v22(){vfunc_called(this, "_ZN7S2013C93v22Ev");}
void  S2013C9 ::v23(){vfunc_called(this, "_ZN7S2013C93v23Ev");}
void  S2013C9 ::v24(){vfunc_called(this, "_ZN7S2013C93v24Ev");}
void  S2013C9 ::v25(){vfunc_called(this, "_ZN7S2013C93v25Ev");}
void  S2013C9 ::v26(){vfunc_called(this, "_ZN7S2013C93v26Ev");}
void  S2013C9 ::v27(){vfunc_called(this, "_ZN7S2013C93v27Ev");}
void  S2013C9 ::v28(){vfunc_called(this, "_ZN7S2013C93v28Ev");}
void  S2013C9 ::v29(){vfunc_called(this, "_ZN7S2013C93v29Ev");}
void  S2013C9 ::v30(){vfunc_called(this, "_ZN7S2013C93v30Ev");}
void  S2013C9 ::v31(){vfunc_called(this, "_ZN7S2013C93v31Ev");}
void  S2013C9 ::v32(){vfunc_called(this, "_ZN7S2013C93v32Ev");}
S2013C9 ::S2013C9(){ note_ctor("S2013C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2013C9C1Ev();
extern void _ZN7S2013C9D1Ev();
Name_Map name_map_S2013C9[] = {
  NSPAIR(_ZN7S2013C9C1Ev),
  NSPAIR(_ZN7S2013C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2013C9[];
extern void _ZN7S2013C9D1Ev();
extern void _ZN7S2013C9D0Ev();
extern void _ZN7S2013C93v19Ev();
extern void _ZN7S2013C93v20Ev();
extern void _ZN7S2013C93v21Ev();
extern void _ZN7S2013C93v22Ev();
extern void _ZN7S2013C93v23Ev();
extern void _ZN7S2013C93v24Ev();
extern void _ZN7S2013C93v25Ev();
extern void _ZN7S2013C93v26Ev();
extern void _ZN7S2013C93v27Ev();
extern void _ZN7S2013C93v28Ev();
extern void _ZN7S2013C93v29Ev();
extern void _ZN7S2013C93v30Ev();
extern void _ZN7S2013C93v31Ev();
extern void _ZN7S2013C93v32Ev();
static  VTBL_ENTRY vtc_S2013C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2013C9[0]),
  (VTBL_ENTRY)&_ZN7S2013C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2013C9D0Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v19Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v20Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v21Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v32Ev,
};
extern VTBL_ENTRY _ZTI7S2013C9[];
extern  VTBL_ENTRY _ZTV7S2013C9[];
Class_Descriptor cd_S2013C9 = {  "S2013C9", // class name
  0,0,//no base classes
  &(vtc_S2013C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2013C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2013C9),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2013C8  : S2013C9 {
  ::S7368C58 s2013c8f0;
  virtual  ~S2013C8(); // _ZN7S2013C8D1Ev
  virtual void  v33(); // _ZN7S2013C83v33Ev
  virtual void  v34(); // _ZN7S2013C83v34Ev
  virtual void  v35(); // _ZN7S2013C83v35Ev
  virtual void  v36(); // _ZN7S2013C83v36Ev
  virtual void  v37(); // _ZN7S2013C83v37Ev
  virtual void  v38(); // _ZN7S2013C83v38Ev
  virtual void  v39(); // _ZN7S2013C83v39Ev
  S2013C8(); // tgen
};
//SIG(-1 S2013C8) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2013C8 ::~S2013C8(){ note_dtor("S2013C8", this);}
void  S2013C8 ::v33(){vfunc_called(this, "_ZN7S2013C83v33Ev");}
void  S2013C8 ::v34(){vfunc_called(this, "_ZN7S2013C83v34Ev");}
void  S2013C8 ::v35(){vfunc_called(this, "_ZN7S2013C83v35Ev");}
void  S2013C8 ::v36(){vfunc_called(this, "_ZN7S2013C83v36Ev");}
void  S2013C8 ::v37(){vfunc_called(this, "_ZN7S2013C83v37Ev");}
void  S2013C8 ::v38(){vfunc_called(this, "_ZN7S2013C83v38Ev");}
void  S2013C8 ::v39(){vfunc_called(this, "_ZN7S2013C83v39Ev");}
S2013C8 ::S2013C8(){ note_ctor("S2013C8", this);} // tgen

static void Test_S2013C8()
{
  extern Class_Descriptor cd_S2013C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2013C8, buf);
    S2013C8 *dp, &lv = *(dp=new (buf) S2013C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2013C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2013C8)");
    check_base_class_offset(lv, (S2013C9*), 0, "S2013C8");
    check_field_offset(lv, s2013c8f0, ABISELECT(24,12), "S2013C8.s2013c8f0");
    test_class_info(&lv, &cd_S2013C8);
    dp->~S2013C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2013C8(Test_S2013C8, "S2013C8", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2013C8C1Ev();
extern void _ZN7S2013C8D1Ev();
Name_Map name_map_S2013C8[] = {
  NSPAIR(_ZN7S2013C8C1Ev),
  NSPAIR(_ZN7S2013C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2013C9;
extern VTBL_ENTRY _ZTI7S2013C9[];
extern  VTBL_ENTRY _ZTV7S2013C9[];
static Base_Class bases_S2013C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2013C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2013C8[];
extern void _ZN7S2013C8D1Ev();
extern void _ZN7S2013C8D0Ev();
extern void _ZN7S2013C93v19Ev();
extern void _ZN7S2013C93v20Ev();
extern void _ZN7S2013C93v21Ev();
extern void _ZN7S2013C93v22Ev();
extern void _ZN7S2013C93v23Ev();
extern void _ZN7S2013C93v24Ev();
extern void _ZN7S2013C93v25Ev();
extern void _ZN7S2013C93v26Ev();
extern void _ZN7S2013C93v27Ev();
extern void _ZN7S2013C93v28Ev();
extern void _ZN7S2013C93v29Ev();
extern void _ZN7S2013C93v30Ev();
extern void _ZN7S2013C93v31Ev();
extern void _ZN7S2013C93v32Ev();
extern void _ZN7S2013C83v33Ev();
extern void _ZN7S2013C83v34Ev();
extern void _ZN7S2013C83v35Ev();
extern void _ZN7S2013C83v36Ev();
extern void _ZN7S2013C83v37Ev();
extern void _ZN7S2013C83v38Ev();
extern void _ZN7S2013C83v39Ev();
static  VTBL_ENTRY vtc_S2013C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2013C8[0]),
  (VTBL_ENTRY)&_ZN7S2013C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2013C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v19Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v20Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v21Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v33Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v34Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v35Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v36Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v37Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v38Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v39Ev,
};
extern VTBL_ENTRY _ZTI7S2013C8[];
extern  VTBL_ENTRY _ZTV7S2013C8[];
Class_Descriptor cd_S2013C8 = {  "S2013C8", // class name
  bases_S2013C8, 1,
  &(vtc_S2013C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2013C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2013C8),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2013C1  : S2013C2_nt , S2013C8 {
  ::S2011C13_nt s2013c1f0;
  virtual  ~S2013C1(); // _ZN7S2013C1D1Ev
  virtual void  v1(); // _ZN7S2013C12v1Ev
  virtual void  v2(); // _ZN7S2013C12v2Ev
  virtual void  v3(); // _ZN7S2013C12v3Ev
  virtual void  v4(); // _ZN7S2013C12v4Ev
  virtual void  v5(); // _ZN7S2013C12v5Ev
  virtual void  v6(); // _ZN7S2013C12v6Ev
  virtual void  v7(); // _ZN7S2013C12v7Ev
  virtual void  v8(); // _ZN7S2013C12v8Ev
  virtual void  v9(); // _ZN7S2013C12v9Ev
  S2013C1(); // tgen
};
//SIG(1 S2013C1) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12} vd v13 v14 v15} vd v16 v17 v18 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} BC8{ BC9{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fp[2]} vd v33 v34 v35 v36 v37 v38 v39 FC10{ m Fp Fi[2] FC11{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC12{ BC13{ vd} Fi FC14{ BC15{ vd v42 v43} vd v40 v41 FC16{ m Fp Fi FC17{ m}} FC16 Fi} FC18{ BC15 vd v44 v45 FC19{ BC15 vd v46 v47 FC16} FC14 FC20{ BC21{ m Fp Fi[2] FC11} BC15 vd v48 v49} FC22{ vd m FC23{ m Fs[6] Fi[2] Fc Fs}} FC24{ m Fp Fi FC6} FC24 Fc[2] Fi FC16 FC16 FC24 FC16 FC16 Fi[3] Fp FC16 FC22 FC16 Fi} FC25{ Fi FC26{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}}}


 S2013C1 ::~S2013C1(){ note_dtor("S2013C1", this);}
void  S2013C1 ::v1(){vfunc_called(this, "_ZN7S2013C12v1Ev");}
void  S2013C1 ::v2(){vfunc_called(this, "_ZN7S2013C12v2Ev");}
void  S2013C1 ::v3(){vfunc_called(this, "_ZN7S2013C12v3Ev");}
void  S2013C1 ::v4(){vfunc_called(this, "_ZN7S2013C12v4Ev");}
void  S2013C1 ::v5(){vfunc_called(this, "_ZN7S2013C12v5Ev");}
void  S2013C1 ::v6(){vfunc_called(this, "_ZN7S2013C12v6Ev");}
void  S2013C1 ::v7(){vfunc_called(this, "_ZN7S2013C12v7Ev");}
void  S2013C1 ::v8(){vfunc_called(this, "_ZN7S2013C12v8Ev");}
void  S2013C1 ::v9(){vfunc_called(this, "_ZN7S2013C12v9Ev");}
S2013C1 ::S2013C1(){ note_ctor("S2013C1", this);} // tgen

static void Test_S2013C1()
{
  extern Class_Descriptor cd_S2013C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,133)];
    init_test(&cd_S2013C1, buf);
    S2013C1 *dp, &lv = *(dp=new (buf) S2013C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,528), "sizeof(S2013C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2013C1)");
    check_base_class_offset(lv, (S2013C4*)(S2013C3*)(S2013C2_nt*), 0, "S2013C1");
    check_base_class_offset(lv, (S2013C3*)(S2013C2_nt*), 0, "S2013C1");
    check_base_class_offset(lv, (S2013C2_nt*), 0, "S2013C1");
    check_base_class_offset(lv, (S2013C9*)(S2013C8*), ABISELECT(72,56), "S2013C1");
    check_base_class_offset(lv, (S2013C8*), ABISELECT(72,56), "S2013C1");
    check_field_offset(lv, s2013c1f0, ABISELECT(120,84), "S2013C1.s2013c1f0");
    test_class_info(&lv, &cd_S2013C1);
    dp->~S2013C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2013C1(Test_S2013C1, "S2013C1", ABISELECT(728,528));

#else // __cplusplus

extern void _ZN7S2013C1C1Ev();
extern void _ZN7S2013C1D1Ev();
Name_Map name_map_S2013C1[] = {
  NSPAIR(_ZN7S2013C1C1Ev),
  NSPAIR(_ZN7S2013C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2013C4;
extern VTBL_ENTRY _ZTI7S2013C4[];
extern  VTBL_ENTRY _ZTV7S2013C4[];
extern Class_Descriptor cd_S2013C3;
extern VTBL_ENTRY _ZTI7S2013C3[];
extern  VTBL_ENTRY _ZTV7S2013C3[];
extern Class_Descriptor cd_S2013C2_nt;
extern VTBL_ENTRY _ZTI10S2013C2_nt[];
extern  VTBL_ENTRY _ZTV10S2013C2_nt[];
extern Class_Descriptor cd_S2013C9;
extern VTBL_ENTRY _ZTI7S2013C9[];
extern  VTBL_ENTRY _ZTV7S2013C9[];
extern Class_Descriptor cd_S2013C8;
extern VTBL_ENTRY _ZTI7S2013C8[];
extern  VTBL_ENTRY _ZTV7S2013C8[];
static Base_Class bases_S2013C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2013C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2013C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2013C9,    ABISELECT(72,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2013C8,    ABISELECT(72,56), //bcp->offset
    22, //bcp->virtual_function_table_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 _ZTI7S2013C1[];
extern void _ZN7S2013C1D1Ev();
extern void _ZN7S2013C1D0Ev();
extern void _ZN7S2013C43v10Ev();
extern void _ZN7S2013C43v11Ev();
extern void _ZN7S2013C43v12Ev();
extern void _ZN7S2013C33v13Ev();
extern void _ZN7S2013C33v14Ev();
extern void _ZN7S2013C33v15Ev();
extern void _ZN10S2013C2_nt3v16Ev();
extern void _ZN10S2013C2_nt3v17Ev();
extern void _ZN10S2013C2_nt3v18Ev();
extern void _ZN7S2013C12v1Ev();
extern void _ZN7S2013C12v2Ev();
extern void _ZN7S2013C12v3Ev();
extern void _ZN7S2013C12v4Ev();
extern void _ZN7S2013C12v5Ev();
extern void _ZN7S2013C12v6Ev();
extern void _ZN7S2013C12v7Ev();
extern void _ZN7S2013C12v8Ev();
extern void _ZN7S2013C12v9Ev();
extern void ABISELECT(_ZThn72_N7S2013C1D1Ev,_ZThn56_N7S2013C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2013C1D0Ev,_ZThn56_N7S2013C1D0Ev)();
extern void _ZN7S2013C93v19Ev();
extern void _ZN7S2013C93v20Ev();
extern void _ZN7S2013C93v21Ev();
extern void _ZN7S2013C93v22Ev();
extern void _ZN7S2013C93v23Ev();
extern void _ZN7S2013C93v24Ev();
extern void _ZN7S2013C93v25Ev();
extern void _ZN7S2013C93v26Ev();
extern void _ZN7S2013C93v27Ev();
extern void _ZN7S2013C93v28Ev();
extern void _ZN7S2013C93v29Ev();
extern void _ZN7S2013C93v30Ev();
extern void _ZN7S2013C93v31Ev();
extern void _ZN7S2013C93v32Ev();
extern void _ZN7S2013C83v33Ev();
extern void _ZN7S2013C83v34Ev();
extern void _ZN7S2013C83v35Ev();
extern void _ZN7S2013C83v36Ev();
extern void _ZN7S2013C83v37Ev();
extern void _ZN7S2013C83v38Ev();
extern void _ZN7S2013C83v39Ev();
static  VTBL_ENTRY vtc_S2013C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2013C1[0]),
  (VTBL_ENTRY)&_ZN7S2013C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2013C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2013C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2013C33v15Ev,
  (VTBL_ENTRY)&_ZN10S2013C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2013C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2013C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2013C12v9Ev,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S2013C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2013C1D1Ev,_ZThn56_N7S2013C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2013C1D0Ev,_ZThn56_N7S2013C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2013C93v19Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v20Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v21Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2013C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v33Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v34Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v35Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v36Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v37Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v38Ev,
  (VTBL_ENTRY)&_ZN7S2013C83v39Ev,
};
extern VTBL_ENTRY _ZTI7S2013C1[];
extern  VTBL_ENTRY _ZTV7S2013C1[];
Class_Descriptor cd_S2013C1 = {  "S2013C1", // class name
  bases_S2013C1, 5,
  &(vtc_S2013C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(728,528), // object size
  NSPAIRA(_ZTI7S2013C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2013C1),47, //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  S6712C2  {
  int s6712c2f0;
  __tsi64 s6712c2f1;
  void *s6712c2f2[4];
  int s6712c2f3[2];
  void *s6712c2f4;
  ::S499C6_nt s6712c2f5;
  void *s6712c2f6[2];
  virtual  ~S6712C2(); // _ZN7S6712C2D1Ev
  virtual void  v3(); // _ZN7S6712C22v3Ev
  virtual void  v4(); // _ZN7S6712C22v4Ev
  virtual void  v5(); // _ZN7S6712C22v5Ev
  virtual void  v6(); // _ZN7S6712C22v6Ev
  virtual void  v7(); // _ZN7S6712C22v7Ev
  virtual void  v8(); // _ZN7S6712C22v8Ev
  virtual void  v9(); // _ZN7S6712C22v9Ev
  virtual void  v10(); // _ZN7S6712C23v10Ev
  virtual void  v11(); // _ZN7S6712C23v11Ev
  virtual void  v12(); // _ZN7S6712C23v12Ev
  virtual void  v13(); // _ZN7S6712C23v13Ev
  virtual void  v14(); // _ZN7S6712C23v14Ev
  virtual void  v15(); // _ZN7S6712C23v15Ev
  virtual void  v16(); // _ZN7S6712C23v16Ev
  virtual void  v17(); // _ZN7S6712C23v17Ev
  virtual void  v18(); // _ZN7S6712C23v18Ev
  virtual void  v19(); // _ZN7S6712C23v19Ev
  virtual void  v20(); // _ZN7S6712C23v20Ev
  virtual void  v21(); // _ZN7S6712C23v21Ev
  virtual void  v22(); // _ZN7S6712C23v22Ev
  virtual void  v23(); // _ZN7S6712C23v23Ev
  virtual void  v24(); // _ZN7S6712C23v24Ev
  virtual void  v25(); // _ZN7S6712C23v25Ev
  virtual void  v26(); // _ZN7S6712C23v26Ev
  virtual void  v27(); // _ZN7S6712C23v27Ev
  virtual void  v28(); // _ZN7S6712C23v28Ev
  virtual void  v29(); // _ZN7S6712C23v29Ev
  virtual void  v30(); // _ZN7S6712C23v30Ev
  virtual void  v31(); // _ZN7S6712C23v31Ev
  virtual void  v32(); // _ZN7S6712C23v32Ev
  virtual void  v33(); // _ZN7S6712C23v33Ev
  virtual void  v34(); // _ZN7S6712C23v34Ev
  virtual void  v35(); // _ZN7S6712C23v35Ev
  virtual void  v36(); // _ZN7S6712C23v36Ev
  virtual void  v37(); // _ZN7S6712C23v37Ev
  virtual void  v38(); // _ZN7S6712C23v38Ev
  virtual void  v39(); // _ZN7S6712C23v39Ev
  virtual void  v40(); // _ZN7S6712C23v40Ev
  virtual void  v41(); // _ZN7S6712C23v41Ev
  virtual void  v42(); // _ZN7S6712C23v42Ev
  virtual void  v43(); // _ZN7S6712C23v43Ev
  virtual void  v44(); // _ZN7S6712C23v44Ev
  virtual void  v45(); // _ZN7S6712C23v45Ev
  virtual void  v46(); // _ZN7S6712C23v46Ev
  virtual void  v47(); // _ZN7S6712C23v47Ev
  virtual void  v48(); // _ZN7S6712C23v48Ev
  virtual void  v49(); // _ZN7S6712C23v49Ev
  virtual void  v50(); // _ZN7S6712C23v50Ev
  virtual void  v51(); // _ZN7S6712C23v51Ev
  virtual void  v52(); // _ZN7S6712C23v52Ev
  virtual void  v53(); // _ZN7S6712C23v53Ev
  virtual void  v54(); // _ZN7S6712C23v54Ev
  virtual void  v55(); // _ZN7S6712C23v55Ev
  virtual void  v56(); // _ZN7S6712C23v56Ev
  virtual void  v57(); // _ZN7S6712C23v57Ev
  virtual void  v58(); // _ZN7S6712C23v58Ev
  virtual void  v59(); // _ZN7S6712C23v59Ev
  virtual void  v60(); // _ZN7S6712C23v60Ev
  virtual void  v61(); // _ZN7S6712C23v61Ev
  virtual void  v62(); // _ZN7S6712C23v62Ev
  virtual void  v63(); // _ZN7S6712C23v63Ev
  virtual void  v64(); // _ZN7S6712C23v64Ev
  virtual void  v65(); // _ZN7S6712C23v65Ev
  virtual void  v66(); // _ZN7S6712C23v66Ev
  S6712C2(); // tgen
};
//SIG(-1 S6712C2) 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]}


 S6712C2 ::~S6712C2(){ note_dtor("S6712C2", this);}
void  S6712C2 ::v3(){vfunc_called(this, "_ZN7S6712C22v3Ev");}
void  S6712C2 ::v4(){vfunc_called(this, "_ZN7S6712C22v4Ev");}
void  S6712C2 ::v5(){vfunc_called(this, "_ZN7S6712C22v5Ev");}
void  S6712C2 ::v6(){vfunc_called(this, "_ZN7S6712C22v6Ev");}
void  S6712C2 ::v7(){vfunc_called(this, "_ZN7S6712C22v7Ev");}
void  S6712C2 ::v8(){vfunc_called(this, "_ZN7S6712C22v8Ev");}
void  S6712C2 ::v9(){vfunc_called(this, "_ZN7S6712C22v9Ev");}
void  S6712C2 ::v10(){vfunc_called(this, "_ZN7S6712C23v10Ev");}
void  S6712C2 ::v11(){vfunc_called(this, "_ZN7S6712C23v11Ev");}
void  S6712C2 ::v12(){vfunc_called(this, "_ZN7S6712C23v12Ev");}
void  S6712C2 ::v13(){vfunc_called(this, "_ZN7S6712C23v13Ev");}
void  S6712C2 ::v14(){vfunc_called(this, "_ZN7S6712C23v14Ev");}
void  S6712C2 ::v15(){vfunc_called(this, "_ZN7S6712C23v15Ev");}
void  S6712C2 ::v16(){vfunc_called(this, "_ZN7S6712C23v16Ev");}
void  S6712C2 ::v17(){vfunc_called(this, "_ZN7S6712C23v17Ev");}
void  S6712C2 ::v18(){vfunc_called(this, "_ZN7S6712C23v18Ev");}
void  S6712C2 ::v19(){vfunc_called(this, "_ZN7S6712C23v19Ev");}
void  S6712C2 ::v20(){vfunc_called(this, "_ZN7S6712C23v20Ev");}
void  S6712C2 ::v21(){vfunc_called(this, "_ZN7S6712C23v21Ev");}
void  S6712C2 ::v22(){vfunc_called(this, "_ZN7S6712C23v22Ev");}
void  S6712C2 ::v23(){vfunc_called(this, "_ZN7S6712C23v23Ev");}
void  S6712C2 ::v24(){vfunc_called(this, "_ZN7S6712C23v24Ev");}
void  S6712C2 ::v25(){vfunc_called(this, "_ZN7S6712C23v25Ev");}
void  S6712C2 ::v26(){vfunc_called(this, "_ZN7S6712C23v26Ev");}
void  S6712C2 ::v27(){vfunc_called(this, "_ZN7S6712C23v27Ev");}
void  S6712C2 ::v28(){vfunc_called(this, "_ZN7S6712C23v28Ev");}
void  S6712C2 ::v29(){vfunc_called(this, "_ZN7S6712C23v29Ev");}
void  S6712C2 ::v30(){vfunc_called(this, "_ZN7S6712C23v30Ev");}
void  S6712C2 ::v31(){vfunc_called(this, "_ZN7S6712C23v31Ev");}
void  S6712C2 ::v32(){vfunc_called(this, "_ZN7S6712C23v32Ev");}
void  S6712C2 ::v33(){vfunc_called(this, "_ZN7S6712C23v33Ev");}
void  S6712C2 ::v34(){vfunc_called(this, "_ZN7S6712C23v34Ev");}
void  S6712C2 ::v35(){vfunc_called(this, "_ZN7S6712C23v35Ev");}
void  S6712C2 ::v36(){vfunc_called(this, "_ZN7S6712C23v36Ev");}
void  S6712C2 ::v37(){vfunc_called(this, "_ZN7S6712C23v37Ev");}
void  S6712C2 ::v38(){vfunc_called(this, "_ZN7S6712C23v38Ev");}
void  S6712C2 ::v39(){vfunc_called(this, "_ZN7S6712C23v39Ev");}
void  S6712C2 ::v40(){vfunc_called(this, "_ZN7S6712C23v40Ev");}
void  S6712C2 ::v41(){vfunc_called(this, "_ZN7S6712C23v41Ev");}
void  S6712C2 ::v42(){vfunc_called(this, "_ZN7S6712C23v42Ev");}
void  S6712C2 ::v43(){vfunc_called(this, "_ZN7S6712C23v43Ev");}
void  S6712C2 ::v44(){vfunc_called(this, "_ZN7S6712C23v44Ev");}
void  S6712C2 ::v45(){vfunc_called(this, "_ZN7S6712C23v45Ev");}
void  S6712C2 ::v46(){vfunc_called(this, "_ZN7S6712C23v46Ev");}
void  S6712C2 ::v47(){vfunc_called(this, "_ZN7S6712C23v47Ev");}
void  S6712C2 ::v48(){vfunc_called(this, "_ZN7S6712C23v48Ev");}
void  S6712C2 ::v49(){vfunc_called(this, "_ZN7S6712C23v49Ev");}
void  S6712C2 ::v50(){vfunc_called(this, "_ZN7S6712C23v50Ev");}
void  S6712C2 ::v51(){vfunc_called(this, "_ZN7S6712C23v51Ev");}
void  S6712C2 ::v52(){vfunc_called(this, "_ZN7S6712C23v52Ev");}
void  S6712C2 ::v53(){vfunc_called(this, "_ZN7S6712C23v53Ev");}
void  S6712C2 ::v54(){vfunc_called(this, "_ZN7S6712C23v54Ev");}
void  S6712C2 ::v55(){vfunc_called(this, "_ZN7S6712C23v55Ev");}
void  S6712C2 ::v56(){vfunc_called(this, "_ZN7S6712C23v56Ev");}
void  S6712C2 ::v57(){vfunc_called(this, "_ZN7S6712C23v57Ev");}
void  S6712C2 ::v58(){vfunc_called(this, "_ZN7S6712C23v58Ev");}
void  S6712C2 ::v59(){vfunc_called(this, "_ZN7S6712C23v59Ev");}
void  S6712C2 ::v60(){vfunc_called(this, "_ZN7S6712C23v60Ev");}
void  S6712C2 ::v61(){vfunc_called(this, "_ZN7S6712C23v61Ev");}
void  S6712C2 ::v62(){vfunc_called(this, "_ZN7S6712C23v62Ev");}
void  S6712C2 ::v63(){vfunc_called(this, "_ZN7S6712C23v63Ev");}
void  S6712C2 ::v64(){vfunc_called(this, "_ZN7S6712C23v64Ev");}
void  S6712C2 ::v65(){vfunc_called(this, "_ZN7S6712C23v65Ev");}
void  S6712C2 ::v66(){vfunc_called(this, "_ZN7S6712C23v66Ev");}
S6712C2 ::S6712C2(){ note_ctor("S6712C2", this);} // tgen

static void Test_S6712C2()
{
  extern Class_Descriptor cd_S6712C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6712C2, buf);
    S6712C2 *dp, &lv = *(dp=new (buf) S6712C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6712C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6712C2)");
    check_field_offset(lv, s6712c2f0, ABISELECT(8,4), "S6712C2.s6712c2f0");
    check_field_offset(lv, s6712c2f1, ABISELECT(16,8), "S6712C2.s6712c2f1");
    check_field_offset(lv, s6712c2f2, ABISELECT(24,16), "S6712C2.s6712c2f2");
    check_field_offset(lv, s6712c2f3, ABISELECT(56,32), "S6712C2.s6712c2f3");
    check_field_offset(lv, s6712c2f4, ABISELECT(64,40), "S6712C2.s6712c2f4");
    check_field_offset(lv, s6712c2f5, ABISELECT(72,44), "S6712C2.s6712c2f5");
    check_field_offset(lv, s6712c2f6, ABISELECT(80,52), "S6712C2.s6712c2f6");
    test_class_info(&lv, &cd_S6712C2);
    dp->~S6712C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6712C2(Test_S6712C2, "S6712C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6712C2C1Ev();
extern void _ZN7S6712C2D1Ev();
Name_Map name_map_S6712C2[] = {
  NSPAIR(_ZN7S6712C2C1Ev),
  NSPAIR(_ZN7S6712C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6712C2[];
extern void _ZN7S6712C2D1Ev();
extern void _ZN7S6712C2D0Ev();
extern void _ZN7S6712C22v3Ev();
extern void _ZN7S6712C22v4Ev();
extern void _ZN7S6712C22v5Ev();
extern void _ZN7S6712C22v6Ev();
extern void _ZN7S6712C22v7Ev();
extern void _ZN7S6712C22v8Ev();
extern void _ZN7S6712C22v9Ev();
extern void _ZN7S6712C23v10Ev();
extern void _ZN7S6712C23v11Ev();
extern void _ZN7S6712C23v12Ev();
extern void _ZN7S6712C23v13Ev();
extern void _ZN7S6712C23v14Ev();
extern void _ZN7S6712C23v15Ev();
extern void _ZN7S6712C23v16Ev();
extern void _ZN7S6712C23v17Ev();
extern void _ZN7S6712C23v18Ev();
extern void _ZN7S6712C23v19Ev();
extern void _ZN7S6712C23v20Ev();
extern void _ZN7S6712C23v21Ev();
extern void _ZN7S6712C23v22Ev();
extern void _ZN7S6712C23v23Ev();
extern void _ZN7S6712C23v24Ev();
extern void _ZN7S6712C23v25Ev();
extern void _ZN7S6712C23v26Ev();
extern void _ZN7S6712C23v27Ev();
extern void _ZN7S6712C23v28Ev();
extern void _ZN7S6712C23v29Ev();
extern void _ZN7S6712C23v30Ev();
extern void _ZN7S6712C23v31Ev();
extern void _ZN7S6712C23v32Ev();
extern void _ZN7S6712C23v33Ev();
extern void _ZN7S6712C23v34Ev();
extern void _ZN7S6712C23v35Ev();
extern void _ZN7S6712C23v36Ev();
extern void _ZN7S6712C23v37Ev();
extern void _ZN7S6712C23v38Ev();
extern void _ZN7S6712C23v39Ev();
extern void _ZN7S6712C23v40Ev();
extern void _ZN7S6712C23v41Ev();
extern void _ZN7S6712C23v42Ev();
extern void _ZN7S6712C23v43Ev();
extern void _ZN7S6712C23v44Ev();
extern void _ZN7S6712C23v45Ev();
extern void _ZN7S6712C23v46Ev();
extern void _ZN7S6712C23v47Ev();
extern void _ZN7S6712C23v48Ev();
extern void _ZN7S6712C23v49Ev();
extern void _ZN7S6712C23v50Ev();
extern void _ZN7S6712C23v51Ev();
extern void _ZN7S6712C23v52Ev();
extern void _ZN7S6712C23v53Ev();
extern void _ZN7S6712C23v54Ev();
extern void _ZN7S6712C23v55Ev();
extern void _ZN7S6712C23v56Ev();
extern void _ZN7S6712C23v57Ev();
extern void _ZN7S6712C23v58Ev();
extern void _ZN7S6712C23v59Ev();
extern void _ZN7S6712C23v60Ev();
extern void _ZN7S6712C23v61Ev();
extern void _ZN7S6712C23v62Ev();
extern void _ZN7S6712C23v63Ev();
extern void _ZN7S6712C23v64Ev();
extern void _ZN7S6712C23v65Ev();
extern void _ZN7S6712C23v66Ev();
static  VTBL_ENTRY vtc_S6712C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6712C2[0]),
  (VTBL_ENTRY)&_ZN7S6712C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6712C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v66Ev,
};
extern VTBL_ENTRY _ZTI7S6712C2[];
extern  VTBL_ENTRY _ZTV7S6712C2[];
Class_Descriptor cd_S6712C2 = {  "S6712C2", // class name
  0,0,//no base classes
  &(vtc_S6712C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6712C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6712C2),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  S6712C18  {
  ::S499C6_nt s6712c18f0;
  void *s6712c18f1;
  unsigned int s6712c18f2:1;
};
//SIG(-1 S6712C18) C1{ FC2{ m Fi[2]} Fp Fi:1}



static void Test_S6712C18()
{
  {
    init_simple_test("S6712C18");
    static S6712C18 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6712C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6712C18)");
    check_field_offset(lv, s6712c18f0, 0, "S6712C18.s6712c18f0");
    check_field_offset(lv, s6712c18f1, 8, "S6712C18.s6712c18f1");
    set_bf_and_test(lv, s6712c18f2, ABISELECT(16,12), 0, 1, 1, "S6712C18");
  }
}
static Arrange_To_Call_Me vS6712C18(Test_S6712C18, "S6712C18", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S6712C22()
{
  extern Class_Descriptor cd_S6712C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6712C22, buf);
    S6712C22 &lv = *(new (buf) S6712C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6712C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6712C22)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S6712C22");
    test_class_info(&lv, &cd_S6712C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6712C22(Test_S6712C22, "S6712C22", ABISELECT(16,12));

#else // __cplusplus

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



//skip512 S6712C21_nt

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
extern Class_Descriptor cd_S6712C22;
static Base_Class bases_S6712C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S6712C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S6712C1  : S6712C2 {
  ::S499C37_nt s6712c1f0;
  ::S499C37_nt s6712c1f1;
  ::S499C37_nt s6712c1f2;
  ::S499C37_nt s6712c1f3;
  ::S499C37_nt s6712c1f4;
  ::S499C37_nt s6712c1f5;
  ::S499C37_nt s6712c1f6;
  ::S499C37_nt s6712c1f7;
  ::S499C29_nt s6712c1f8;
  void *s6712c1f9;
  ::S499C42 s6712c1f10;
  ::S499C6_nt s6712c1f11;
  ::S499C6_nt s6712c1f12;
  ::S499C38 s6712c1f13;
  void *s6712c1f14[6];
  ::S499C6_nt s6712c1f15;
  ::S499C21_nt s6712c1f16;
  ::S499C21_nt s6712c1f17;
  int s6712c1f18;
  ::S499C17 s6712c1f19;
  ::S499C13 s6712c1f20;
  ::S6712C18 s6712c1f21;
  void *s6712c1f22[2];
  int s6712c1f23;
  ::S499C38 s6712c1f24;
  ::S499C8_nt s6712c1f25;
  void *s6712c1f26;
  ::S499C6_nt s6712c1f27;
  void *s6712c1f28[2];
  ::S6712C21_nt s6712c1f29;
  void *s6712c1f30;
  int s6712c1f31;
  unsigned int s6712c1f32:1;
  virtual  ~S6712C1(); // _ZN7S6712C1D1Ev
  virtual void  v1(); // _ZN7S6712C12v1Ev
  virtual void  v2(); // _ZN7S6712C12v2Ev
  S6712C1(); // tgen
};
//SIG(1 S6712C1) 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 FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC4 FC4 FC4 FC4 FC4 FC4 FC8{ m Fi[3]} Fp FC9{ BC10{ BC7}} FC3 FC3 FC5 Fp[6] FC3 FC11{ m Fi[4]} FC11 Fi FC12{ BC13{ BC7}} FC14{ BC15{ BC7}} FC16{ FC3 Fp Fi:1} Fp[2] Fi FC5 FC17{ BC18{ BC7}} Fp FC3 Fp[2] FC19{ BC20{ BC7}} Fp Fi Fi:1}


 S6712C1 ::~S6712C1(){ note_dtor("S6712C1", this);}
void  S6712C1 ::v1(){vfunc_called(this, "_ZN7S6712C12v1Ev");}
void  S6712C1 ::v2(){vfunc_called(this, "_ZN7S6712C12v2Ev");}
S6712C1 ::S6712C1(){ note_ctor("S6712C1", this);} // tgen

static void Test_S6712C1()
{
  extern Class_Descriptor cd_S6712C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,101)];
    init_test(&cd_S6712C1, buf);
    S6712C1 *dp, &lv = *(dp=new (buf) S6712C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,400), "sizeof(S6712C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6712C1)");
    check_base_class_offset(lv, (S6712C2*), 0, "S6712C1");
    check_field_offset(lv, s6712c1f0, ABISELECT(96,60), "S6712C1.s6712c1f0");
    check_field_offset(lv, s6712c1f1, ABISELECT(112,72), "S6712C1.s6712c1f1");
    check_field_offset(lv, s6712c1f2, ABISELECT(128,84), "S6712C1.s6712c1f2");
    check_field_offset(lv, s6712c1f3, ABISELECT(144,96), "S6712C1.s6712c1f3");
    check_field_offset(lv, s6712c1f4, ABISELECT(160,108), "S6712C1.s6712c1f4");
    check_field_offset(lv, s6712c1f5, ABISELECT(176,120), "S6712C1.s6712c1f5");
    check_field_offset(lv, s6712c1f6, ABISELECT(192,132), "S6712C1.s6712c1f6");
    check_field_offset(lv, s6712c1f7, ABISELECT(208,144), "S6712C1.s6712c1f7");
    check_field_offset(lv, s6712c1f8, ABISELECT(224,156), "S6712C1.s6712c1f8");
    check_field_offset(lv, s6712c1f9, ABISELECT(240,168), "S6712C1.s6712c1f9");
    check_field_offset(lv, s6712c1f10, ABISELECT(248,172), "S6712C1.s6712c1f10");
    check_field_offset(lv, s6712c1f11, ABISELECT(264,184), "S6712C1.s6712c1f11");
    check_field_offset(lv, s6712c1f12, ABISELECT(272,192), "S6712C1.s6712c1f12");
    check_field_offset(lv, s6712c1f13, ABISELECT(280,200), "S6712C1.s6712c1f13");
    check_field_offset(lv, s6712c1f14, ABISELECT(296,212), "S6712C1.s6712c1f14");
    check_field_offset(lv, s6712c1f15, ABISELECT(344,236), "S6712C1.s6712c1f15");
    check_field_offset(lv, s6712c1f16, ABISELECT(352,244), "S6712C1.s6712c1f16");
    check_field_offset(lv, s6712c1f17, ABISELECT(368,260), "S6712C1.s6712c1f17");
    check_field_offset(lv, s6712c1f18, ABISELECT(384,276), "S6712C1.s6712c1f18");
    check_field_offset(lv, s6712c1f19, ABISELECT(392,280), "S6712C1.s6712c1f19");
    check_field_offset(lv, s6712c1f20, ABISELECT(408,292), "S6712C1.s6712c1f20");
    check_field_offset(lv, s6712c1f21, ABISELECT(424,304), "S6712C1.s6712c1f21");
    check_field_offset(lv, s6712c1f22, ABISELECT(448,320), "S6712C1.s6712c1f22");
    check_field_offset(lv, s6712c1f23, ABISELECT(464,328), "S6712C1.s6712c1f23");
    check_field_offset(lv, s6712c1f24, ABISELECT(472,332), "S6712C1.s6712c1f24");
    check_field_offset(lv, s6712c1f25, ABISELECT(488,344), "S6712C1.s6712c1f25");
    check_field_offset(lv, s6712c1f26, ABISELECT(504,356), "S6712C1.s6712c1f26");
    check_field_offset(lv, s6712c1f27, ABISELECT(512,360), "S6712C1.s6712c1f27");
    check_field_offset(lv, s6712c1f28, ABISELECT(520,368), "S6712C1.s6712c1f28");
    check_field_offset(lv, s6712c1f29, ABISELECT(536,376), "S6712C1.s6712c1f29");
    check_field_offset(lv, s6712c1f30, ABISELECT(552,388), "S6712C1.s6712c1f30");
    check_field_offset(lv, s6712c1f31, ABISELECT(560,392), "S6712C1.s6712c1f31");
    set_bf_and_test(lv, s6712c1f32, ABISELECT(564,396), 0, 1, 1, "S6712C1");
    test_class_info(&lv, &cd_S6712C1);
    dp->~S6712C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6712C1(Test_S6712C1, "S6712C1", ABISELECT(568,400));

#else // __cplusplus

extern void _ZN7S6712C1C1Ev();
extern void _ZN7S6712C1D1Ev();
Name_Map name_map_S6712C1[] = {
  NSPAIR(_ZN7S6712C1C1Ev),
  NSPAIR(_ZN7S6712C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6712C2;
extern VTBL_ENTRY _ZTI7S6712C2[];
extern  VTBL_ENTRY _ZTV7S6712C2[];
static Base_Class bases_S6712C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6712C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6712C1[];
extern void _ZN7S6712C1D1Ev();
extern void _ZN7S6712C1D0Ev();
extern void _ZN7S6712C22v3Ev();
extern void _ZN7S6712C22v4Ev();
extern void _ZN7S6712C22v5Ev();
extern void _ZN7S6712C22v6Ev();
extern void _ZN7S6712C22v7Ev();
extern void _ZN7S6712C22v8Ev();
extern void _ZN7S6712C22v9Ev();
extern void _ZN7S6712C23v10Ev();
extern void _ZN7S6712C23v11Ev();
extern void _ZN7S6712C23v12Ev();
extern void _ZN7S6712C23v13Ev();
extern void _ZN7S6712C23v14Ev();
extern void _ZN7S6712C23v15Ev();
extern void _ZN7S6712C23v16Ev();
extern void _ZN7S6712C23v17Ev();
extern void _ZN7S6712C23v18Ev();
extern void _ZN7S6712C23v19Ev();
extern void _ZN7S6712C23v20Ev();
extern void _ZN7S6712C23v21Ev();
extern void _ZN7S6712C23v22Ev();
extern void _ZN7S6712C23v23Ev();
extern void _ZN7S6712C23v24Ev();
extern void _ZN7S6712C23v25Ev();
extern void _ZN7S6712C23v26Ev();
extern void _ZN7S6712C23v27Ev();
extern void _ZN7S6712C23v28Ev();
extern void _ZN7S6712C23v29Ev();
extern void _ZN7S6712C23v30Ev();
extern void _ZN7S6712C23v31Ev();
extern void _ZN7S6712C23v32Ev();
extern void _ZN7S6712C23v33Ev();
extern void _ZN7S6712C23v34Ev();
extern void _ZN7S6712C23v35Ev();
extern void _ZN7S6712C23v36Ev();
extern void _ZN7S6712C23v37Ev();
extern void _ZN7S6712C23v38Ev();
extern void _ZN7S6712C23v39Ev();
extern void _ZN7S6712C23v40Ev();
extern void _ZN7S6712C23v41Ev();
extern void _ZN7S6712C23v42Ev();
extern void _ZN7S6712C23v43Ev();
extern void _ZN7S6712C23v44Ev();
extern void _ZN7S6712C23v45Ev();
extern void _ZN7S6712C23v46Ev();
extern void _ZN7S6712C23v47Ev();
extern void _ZN7S6712C23v48Ev();
extern void _ZN7S6712C23v49Ev();
extern void _ZN7S6712C23v50Ev();
extern void _ZN7S6712C23v51Ev();
extern void _ZN7S6712C23v52Ev();
extern void _ZN7S6712C23v53Ev();
extern void _ZN7S6712C23v54Ev();
extern void _ZN7S6712C23v55Ev();
extern void _ZN7S6712C23v56Ev();
extern void _ZN7S6712C23v57Ev();
extern void _ZN7S6712C23v58Ev();
extern void _ZN7S6712C23v59Ev();
extern void _ZN7S6712C23v60Ev();
extern void _ZN7S6712C23v61Ev();
extern void _ZN7S6712C23v62Ev();
extern void _ZN7S6712C23v63Ev();
extern void _ZN7S6712C23v64Ev();
extern void _ZN7S6712C23v65Ev();
extern void _ZN7S6712C23v66Ev();
extern void _ZN7S6712C12v1Ev();
extern void _ZN7S6712C12v2Ev();
static  VTBL_ENTRY vtc_S6712C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6712C1[0]),
  (VTBL_ENTRY)&_ZN7S6712C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6712C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6712C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6712C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6712C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6712C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6712C1[];
extern  VTBL_ENTRY _ZTV7S6712C1[];
Class_Descriptor cd_S6712C1 = {  "S6712C1", // class name
  bases_S6712C1, 1,
  &(vtc_S6712C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,400), // object size
  NSPAIRA(_ZTI7S6712C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6712C1),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  S1603C4  {
  int s1603c4f0;
  __tsi64 s1603c4f1;
  void *s1603c4f2[4];
  int s1603c4f3[2];
  void *s1603c4f4;
  ::S499C6_nt s1603c4f5;
  void *s1603c4f6[2];
  virtual  ~S1603C4(); // _ZN7S1603C4D1Ev
  virtual void  v9(); // _ZN7S1603C42v9Ev
  virtual void  v10(); // _ZN7S1603C43v10Ev
  virtual void  v11(); // _ZN7S1603C43v11Ev
  virtual void  v12(); // _ZN7S1603C43v12Ev
  virtual void  v13(); // _ZN7S1603C43v13Ev
  virtual void  v14(); // _ZN7S1603C43v14Ev
  virtual void  v15(); // _ZN7S1603C43v15Ev
  virtual void  v16(); // _ZN7S1603C43v16Ev
  virtual void  v17(); // _ZN7S1603C43v17Ev
  virtual void  v18(); // _ZN7S1603C43v18Ev
  virtual void  v19(); // _ZN7S1603C43v19Ev
  virtual void  v20(); // _ZN7S1603C43v20Ev
  virtual void  v21(); // _ZN7S1603C43v21Ev
  virtual void  v22(); // _ZN7S1603C43v22Ev
  virtual void  v23(); // _ZN7S1603C43v23Ev
  virtual void  v24(); // _ZN7S1603C43v24Ev
  virtual void  v25(); // _ZN7S1603C43v25Ev
  virtual void  v26(); // _ZN7S1603C43v26Ev
  virtual void  v27(); // _ZN7S1603C43v27Ev
  virtual void  v28(); // _ZN7S1603C43v28Ev
  virtual void  v29(); // _ZN7S1603C43v29Ev
  virtual void  v30(); // _ZN7S1603C43v30Ev
  virtual void  v31(); // _ZN7S1603C43v31Ev
  virtual void  v32(); // _ZN7S1603C43v32Ev
  virtual void  v33(); // _ZN7S1603C43v33Ev
  virtual void  v34(); // _ZN7S1603C43v34Ev
  virtual void  v35(); // _ZN7S1603C43v35Ev
  virtual void  v36(); // _ZN7S1603C43v36Ev
  virtual void  v37(); // _ZN7S1603C43v37Ev
  virtual void  v38(); // _ZN7S1603C43v38Ev
  virtual void  v39(); // _ZN7S1603C43v39Ev
  virtual void  v40(); // _ZN7S1603C43v40Ev
  virtual void  v41(); // _ZN7S1603C43v41Ev
  virtual void  v42(); // _ZN7S1603C43v42Ev
  virtual void  v43(); // _ZN7S1603C43v43Ev
  virtual void  v44(); // _ZN7S1603C43v44Ev
  virtual void  v45(); // _ZN7S1603C43v45Ev
  virtual void  v46(); // _ZN7S1603C43v46Ev
  virtual void  v47(); // _ZN7S1603C43v47Ev
  virtual void  v48(); // _ZN7S1603C43v48Ev
  virtual void  v49(); // _ZN7S1603C43v49Ev
  virtual void  v50(); // _ZN7S1603C43v50Ev
  virtual void  v51(); // _ZN7S1603C43v51Ev
  virtual void  v52(); // _ZN7S1603C43v52Ev
  virtual void  v53(); // _ZN7S1603C43v53Ev
  virtual void  v54(); // _ZN7S1603C43v54Ev
  virtual void  v55(); // _ZN7S1603C43v55Ev
  virtual void  v56(); // _ZN7S1603C43v56Ev
  virtual void  v57(); // _ZN7S1603C43v57Ev
  virtual void  v58(); // _ZN7S1603C43v58Ev
  virtual void  v59(); // _ZN7S1603C43v59Ev
  virtual void  v60(); // _ZN7S1603C43v60Ev
  virtual void  v61(); // _ZN7S1603C43v61Ev
  virtual void  v62(); // _ZN7S1603C43v62Ev
  virtual void  v63(); // _ZN7S1603C43v63Ev
  virtual void  v64(); // _ZN7S1603C43v64Ev
  virtual void  v65(); // _ZN7S1603C43v65Ev
  virtual void  v66(); // _ZN7S1603C43v66Ev
  virtual void  v67(); // _ZN7S1603C43v67Ev
  virtual void  v68(); // _ZN7S1603C43v68Ev
  virtual void  v69(); // _ZN7S1603C43v69Ev
  virtual void  v70(); // _ZN7S1603C43v70Ev
  virtual void  v71(); // _ZN7S1603C43v71Ev
  virtual void  v72(); // _ZN7S1603C43v72Ev
  S1603C4(); // tgen
};
//SIG(-1 S1603C4) 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]}


 S1603C4 ::~S1603C4(){ note_dtor("S1603C4", this);}
void  S1603C4 ::v9(){vfunc_called(this, "_ZN7S1603C42v9Ev");}
void  S1603C4 ::v10(){vfunc_called(this, "_ZN7S1603C43v10Ev");}
void  S1603C4 ::v11(){vfunc_called(this, "_ZN7S1603C43v11Ev");}
void  S1603C4 ::v12(){vfunc_called(this, "_ZN7S1603C43v12Ev");}
void  S1603C4 ::v13(){vfunc_called(this, "_ZN7S1603C43v13Ev");}
void  S1603C4 ::v14(){vfunc_called(this, "_ZN7S1603C43v14Ev");}
void  S1603C4 ::v15(){vfunc_called(this, "_ZN7S1603C43v15Ev");}
void  S1603C4 ::v16(){vfunc_called(this, "_ZN7S1603C43v16Ev");}
void  S1603C4 ::v17(){vfunc_called(this, "_ZN7S1603C43v17Ev");}
void  S1603C4 ::v18(){vfunc_called(this, "_ZN7S1603C43v18Ev");}
void  S1603C4 ::v19(){vfunc_called(this, "_ZN7S1603C43v19Ev");}
void  S1603C4 ::v20(){vfunc_called(this, "_ZN7S1603C43v20Ev");}
void  S1603C4 ::v21(){vfunc_called(this, "_ZN7S1603C43v21Ev");}
void  S1603C4 ::v22(){vfunc_called(this, "_ZN7S1603C43v22Ev");}
void  S1603C4 ::v23(){vfunc_called(this, "_ZN7S1603C43v23Ev");}
void  S1603C4 ::v24(){vfunc_called(this, "_ZN7S1603C43v24Ev");}
void  S1603C4 ::v25(){vfunc_called(this, "_ZN7S1603C43v25Ev");}
void  S1603C4 ::v26(){vfunc_called(this, "_ZN7S1603C43v26Ev");}
void  S1603C4 ::v27(){vfunc_called(this, "_ZN7S1603C43v27Ev");}
void  S1603C4 ::v28(){vfunc_called(this, "_ZN7S1603C43v28Ev");}
void  S1603C4 ::v29(){vfunc_called(this, "_ZN7S1603C43v29Ev");}
void  S1603C4 ::v30(){vfunc_called(this, "_ZN7S1603C43v30Ev");}
void  S1603C4 ::v31(){vfunc_called(this, "_ZN7S1603C43v31Ev");}
void  S1603C4 ::v32(){vfunc_called(this, "_ZN7S1603C43v32Ev");}
void  S1603C4 ::v33(){vfunc_called(this, "_ZN7S1603C43v33Ev");}
void  S1603C4 ::v34(){vfunc_called(this, "_ZN7S1603C43v34Ev");}
void  S1603C4 ::v35(){vfunc_called(this, "_ZN7S1603C43v35Ev");}
void  S1603C4 ::v36(){vfunc_called(this, "_ZN7S1603C43v36Ev");}
void  S1603C4 ::v37(){vfunc_called(this, "_ZN7S1603C43v37Ev");}
void  S1603C4 ::v38(){vfunc_called(this, "_ZN7S1603C43v38Ev");}
void  S1603C4 ::v39(){vfunc_called(this, "_ZN7S1603C43v39Ev");}
void  S1603C4 ::v40(){vfunc_called(this, "_ZN7S1603C43v40Ev");}
void  S1603C4 ::v41(){vfunc_called(this, "_ZN7S1603C43v41Ev");}
void  S1603C4 ::v42(){vfunc_called(this, "_ZN7S1603C43v42Ev");}
void  S1603C4 ::v43(){vfunc_called(this, "_ZN7S1603C43v43Ev");}
void  S1603C4 ::v44(){vfunc_called(this, "_ZN7S1603C43v44Ev");}
void  S1603C4 ::v45(){vfunc_called(this, "_ZN7S1603C43v45Ev");}
void  S1603C4 ::v46(){vfunc_called(this, "_ZN7S1603C43v46Ev");}
void  S1603C4 ::v47(){vfunc_called(this, "_ZN7S1603C43v47Ev");}
void  S1603C4 ::v48(){vfunc_called(this, "_ZN7S1603C43v48Ev");}
void  S1603C4 ::v49(){vfunc_called(this, "_ZN7S1603C43v49Ev");}
void  S1603C4 ::v50(){vfunc_called(this, "_ZN7S1603C43v50Ev");}
void  S1603C4 ::v51(){vfunc_called(this, "_ZN7S1603C43v51Ev");}
void  S1603C4 ::v52(){vfunc_called(this, "_ZN7S1603C43v52Ev");}
void  S1603C4 ::v53(){vfunc_called(this, "_ZN7S1603C43v53Ev");}
void  S1603C4 ::v54(){vfunc_called(this, "_ZN7S1603C43v54Ev");}
void  S1603C4 ::v55(){vfunc_called(this, "_ZN7S1603C43v55Ev");}
void  S1603C4 ::v56(){vfunc_called(this, "_ZN7S1603C43v56Ev");}
void  S1603C4 ::v57(){vfunc_called(this, "_ZN7S1603C43v57Ev");}
void  S1603C4 ::v58(){vfunc_called(this, "_ZN7S1603C43v58Ev");}
void  S1603C4 ::v59(){vfunc_called(this, "_ZN7S1603C43v59Ev");}
void  S1603C4 ::v60(){vfunc_called(this, "_ZN7S1603C43v60Ev");}
void  S1603C4 ::v61(){vfunc_called(this, "_ZN7S1603C43v61Ev");}
void  S1603C4 ::v62(){vfunc_called(this, "_ZN7S1603C43v62Ev");}
void  S1603C4 ::v63(){vfunc_called(this, "_ZN7S1603C43v63Ev");}
void  S1603C4 ::v64(){vfunc_called(this, "_ZN7S1603C43v64Ev");}
void  S1603C4 ::v65(){vfunc_called(this, "_ZN7S1603C43v65Ev");}
void  S1603C4 ::v66(){vfunc_called(this, "_ZN7S1603C43v66Ev");}
void  S1603C4 ::v67(){vfunc_called(this, "_ZN7S1603C43v67Ev");}
void  S1603C4 ::v68(){vfunc_called(this, "_ZN7S1603C43v68Ev");}
void  S1603C4 ::v69(){vfunc_called(this, "_ZN7S1603C43v69Ev");}
void  S1603C4 ::v70(){vfunc_called(this, "_ZN7S1603C43v70Ev");}
void  S1603C4 ::v71(){vfunc_called(this, "_ZN7S1603C43v71Ev");}
void  S1603C4 ::v72(){vfunc_called(this, "_ZN7S1603C43v72Ev");}
S1603C4 ::S1603C4(){ note_ctor("S1603C4", this);} // tgen

static void Test_S1603C4()
{
  extern Class_Descriptor cd_S1603C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1603C4, buf);
    S1603C4 *dp, &lv = *(dp=new (buf) S1603C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1603C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1603C4)");
    check_field_offset(lv, s1603c4f0, ABISELECT(8,4), "S1603C4.s1603c4f0");
    check_field_offset(lv, s1603c4f1, ABISELECT(16,8), "S1603C4.s1603c4f1");
    check_field_offset(lv, s1603c4f2, ABISELECT(24,16), "S1603C4.s1603c4f2");
    check_field_offset(lv, s1603c4f3, ABISELECT(56,32), "S1603C4.s1603c4f3");
    check_field_offset(lv, s1603c4f4, ABISELECT(64,40), "S1603C4.s1603c4f4");
    check_field_offset(lv, s1603c4f5, ABISELECT(72,44), "S1603C4.s1603c4f5");
    check_field_offset(lv, s1603c4f6, ABISELECT(80,52), "S1603C4.s1603c4f6");
    test_class_info(&lv, &cd_S1603C4);
    dp->~S1603C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1603C4(Test_S1603C4, "S1603C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1603C4C1Ev();
extern void _ZN7S1603C4D1Ev();
Name_Map name_map_S1603C4[] = {
  NSPAIR(_ZN7S1603C4C1Ev),
  NSPAIR(_ZN7S1603C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1603C4[];
extern void _ZN7S1603C4D1Ev();
extern void _ZN7S1603C4D0Ev();
extern void _ZN7S1603C42v9Ev();
extern void _ZN7S1603C43v10Ev();
extern void _ZN7S1603C43v11Ev();
extern void _ZN7S1603C43v12Ev();
extern void _ZN7S1603C43v13Ev();
extern void _ZN7S1603C43v14Ev();
extern void _ZN7S1603C43v15Ev();
extern void _ZN7S1603C43v16Ev();
extern void _ZN7S1603C43v17Ev();
extern void _ZN7S1603C43v18Ev();
extern void _ZN7S1603C43v19Ev();
extern void _ZN7S1603C43v20Ev();
extern void _ZN7S1603C43v21Ev();
extern void _ZN7S1603C43v22Ev();
extern void _ZN7S1603C43v23Ev();
extern void _ZN7S1603C43v24Ev();
extern void _ZN7S1603C43v25Ev();
extern void _ZN7S1603C43v26Ev();
extern void _ZN7S1603C43v27Ev();
extern void _ZN7S1603C43v28Ev();
extern void _ZN7S1603C43v29Ev();
extern void _ZN7S1603C43v30Ev();
extern void _ZN7S1603C43v31Ev();
extern void _ZN7S1603C43v32Ev();
extern void _ZN7S1603C43v33Ev();
extern void _ZN7S1603C43v34Ev();
extern void _ZN7S1603C43v35Ev();
extern void _ZN7S1603C43v36Ev();
extern void _ZN7S1603C43v37Ev();
extern void _ZN7S1603C43v38Ev();
extern void _ZN7S1603C43v39Ev();
extern void _ZN7S1603C43v40Ev();
extern void _ZN7S1603C43v41Ev();
extern void _ZN7S1603C43v42Ev();
extern void _ZN7S1603C43v43Ev();
extern void _ZN7S1603C43v44Ev();
extern void _ZN7S1603C43v45Ev();
extern void _ZN7S1603C43v46Ev();
extern void _ZN7S1603C43v47Ev();
extern void _ZN7S1603C43v48Ev();
extern void _ZN7S1603C43v49Ev();
extern void _ZN7S1603C43v50Ev();
extern void _ZN7S1603C43v51Ev();
extern void _ZN7S1603C43v52Ev();
extern void _ZN7S1603C43v53Ev();
extern void _ZN7S1603C43v54Ev();
extern void _ZN7S1603C43v55Ev();
extern void _ZN7S1603C43v56Ev();
extern void _ZN7S1603C43v57Ev();
extern void _ZN7S1603C43v58Ev();
extern void _ZN7S1603C43v59Ev();
extern void _ZN7S1603C43v60Ev();
extern void _ZN7S1603C43v61Ev();
extern void _ZN7S1603C43v62Ev();
extern void _ZN7S1603C43v63Ev();
extern void _ZN7S1603C43v64Ev();
extern void _ZN7S1603C43v65Ev();
extern void _ZN7S1603C43v66Ev();
extern void _ZN7S1603C43v67Ev();
extern void _ZN7S1603C43v68Ev();
extern void _ZN7S1603C43v69Ev();
extern void _ZN7S1603C43v70Ev();
extern void _ZN7S1603C43v71Ev();
extern void _ZN7S1603C43v72Ev();
static  VTBL_ENTRY vtc_S1603C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1603C4[0]),
  (VTBL_ENTRY)&_ZN7S1603C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1603C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v72Ev,
};
extern VTBL_ENTRY _ZTI7S1603C4[];
extern  VTBL_ENTRY _ZTV7S1603C4[];
Class_Descriptor cd_S1603C4 = {  "S1603C4", // class name
  0,0,//no base classes
  &(vtc_S1603C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1603C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1603C4),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  S1603C3_nt  : S1603C4 {
  unsigned int s1603c3f0:1;
  unsigned int s1603c3f1:1;
  unsigned int s1603c3f2:1;
  unsigned int s1603c3f3:1;
  unsigned int s1603c3f4:1;
  unsigned int s1603c3f5:1;
  unsigned int s1603c3f6:1;
  ::S7368C78 s1603c3f7;
  virtual  ~S1603C3_nt(); // _ZN10S1603C3_ntD1Ev
  virtual void  v73(); // _ZN10S1603C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1603C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1603C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1603C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1603C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1603C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1603C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1603C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1603C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1603C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1603C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1603C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1603C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1603C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1603C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1603C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1603C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1603C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1603C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1603C3_nt3v92Ev
  S1603C3_nt(); // tgen
};
//SIG(-1 S1603C3_nt) C1{ BC2{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1603C3_nt ::~S1603C3_nt(){ note_dtor("S1603C3_nt", this);}
void  S1603C3_nt ::v73(){vfunc_called(this, "_ZN10S1603C3_nt3v73Ev");}
void  S1603C3_nt ::v74(){vfunc_called(this, "_ZN10S1603C3_nt3v74Ev");}
void  S1603C3_nt ::v75(){vfunc_called(this, "_ZN10S1603C3_nt3v75Ev");}
void  S1603C3_nt ::v76(){vfunc_called(this, "_ZN10S1603C3_nt3v76Ev");}
void  S1603C3_nt ::v77(){vfunc_called(this, "_ZN10S1603C3_nt3v77Ev");}
void  S1603C3_nt ::v78(){vfunc_called(this, "_ZN10S1603C3_nt3v78Ev");}
void  S1603C3_nt ::v79(){vfunc_called(this, "_ZN10S1603C3_nt3v79Ev");}
void  S1603C3_nt ::v80(){vfunc_called(this, "_ZN10S1603C3_nt3v80Ev");}
void  S1603C3_nt ::v81(){vfunc_called(this, "_ZN10S1603C3_nt3v81Ev");}
void  S1603C3_nt ::v82(){vfunc_called(this, "_ZN10S1603C3_nt3v82Ev");}
void  S1603C3_nt ::v83(){vfunc_called(this, "_ZN10S1603C3_nt3v83Ev");}
void  S1603C3_nt ::v84(){vfunc_called(this, "_ZN10S1603C3_nt3v84Ev");}
void  S1603C3_nt ::v85(){vfunc_called(this, "_ZN10S1603C3_nt3v85Ev");}
void  S1603C3_nt ::v86(){vfunc_called(this, "_ZN10S1603C3_nt3v86Ev");}
void  S1603C3_nt ::v87(){vfunc_called(this, "_ZN10S1603C3_nt3v87Ev");}
void  S1603C3_nt ::v88(){vfunc_called(this, "_ZN10S1603C3_nt3v88Ev");}
void  S1603C3_nt ::v89(){vfunc_called(this, "_ZN10S1603C3_nt3v89Ev");}
void  S1603C3_nt ::v90(){vfunc_called(this, "_ZN10S1603C3_nt3v90Ev");}
void  S1603C3_nt ::v91(){vfunc_called(this, "_ZN10S1603C3_nt3v91Ev");}
void  S1603C3_nt ::v92(){vfunc_called(this, "_ZN10S1603C3_nt3v92Ev");}
S1603C3_nt ::S1603C3_nt(){ note_ctor("S1603C3_nt", this);} // tgen

//skip512 S1603C3_nt

#else // __cplusplus

extern void _ZN10S1603C3_ntC1Ev();
extern void _ZN10S1603C3_ntD1Ev();
Name_Map name_map_S1603C3_nt[] = {
  NSPAIR(_ZN10S1603C3_ntC1Ev),
  NSPAIR(_ZN10S1603C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1603C4;
extern VTBL_ENTRY _ZTI7S1603C4[];
extern  VTBL_ENTRY _ZTV7S1603C4[];
static Base_Class bases_S1603C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1603C3_nt[];
extern void _ZN10S1603C3_ntD1Ev();
extern void _ZN10S1603C3_ntD0Ev();
extern void _ZN7S1603C42v9Ev();
extern void _ZN7S1603C43v10Ev();
extern void _ZN7S1603C43v11Ev();
extern void _ZN7S1603C43v12Ev();
extern void _ZN7S1603C43v13Ev();
extern void _ZN7S1603C43v14Ev();
extern void _ZN7S1603C43v15Ev();
extern void _ZN7S1603C43v16Ev();
extern void _ZN7S1603C43v17Ev();
extern void _ZN7S1603C43v18Ev();
extern void _ZN7S1603C43v19Ev();
extern void _ZN7S1603C43v20Ev();
extern void _ZN7S1603C43v21Ev();
extern void _ZN7S1603C43v22Ev();
extern void _ZN7S1603C43v23Ev();
extern void _ZN7S1603C43v24Ev();
extern void _ZN7S1603C43v25Ev();
extern void _ZN7S1603C43v26Ev();
extern void _ZN7S1603C43v27Ev();
extern void _ZN7S1603C43v28Ev();
extern void _ZN7S1603C43v29Ev();
extern void _ZN7S1603C43v30Ev();
extern void _ZN7S1603C43v31Ev();
extern void _ZN7S1603C43v32Ev();
extern void _ZN7S1603C43v33Ev();
extern void _ZN7S1603C43v34Ev();
extern void _ZN7S1603C43v35Ev();
extern void _ZN7S1603C43v36Ev();
extern void _ZN7S1603C43v37Ev();
extern void _ZN7S1603C43v38Ev();
extern void _ZN7S1603C43v39Ev();
extern void _ZN7S1603C43v40Ev();
extern void _ZN7S1603C43v41Ev();
extern void _ZN7S1603C43v42Ev();
extern void _ZN7S1603C43v43Ev();
extern void _ZN7S1603C43v44Ev();
extern void _ZN7S1603C43v45Ev();
extern void _ZN7S1603C43v46Ev();
extern void _ZN7S1603C43v47Ev();
extern void _ZN7S1603C43v48Ev();
extern void _ZN7S1603C43v49Ev();
extern void _ZN7S1603C43v50Ev();
extern void _ZN7S1603C43v51Ev();
extern void _ZN7S1603C43v52Ev();
extern void _ZN7S1603C43v53Ev();
extern void _ZN7S1603C43v54Ev();
extern void _ZN7S1603C43v55Ev();
extern void _ZN7S1603C43v56Ev();
extern void _ZN7S1603C43v57Ev();
extern void _ZN7S1603C43v58Ev();
extern void _ZN7S1603C43v59Ev();
extern void _ZN7S1603C43v60Ev();
extern void _ZN7S1603C43v61Ev();
extern void _ZN7S1603C43v62Ev();
extern void _ZN7S1603C43v63Ev();
extern void _ZN7S1603C43v64Ev();
extern void _ZN7S1603C43v65Ev();
extern void _ZN7S1603C43v66Ev();
extern void _ZN7S1603C43v67Ev();
extern void _ZN7S1603C43v68Ev();
extern void _ZN7S1603C43v69Ev();
extern void _ZN7S1603C43v70Ev();
extern void _ZN7S1603C43v71Ev();
extern void _ZN7S1603C43v72Ev();
extern void _ZN10S1603C3_nt3v73Ev();
extern void _ZN10S1603C3_nt3v74Ev();
extern void _ZN10S1603C3_nt3v75Ev();
extern void _ZN10S1603C3_nt3v76Ev();
extern void _ZN10S1603C3_nt3v77Ev();
extern void _ZN10S1603C3_nt3v78Ev();
extern void _ZN10S1603C3_nt3v79Ev();
extern void _ZN10S1603C3_nt3v80Ev();
extern void _ZN10S1603C3_nt3v81Ev();
extern void _ZN10S1603C3_nt3v82Ev();
extern void _ZN10S1603C3_nt3v83Ev();
extern void _ZN10S1603C3_nt3v84Ev();
extern void _ZN10S1603C3_nt3v85Ev();
extern void _ZN10S1603C3_nt3v86Ev();
extern void _ZN10S1603C3_nt3v87Ev();
extern void _ZN10S1603C3_nt3v88Ev();
extern void _ZN10S1603C3_nt3v89Ev();
extern void _ZN10S1603C3_nt3v90Ev();
extern void _ZN10S1603C3_nt3v91Ev();
extern void _ZN10S1603C3_nt3v92Ev();
static  VTBL_ENTRY vtc_S1603C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1603C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1603C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v72Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v92Ev,
};
extern VTBL_ENTRY _ZTI10S1603C3_nt[];
VTBL_ENTRY *P__ZTI10S1603C3_nt = _ZTI10S1603C3_nt; 
extern  VTBL_ENTRY _ZTV10S1603C3_nt[];
Class_Descriptor cd_S1603C3_nt = {  "S1603C3_nt", // class name
  bases_S1603C3_nt, 1,
  &(vtc_S1603C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1603C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1603C3_nt),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1603C2_nt  : S1603C3_nt {
  virtual  ~S1603C2_nt(); // _ZN10S1603C2_ntD1Ev
  virtual void  v93(); // _ZN10S1603C2_nt3v93Ev
  virtual void  v94(); // _ZN10S1603C2_nt3v94Ev
  S1603C2_nt(); // tgen
};
//SIG(-1 S1603C2_nt) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1603C2_nt ::~S1603C2_nt(){ note_dtor("S1603C2_nt", this);}
void  S1603C2_nt ::v93(){vfunc_called(this, "_ZN10S1603C2_nt3v93Ev");}
void  S1603C2_nt ::v94(){vfunc_called(this, "_ZN10S1603C2_nt3v94Ev");}
S1603C2_nt ::S1603C2_nt(){ note_ctor("S1603C2_nt", this);} // tgen

//skip512 S1603C2_nt

#else // __cplusplus

extern void _ZN10S1603C2_ntC1Ev();
extern void _ZN10S1603C2_ntD1Ev();
Name_Map name_map_S1603C2_nt[] = {
  NSPAIR(_ZN10S1603C2_ntC1Ev),
  NSPAIR(_ZN10S1603C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1603C4;
extern VTBL_ENTRY _ZTI7S1603C4[];
extern  VTBL_ENTRY _ZTV7S1603C4[];
extern Class_Descriptor cd_S1603C3_nt;
extern VTBL_ENTRY _ZTI10S1603C3_nt[];
extern  VTBL_ENTRY _ZTV10S1603C3_nt[];
static Base_Class bases_S1603C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1603C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1603C2_nt[];
extern void _ZN10S1603C2_ntD1Ev();
extern void _ZN10S1603C2_ntD0Ev();
extern void _ZN7S1603C42v9Ev();
extern void _ZN7S1603C43v10Ev();
extern void _ZN7S1603C43v11Ev();
extern void _ZN7S1603C43v12Ev();
extern void _ZN7S1603C43v13Ev();
extern void _ZN7S1603C43v14Ev();
extern void _ZN7S1603C43v15Ev();
extern void _ZN7S1603C43v16Ev();
extern void _ZN7S1603C43v17Ev();
extern void _ZN7S1603C43v18Ev();
extern void _ZN7S1603C43v19Ev();
extern void _ZN7S1603C43v20Ev();
extern void _ZN7S1603C43v21Ev();
extern void _ZN7S1603C43v22Ev();
extern void _ZN7S1603C43v23Ev();
extern void _ZN7S1603C43v24Ev();
extern void _ZN7S1603C43v25Ev();
extern void _ZN7S1603C43v26Ev();
extern void _ZN7S1603C43v27Ev();
extern void _ZN7S1603C43v28Ev();
extern void _ZN7S1603C43v29Ev();
extern void _ZN7S1603C43v30Ev();
extern void _ZN7S1603C43v31Ev();
extern void _ZN7S1603C43v32Ev();
extern void _ZN7S1603C43v33Ev();
extern void _ZN7S1603C43v34Ev();
extern void _ZN7S1603C43v35Ev();
extern void _ZN7S1603C43v36Ev();
extern void _ZN7S1603C43v37Ev();
extern void _ZN7S1603C43v38Ev();
extern void _ZN7S1603C43v39Ev();
extern void _ZN7S1603C43v40Ev();
extern void _ZN7S1603C43v41Ev();
extern void _ZN7S1603C43v42Ev();
extern void _ZN7S1603C43v43Ev();
extern void _ZN7S1603C43v44Ev();
extern void _ZN7S1603C43v45Ev();
extern void _ZN7S1603C43v46Ev();
extern void _ZN7S1603C43v47Ev();
extern void _ZN7S1603C43v48Ev();
extern void _ZN7S1603C43v49Ev();
extern void _ZN7S1603C43v50Ev();
extern void _ZN7S1603C43v51Ev();
extern void _ZN7S1603C43v52Ev();
extern void _ZN7S1603C43v53Ev();
extern void _ZN7S1603C43v54Ev();
extern void _ZN7S1603C43v55Ev();
extern void _ZN7S1603C43v56Ev();
extern void _ZN7S1603C43v57Ev();
extern void _ZN7S1603C43v58Ev();
extern void _ZN7S1603C43v59Ev();
extern void _ZN7S1603C43v60Ev();
extern void _ZN7S1603C43v61Ev();
extern void _ZN7S1603C43v62Ev();
extern void _ZN7S1603C43v63Ev();
extern void _ZN7S1603C43v64Ev();
extern void _ZN7S1603C43v65Ev();
extern void _ZN7S1603C43v66Ev();
extern void _ZN7S1603C43v67Ev();
extern void _ZN7S1603C43v68Ev();
extern void _ZN7S1603C43v69Ev();
extern void _ZN7S1603C43v70Ev();
extern void _ZN7S1603C43v71Ev();
extern void _ZN7S1603C43v72Ev();
extern void _ZN10S1603C3_nt3v73Ev();
extern void _ZN10S1603C3_nt3v74Ev();
extern void _ZN10S1603C3_nt3v75Ev();
extern void _ZN10S1603C3_nt3v76Ev();
extern void _ZN10S1603C3_nt3v77Ev();
extern void _ZN10S1603C3_nt3v78Ev();
extern void _ZN10S1603C3_nt3v79Ev();
extern void _ZN10S1603C3_nt3v80Ev();
extern void _ZN10S1603C3_nt3v81Ev();
extern void _ZN10S1603C3_nt3v82Ev();
extern void _ZN10S1603C3_nt3v83Ev();
extern void _ZN10S1603C3_nt3v84Ev();
extern void _ZN10S1603C3_nt3v85Ev();
extern void _ZN10S1603C3_nt3v86Ev();
extern void _ZN10S1603C3_nt3v87Ev();
extern void _ZN10S1603C3_nt3v88Ev();
extern void _ZN10S1603C3_nt3v89Ev();
extern void _ZN10S1603C3_nt3v90Ev();
extern void _ZN10S1603C3_nt3v91Ev();
extern void _ZN10S1603C3_nt3v92Ev();
extern void _ZN10S1603C2_nt3v93Ev();
extern void _ZN10S1603C2_nt3v94Ev();
static  VTBL_ENTRY vtc_S1603C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1603C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1603C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1603C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v72Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1603C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1603C2_nt3v94Ev,
};
extern VTBL_ENTRY _ZTI10S1603C2_nt[];
VTBL_ENTRY *P__ZTI10S1603C2_nt = _ZTI10S1603C2_nt; 
extern  VTBL_ENTRY _ZTV10S1603C2_nt[];
Class_Descriptor cd_S1603C2_nt = {  "S1603C2_nt", // class name
  bases_S1603C2_nt, 2,
  &(vtc_S1603C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1603C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1603C2_nt),90, //virtual function table var
  2, // 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  S1603C8_nt  {
  char s1603c8f0[4];
  ::S6712C21_nt s1603c8f1;
  int s1603c8f2[2];
  void  mf1603c8(); // _ZN10S1603C8_nt8mf1603c8Ev
};
//SIG(-1 S1603C8_nt) C1{ m Fc[4] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[2]}


void  S1603C8_nt ::mf1603c8(){}

//skip512 S1603C8_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1603C7_nt  : S1603C8_nt {
  void *s1603c7f0;
};
//SIG(-1 S1603C7_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1603C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1603C8_nt;
static Base_Class bases_S1603C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1603C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1603C1  : S1603C2_nt {
  ::S1603C7_nt s1603c1f0;
  unsigned int s1603c1f1:1;
  unsigned int s1603c1f2:1;
  unsigned int s1603c1f3:1;
  virtual  ~S1603C1(); // _ZN7S1603C1D1Ev
  virtual void  v1(); // _ZN7S1603C12v1Ev
  virtual void  v2(); // _ZN7S1603C12v2Ev
  virtual void  v3(); // _ZN7S1603C12v3Ev
  virtual void  v4(); // _ZN7S1603C12v4Ev
  virtual void  v5(); // _ZN7S1603C12v5Ev
  virtual void  v6(); // _ZN7S1603C12v6Ev
  virtual void  v7(); // _ZN7S1603C12v7Ev
  virtual void  v8(); // _ZN7S1603C12v8Ev
  S1603C1(); // tgen
};
//SIG(1 S1603C1) C1{ BC2{ BC3{ BC4{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v93 v94} vd v1 v2 v3 v4 v5 v6 v7 v8 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} Fi:1 Fi:1 Fi:1}


 S1603C1 ::~S1603C1(){ note_dtor("S1603C1", this);}
void  S1603C1 ::v1(){vfunc_called(this, "_ZN7S1603C12v1Ev");}
void  S1603C1 ::v2(){vfunc_called(this, "_ZN7S1603C12v2Ev");}
void  S1603C1 ::v3(){vfunc_called(this, "_ZN7S1603C12v3Ev");}
void  S1603C1 ::v4(){vfunc_called(this, "_ZN7S1603C12v4Ev");}
void  S1603C1 ::v5(){vfunc_called(this, "_ZN7S1603C12v5Ev");}
void  S1603C1 ::v6(){vfunc_called(this, "_ZN7S1603C12v6Ev");}
void  S1603C1 ::v7(){vfunc_called(this, "_ZN7S1603C12v7Ev");}
void  S1603C1 ::v8(){vfunc_called(this, "_ZN7S1603C12v8Ev");}
S1603C1 ::S1603C1(){ note_ctor("S1603C1", this);} // tgen

static void Test_S1603C1()
{
  extern Class_Descriptor cd_S1603C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S1603C1, buf);
    S1603C1 *dp, &lv = *(dp=new (buf) S1603C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S1603C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1603C1)");
    check_base_class_offset(lv, (S1603C4*)(S1603C3_nt*)(S1603C2_nt*), 0, "S1603C1");
    check_base_class_offset(lv, (S1603C3_nt*)(S1603C2_nt*), 0, "S1603C1");
    check_base_class_offset(lv, (S1603C2_nt*), 0, "S1603C1");
    check_field_offset(lv, s1603c1f0, ABISELECT(104,64), "S1603C1.s1603c1f0");
    set_bf_and_test(lv, s1603c1f1, ABISELECT(144,92), 0, 1, 1, "S1603C1");
    set_bf_and_test(lv, s1603c1f2, ABISELECT(144,92), 1, 1, 1, "S1603C1");
    set_bf_and_test(lv, s1603c1f3, ABISELECT(144,92), 2, 1, 1, "S1603C1");
    test_class_info(&lv, &cd_S1603C1);
    dp->~S1603C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1603C1(Test_S1603C1, "S1603C1", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN7S1603C1C1Ev();
extern void _ZN7S1603C1D1Ev();
Name_Map name_map_S1603C1[] = {
  NSPAIR(_ZN7S1603C1C1Ev),
  NSPAIR(_ZN7S1603C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1603C4;
extern VTBL_ENTRY _ZTI7S1603C4[];
extern  VTBL_ENTRY _ZTV7S1603C4[];
extern Class_Descriptor cd_S1603C3_nt;
extern VTBL_ENTRY _ZTI10S1603C3_nt[];
extern  VTBL_ENTRY _ZTV10S1603C3_nt[];
extern Class_Descriptor cd_S1603C2_nt;
extern VTBL_ENTRY _ZTI10S1603C2_nt[];
extern  VTBL_ENTRY _ZTV10S1603C2_nt[];
static Base_Class bases_S1603C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1603C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1603C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1603C1[];
extern void _ZN7S1603C1D1Ev();
extern void _ZN7S1603C1D0Ev();
extern void _ZN7S1603C42v9Ev();
extern void _ZN7S1603C43v10Ev();
extern void _ZN7S1603C43v11Ev();
extern void _ZN7S1603C43v12Ev();
extern void _ZN7S1603C43v13Ev();
extern void _ZN7S1603C43v14Ev();
extern void _ZN7S1603C43v15Ev();
extern void _ZN7S1603C43v16Ev();
extern void _ZN7S1603C43v17Ev();
extern void _ZN7S1603C43v18Ev();
extern void _ZN7S1603C43v19Ev();
extern void _ZN7S1603C43v20Ev();
extern void _ZN7S1603C43v21Ev();
extern void _ZN7S1603C43v22Ev();
extern void _ZN7S1603C43v23Ev();
extern void _ZN7S1603C43v24Ev();
extern void _ZN7S1603C43v25Ev();
extern void _ZN7S1603C43v26Ev();
extern void _ZN7S1603C43v27Ev();
extern void _ZN7S1603C43v28Ev();
extern void _ZN7S1603C43v29Ev();
extern void _ZN7S1603C43v30Ev();
extern void _ZN7S1603C43v31Ev();
extern void _ZN7S1603C43v32Ev();
extern void _ZN7S1603C43v33Ev();
extern void _ZN7S1603C43v34Ev();
extern void _ZN7S1603C43v35Ev();
extern void _ZN7S1603C43v36Ev();
extern void _ZN7S1603C43v37Ev();
extern void _ZN7S1603C43v38Ev();
extern void _ZN7S1603C43v39Ev();
extern void _ZN7S1603C43v40Ev();
extern void _ZN7S1603C43v41Ev();
extern void _ZN7S1603C43v42Ev();
extern void _ZN7S1603C43v43Ev();
extern void _ZN7S1603C43v44Ev();
extern void _ZN7S1603C43v45Ev();
extern void _ZN7S1603C43v46Ev();
extern void _ZN7S1603C43v47Ev();
extern void _ZN7S1603C43v48Ev();
extern void _ZN7S1603C43v49Ev();
extern void _ZN7S1603C43v50Ev();
extern void _ZN7S1603C43v51Ev();
extern void _ZN7S1603C43v52Ev();
extern void _ZN7S1603C43v53Ev();
extern void _ZN7S1603C43v54Ev();
extern void _ZN7S1603C43v55Ev();
extern void _ZN7S1603C43v56Ev();
extern void _ZN7S1603C43v57Ev();
extern void _ZN7S1603C43v58Ev();
extern void _ZN7S1603C43v59Ev();
extern void _ZN7S1603C43v60Ev();
extern void _ZN7S1603C43v61Ev();
extern void _ZN7S1603C43v62Ev();
extern void _ZN7S1603C43v63Ev();
extern void _ZN7S1603C43v64Ev();
extern void _ZN7S1603C43v65Ev();
extern void _ZN7S1603C43v66Ev();
extern void _ZN7S1603C43v67Ev();
extern void _ZN7S1603C43v68Ev();
extern void _ZN7S1603C43v69Ev();
extern void _ZN7S1603C43v70Ev();
extern void _ZN7S1603C43v71Ev();
extern void _ZN7S1603C43v72Ev();
extern void _ZN10S1603C3_nt3v73Ev();
extern void _ZN10S1603C3_nt3v74Ev();
extern void _ZN10S1603C3_nt3v75Ev();
extern void _ZN10S1603C3_nt3v76Ev();
extern void _ZN10S1603C3_nt3v77Ev();
extern void _ZN10S1603C3_nt3v78Ev();
extern void _ZN10S1603C3_nt3v79Ev();
extern void _ZN10S1603C3_nt3v80Ev();
extern void _ZN10S1603C3_nt3v81Ev();
extern void _ZN10S1603C3_nt3v82Ev();
extern void _ZN10S1603C3_nt3v83Ev();
extern void _ZN10S1603C3_nt3v84Ev();
extern void _ZN10S1603C3_nt3v85Ev();
extern void _ZN10S1603C3_nt3v86Ev();
extern void _ZN10S1603C3_nt3v87Ev();
extern void _ZN10S1603C3_nt3v88Ev();
extern void _ZN10S1603C3_nt3v89Ev();
extern void _ZN10S1603C3_nt3v90Ev();
extern void _ZN10S1603C3_nt3v91Ev();
extern void _ZN10S1603C3_nt3v92Ev();
extern void _ZN10S1603C2_nt3v93Ev();
extern void _ZN10S1603C2_nt3v94Ev();
extern void _ZN7S1603C12v1Ev();
extern void _ZN7S1603C12v2Ev();
extern void _ZN7S1603C12v3Ev();
extern void _ZN7S1603C12v4Ev();
extern void _ZN7S1603C12v5Ev();
extern void _ZN7S1603C12v6Ev();
extern void _ZN7S1603C12v7Ev();
extern void _ZN7S1603C12v8Ev();
static  VTBL_ENTRY vtc_S1603C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1603C1[0]),
  (VTBL_ENTRY)&_ZN7S1603C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1603C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1603C43v72Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1603C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1603C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1603C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1603C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1603C1[];
extern  VTBL_ENTRY _ZTV7S1603C1[];
Class_Descriptor cd_S1603C1 = {  "S1603C1", // class name
  bases_S1603C1, 3,
  &(vtc_S1603C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI7S1603C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1603C1),98, //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  S1470C4  {
  int s1470c4f0;
  __tsi64 s1470c4f1;
  void *s1470c4f2[4];
  int s1470c4f3[2];
  void *s1470c4f4;
  ::S499C6_nt s1470c4f5;
  void *s1470c4f6[2];
  virtual  ~S1470C4(); // _ZN7S1470C4D1Ev
  virtual void  v5(); // _ZN7S1470C42v5Ev
  virtual void  v6(); // _ZN7S1470C42v6Ev
  virtual void  v7(); // _ZN7S1470C42v7Ev
  virtual void  v8(); // _ZN7S1470C42v8Ev
  virtual void  v9(); // _ZN7S1470C42v9Ev
  virtual void  v10(); // _ZN7S1470C43v10Ev
  virtual void  v11(); // _ZN7S1470C43v11Ev
  virtual void  v12(); // _ZN7S1470C43v12Ev
  virtual void  v13(); // _ZN7S1470C43v13Ev
  virtual void  v14(); // _ZN7S1470C43v14Ev
  virtual void  v15(); // _ZN7S1470C43v15Ev
  virtual void  v16(); // _ZN7S1470C43v16Ev
  virtual void  v17(); // _ZN7S1470C43v17Ev
  virtual void  v18(); // _ZN7S1470C43v18Ev
  virtual void  v19(); // _ZN7S1470C43v19Ev
  virtual void  v20(); // _ZN7S1470C43v20Ev
  virtual void  v21(); // _ZN7S1470C43v21Ev
  virtual void  v22(); // _ZN7S1470C43v22Ev
  virtual void  v23(); // _ZN7S1470C43v23Ev
  virtual void  v24(); // _ZN7S1470C43v24Ev
  virtual void  v25(); // _ZN7S1470C43v25Ev
  virtual void  v26(); // _ZN7S1470C43v26Ev
  virtual void  v27(); // _ZN7S1470C43v27Ev
  virtual void  v28(); // _ZN7S1470C43v28Ev
  virtual void  v29(); // _ZN7S1470C43v29Ev
  virtual void  v30(); // _ZN7S1470C43v30Ev
  virtual void  v31(); // _ZN7S1470C43v31Ev
  virtual void  v32(); // _ZN7S1470C43v32Ev
  virtual void  v33(); // _ZN7S1470C43v33Ev
  virtual void  v34(); // _ZN7S1470C43v34Ev
  virtual void  v35(); // _ZN7S1470C43v35Ev
  virtual void  v36(); // _ZN7S1470C43v36Ev
  virtual void  v37(); // _ZN7S1470C43v37Ev
  virtual void  v38(); // _ZN7S1470C43v38Ev
  virtual void  v39(); // _ZN7S1470C43v39Ev
  virtual void  v40(); // _ZN7S1470C43v40Ev
  virtual void  v41(); // _ZN7S1470C43v41Ev
  virtual void  v42(); // _ZN7S1470C43v42Ev
  virtual void  v43(); // _ZN7S1470C43v43Ev
  virtual void  v44(); // _ZN7S1470C43v44Ev
  virtual void  v45(); // _ZN7S1470C43v45Ev
  virtual void  v46(); // _ZN7S1470C43v46Ev
  virtual void  v47(); // _ZN7S1470C43v47Ev
  virtual void  v48(); // _ZN7S1470C43v48Ev
  virtual void  v49(); // _ZN7S1470C43v49Ev
  virtual void  v50(); // _ZN7S1470C43v50Ev
  virtual void  v51(); // _ZN7S1470C43v51Ev
  virtual void  v52(); // _ZN7S1470C43v52Ev
  virtual void  v53(); // _ZN7S1470C43v53Ev
  virtual void  v54(); // _ZN7S1470C43v54Ev
  virtual void  v55(); // _ZN7S1470C43v55Ev
  virtual void  v56(); // _ZN7S1470C43v56Ev
  virtual void  v57(); // _ZN7S1470C43v57Ev
  virtual void  v58(); // _ZN7S1470C43v58Ev
  virtual void  v59(); // _ZN7S1470C43v59Ev
  virtual void  v60(); // _ZN7S1470C43v60Ev
  virtual void  v61(); // _ZN7S1470C43v61Ev
  virtual void  v62(); // _ZN7S1470C43v62Ev
  virtual void  v63(); // _ZN7S1470C43v63Ev
  virtual void  v64(); // _ZN7S1470C43v64Ev
  virtual void  v65(); // _ZN7S1470C43v65Ev
  virtual void  v66(); // _ZN7S1470C43v66Ev
  virtual void  v67(); // _ZN7S1470C43v67Ev
  virtual void  v68(); // _ZN7S1470C43v68Ev
  S1470C4(); // tgen
};
//SIG(-1 S1470C4) 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]}


 S1470C4 ::~S1470C4(){ note_dtor("S1470C4", this);}
void  S1470C4 ::v5(){vfunc_called(this, "_ZN7S1470C42v5Ev");}
void  S1470C4 ::v6(){vfunc_called(this, "_ZN7S1470C42v6Ev");}
void  S1470C4 ::v7(){vfunc_called(this, "_ZN7S1470C42v7Ev");}
void  S1470C4 ::v8(){vfunc_called(this, "_ZN7S1470C42v8Ev");}
void  S1470C4 ::v9(){vfunc_called(this, "_ZN7S1470C42v9Ev");}
void  S1470C4 ::v10(){vfunc_called(this, "_ZN7S1470C43v10Ev");}
void  S1470C4 ::v11(){vfunc_called(this, "_ZN7S1470C43v11Ev");}
void  S1470C4 ::v12(){vfunc_called(this, "_ZN7S1470C43v12Ev");}
void  S1470C4 ::v13(){vfunc_called(this, "_ZN7S1470C43v13Ev");}
void  S1470C4 ::v14(){vfunc_called(this, "_ZN7S1470C43v14Ev");}
void  S1470C4 ::v15(){vfunc_called(this, "_ZN7S1470C43v15Ev");}
void  S1470C4 ::v16(){vfunc_called(this, "_ZN7S1470C43v16Ev");}
void  S1470C4 ::v17(){vfunc_called(this, "_ZN7S1470C43v17Ev");}
void  S1470C4 ::v18(){vfunc_called(this, "_ZN7S1470C43v18Ev");}
void  S1470C4 ::v19(){vfunc_called(this, "_ZN7S1470C43v19Ev");}
void  S1470C4 ::v20(){vfunc_called(this, "_ZN7S1470C43v20Ev");}
void  S1470C4 ::v21(){vfunc_called(this, "_ZN7S1470C43v21Ev");}
void  S1470C4 ::v22(){vfunc_called(this, "_ZN7S1470C43v22Ev");}
void  S1470C4 ::v23(){vfunc_called(this, "_ZN7S1470C43v23Ev");}
void  S1470C4 ::v24(){vfunc_called(this, "_ZN7S1470C43v24Ev");}
void  S1470C4 ::v25(){vfunc_called(this, "_ZN7S1470C43v25Ev");}
void  S1470C4 ::v26(){vfunc_called(this, "_ZN7S1470C43v26Ev");}
void  S1470C4 ::v27(){vfunc_called(this, "_ZN7S1470C43v27Ev");}
void  S1470C4 ::v28(){vfunc_called(this, "_ZN7S1470C43v28Ev");}
void  S1470C4 ::v29(){vfunc_called(this, "_ZN7S1470C43v29Ev");}
void  S1470C4 ::v30(){vfunc_called(this, "_ZN7S1470C43v30Ev");}
void  S1470C4 ::v31(){vfunc_called(this, "_ZN7S1470C43v31Ev");}
void  S1470C4 ::v32(){vfunc_called(this, "_ZN7S1470C43v32Ev");}
void  S1470C4 ::v33(){vfunc_called(this, "_ZN7S1470C43v33Ev");}
void  S1470C4 ::v34(){vfunc_called(this, "_ZN7S1470C43v34Ev");}
void  S1470C4 ::v35(){vfunc_called(this, "_ZN7S1470C43v35Ev");}
void  S1470C4 ::v36(){vfunc_called(this, "_ZN7S1470C43v36Ev");}
void  S1470C4 ::v37(){vfunc_called(this, "_ZN7S1470C43v37Ev");}
void  S1470C4 ::v38(){vfunc_called(this, "_ZN7S1470C43v38Ev");}
void  S1470C4 ::v39(){vfunc_called(this, "_ZN7S1470C43v39Ev");}
void  S1470C4 ::v40(){vfunc_called(this, "_ZN7S1470C43v40Ev");}
void  S1470C4 ::v41(){vfunc_called(this, "_ZN7S1470C43v41Ev");}
void  S1470C4 ::v42(){vfunc_called(this, "_ZN7S1470C43v42Ev");}
void  S1470C4 ::v43(){vfunc_called(this, "_ZN7S1470C43v43Ev");}
void  S1470C4 ::v44(){vfunc_called(this, "_ZN7S1470C43v44Ev");}
void  S1470C4 ::v45(){vfunc_called(this, "_ZN7S1470C43v45Ev");}
void  S1470C4 ::v46(){vfunc_called(this, "_ZN7S1470C43v46Ev");}
void  S1470C4 ::v47(){vfunc_called(this, "_ZN7S1470C43v47Ev");}
void  S1470C4 ::v48(){vfunc_called(this, "_ZN7S1470C43v48Ev");}
void  S1470C4 ::v49(){vfunc_called(this, "_ZN7S1470C43v49Ev");}
void  S1470C4 ::v50(){vfunc_called(this, "_ZN7S1470C43v50Ev");}
void  S1470C4 ::v51(){vfunc_called(this, "_ZN7S1470C43v51Ev");}
void  S1470C4 ::v52(){vfunc_called(this, "_ZN7S1470C43v52Ev");}
void  S1470C4 ::v53(){vfunc_called(this, "_ZN7S1470C43v53Ev");}
void  S1470C4 ::v54(){vfunc_called(this, "_ZN7S1470C43v54Ev");}
void  S1470C4 ::v55(){vfunc_called(this, "_ZN7S1470C43v55Ev");}
void  S1470C4 ::v56(){vfunc_called(this, "_ZN7S1470C43v56Ev");}
void  S1470C4 ::v57(){vfunc_called(this, "_ZN7S1470C43v57Ev");}
void  S1470C4 ::v58(){vfunc_called(this, "_ZN7S1470C43v58Ev");}
void  S1470C4 ::v59(){vfunc_called(this, "_ZN7S1470C43v59Ev");}
void  S1470C4 ::v60(){vfunc_called(this, "_ZN7S1470C43v60Ev");}
void  S1470C4 ::v61(){vfunc_called(this, "_ZN7S1470C43v61Ev");}
void  S1470C4 ::v62(){vfunc_called(this, "_ZN7S1470C43v62Ev");}
void  S1470C4 ::v63(){vfunc_called(this, "_ZN7S1470C43v63Ev");}
void  S1470C4 ::v64(){vfunc_called(this, "_ZN7S1470C43v64Ev");}
void  S1470C4 ::v65(){vfunc_called(this, "_ZN7S1470C43v65Ev");}
void  S1470C4 ::v66(){vfunc_called(this, "_ZN7S1470C43v66Ev");}
void  S1470C4 ::v67(){vfunc_called(this, "_ZN7S1470C43v67Ev");}
void  S1470C4 ::v68(){vfunc_called(this, "_ZN7S1470C43v68Ev");}
S1470C4 ::S1470C4(){ note_ctor("S1470C4", this);} // tgen

static void Test_S1470C4()
{
  extern Class_Descriptor cd_S1470C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1470C4, buf);
    S1470C4 *dp, &lv = *(dp=new (buf) S1470C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1470C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1470C4)");
    check_field_offset(lv, s1470c4f0, ABISELECT(8,4), "S1470C4.s1470c4f0");
    check_field_offset(lv, s1470c4f1, ABISELECT(16,8), "S1470C4.s1470c4f1");
    check_field_offset(lv, s1470c4f2, ABISELECT(24,16), "S1470C4.s1470c4f2");
    check_field_offset(lv, s1470c4f3, ABISELECT(56,32), "S1470C4.s1470c4f3");
    check_field_offset(lv, s1470c4f4, ABISELECT(64,40), "S1470C4.s1470c4f4");
    check_field_offset(lv, s1470c4f5, ABISELECT(72,44), "S1470C4.s1470c4f5");
    check_field_offset(lv, s1470c4f6, ABISELECT(80,52), "S1470C4.s1470c4f6");
    test_class_info(&lv, &cd_S1470C4);
    dp->~S1470C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1470C4(Test_S1470C4, "S1470C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1470C4C1Ev();
extern void _ZN7S1470C4D1Ev();
Name_Map name_map_S1470C4[] = {
  NSPAIR(_ZN7S1470C4C1Ev),
  NSPAIR(_ZN7S1470C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1470C4[];
extern void _ZN7S1470C4D1Ev();
extern void _ZN7S1470C4D0Ev();
extern void _ZN7S1470C42v5Ev();
extern void _ZN7S1470C42v6Ev();
extern void _ZN7S1470C42v7Ev();
extern void _ZN7S1470C42v8Ev();
extern void _ZN7S1470C42v9Ev();
extern void _ZN7S1470C43v10Ev();
extern void _ZN7S1470C43v11Ev();
extern void _ZN7S1470C43v12Ev();
extern void _ZN7S1470C43v13Ev();
extern void _ZN7S1470C43v14Ev();
extern void _ZN7S1470C43v15Ev();
extern void _ZN7S1470C43v16Ev();
extern void _ZN7S1470C43v17Ev();
extern void _ZN7S1470C43v18Ev();
extern void _ZN7S1470C43v19Ev();
extern void _ZN7S1470C43v20Ev();
extern void _ZN7S1470C43v21Ev();
extern void _ZN7S1470C43v22Ev();
extern void _ZN7S1470C43v23Ev();
extern void _ZN7S1470C43v24Ev();
extern void _ZN7S1470C43v25Ev();
extern void _ZN7S1470C43v26Ev();
extern void _ZN7S1470C43v27Ev();
extern void _ZN7S1470C43v28Ev();
extern void _ZN7S1470C43v29Ev();
extern void _ZN7S1470C43v30Ev();
extern void _ZN7S1470C43v31Ev();
extern void _ZN7S1470C43v32Ev();
extern void _ZN7S1470C43v33Ev();
extern void _ZN7S1470C43v34Ev();
extern void _ZN7S1470C43v35Ev();
extern void _ZN7S1470C43v36Ev();
extern void _ZN7S1470C43v37Ev();
extern void _ZN7S1470C43v38Ev();
extern void _ZN7S1470C43v39Ev();
extern void _ZN7S1470C43v40Ev();
extern void _ZN7S1470C43v41Ev();
extern void _ZN7S1470C43v42Ev();
extern void _ZN7S1470C43v43Ev();
extern void _ZN7S1470C43v44Ev();
extern void _ZN7S1470C43v45Ev();
extern void _ZN7S1470C43v46Ev();
extern void _ZN7S1470C43v47Ev();
extern void _ZN7S1470C43v48Ev();
extern void _ZN7S1470C43v49Ev();
extern void _ZN7S1470C43v50Ev();
extern void _ZN7S1470C43v51Ev();
extern void _ZN7S1470C43v52Ev();
extern void _ZN7S1470C43v53Ev();
extern void _ZN7S1470C43v54Ev();
extern void _ZN7S1470C43v55Ev();
extern void _ZN7S1470C43v56Ev();
extern void _ZN7S1470C43v57Ev();
extern void _ZN7S1470C43v58Ev();
extern void _ZN7S1470C43v59Ev();
extern void _ZN7S1470C43v60Ev();
extern void _ZN7S1470C43v61Ev();
extern void _ZN7S1470C43v62Ev();
extern void _ZN7S1470C43v63Ev();
extern void _ZN7S1470C43v64Ev();
extern void _ZN7S1470C43v65Ev();
extern void _ZN7S1470C43v66Ev();
extern void _ZN7S1470C43v67Ev();
extern void _ZN7S1470C43v68Ev();
static  VTBL_ENTRY vtc_S1470C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1470C4[0]),
  (VTBL_ENTRY)&_ZN7S1470C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1470C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1470C4[];
extern  VTBL_ENTRY _ZTV7S1470C4[];
Class_Descriptor cd_S1470C4 = {  "S1470C4", // class name
  0,0,//no base classes
  &(vtc_S1470C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1470C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1470C4),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  S1470C3  : S1470C4 {
  unsigned int s1470c3f0:1;
  unsigned int s1470c3f1:1;
  unsigned int s1470c3f2:1;
  unsigned int s1470c3f3:1;
  unsigned int s1470c3f4:1;
  unsigned int s1470c3f5:1;
  unsigned int s1470c3f6:1;
  ::S7368C78 s1470c3f7;
  virtual  ~S1470C3(); // _ZN7S1470C3D1Ev
  virtual void  v69(); // _ZN7S1470C33v69Ev
  virtual void  v70(); // _ZN7S1470C33v70Ev
  virtual void  v71(); // _ZN7S1470C33v71Ev
  virtual void  v72(); // _ZN7S1470C33v72Ev
  virtual void  v73(); // _ZN7S1470C33v73Ev
  virtual void  v74(); // _ZN7S1470C33v74Ev
  virtual void  v75(); // _ZN7S1470C33v75Ev
  virtual void  v76(); // _ZN7S1470C33v76Ev
  virtual void  v77(); // _ZN7S1470C33v77Ev
  virtual void  v78(); // _ZN7S1470C33v78Ev
  virtual void  v79(); // _ZN7S1470C33v79Ev
  virtual void  v80(); // _ZN7S1470C33v80Ev
  virtual void  v81(); // _ZN7S1470C33v81Ev
  virtual void  v82(); // _ZN7S1470C33v82Ev
  virtual void  v83(); // _ZN7S1470C33v83Ev
  virtual void  v84(); // _ZN7S1470C33v84Ev
  virtual void  v85(); // _ZN7S1470C33v85Ev
  virtual void  v86(); // _ZN7S1470C33v86Ev
  virtual void  v87(); // _ZN7S1470C33v87Ev
  virtual void  v88(); // _ZN7S1470C33v88Ev
  S1470C3(); // tgen
};
//SIG(-1 S1470C3) C1{ BC2{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1470C3 ::~S1470C3(){ note_dtor("S1470C3", this);}
void  S1470C3 ::v69(){vfunc_called(this, "_ZN7S1470C33v69Ev");}
void  S1470C3 ::v70(){vfunc_called(this, "_ZN7S1470C33v70Ev");}
void  S1470C3 ::v71(){vfunc_called(this, "_ZN7S1470C33v71Ev");}
void  S1470C3 ::v72(){vfunc_called(this, "_ZN7S1470C33v72Ev");}
void  S1470C3 ::v73(){vfunc_called(this, "_ZN7S1470C33v73Ev");}
void  S1470C3 ::v74(){vfunc_called(this, "_ZN7S1470C33v74Ev");}
void  S1470C3 ::v75(){vfunc_called(this, "_ZN7S1470C33v75Ev");}
void  S1470C3 ::v76(){vfunc_called(this, "_ZN7S1470C33v76Ev");}
void  S1470C3 ::v77(){vfunc_called(this, "_ZN7S1470C33v77Ev");}
void  S1470C3 ::v78(){vfunc_called(this, "_ZN7S1470C33v78Ev");}
void  S1470C3 ::v79(){vfunc_called(this, "_ZN7S1470C33v79Ev");}
void  S1470C3 ::v80(){vfunc_called(this, "_ZN7S1470C33v80Ev");}
void  S1470C3 ::v81(){vfunc_called(this, "_ZN7S1470C33v81Ev");}
void  S1470C3 ::v82(){vfunc_called(this, "_ZN7S1470C33v82Ev");}
void  S1470C3 ::v83(){vfunc_called(this, "_ZN7S1470C33v83Ev");}
void  S1470C3 ::v84(){vfunc_called(this, "_ZN7S1470C33v84Ev");}
void  S1470C3 ::v85(){vfunc_called(this, "_ZN7S1470C33v85Ev");}
void  S1470C3 ::v86(){vfunc_called(this, "_ZN7S1470C33v86Ev");}
void  S1470C3 ::v87(){vfunc_called(this, "_ZN7S1470C33v87Ev");}
void  S1470C3 ::v88(){vfunc_called(this, "_ZN7S1470C33v88Ev");}
S1470C3 ::S1470C3(){ note_ctor("S1470C3", this);} // tgen

static void Test_S1470C3()
{
  extern Class_Descriptor cd_S1470C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1470C3, buf);
    S1470C3 *dp, &lv = *(dp=new (buf) S1470C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1470C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1470C3)");
    check_base_class_offset(lv, (S1470C4*), 0, "S1470C3");
    set_bf_and_test(lv, s1470c3f0, ABISELECT(96,60), 0, 1, 1, "S1470C3");
    set_bf_and_test(lv, s1470c3f1, ABISELECT(96,60), 1, 1, 1, "S1470C3");
    set_bf_and_test(lv, s1470c3f2, ABISELECT(96,60), 2, 1, 1, "S1470C3");
    set_bf_and_test(lv, s1470c3f3, ABISELECT(96,60), 3, 1, 1, "S1470C3");
    set_bf_and_test(lv, s1470c3f4, ABISELECT(96,60), 4, 1, 1, "S1470C3");
    set_bf_and_test(lv, s1470c3f5, ABISELECT(96,60), 5, 1, 1, "S1470C3");
    set_bf_and_test(lv, s1470c3f6, ABISELECT(96,60), 6, 1, 1, "S1470C3");
    check_field_offset(lv, s1470c3f7, ABISELECT(97,61), "S1470C3.s1470c3f7");
    test_class_info(&lv, &cd_S1470C3);
    dp->~S1470C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1470C3(Test_S1470C3, "S1470C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1470C3C1Ev();
extern void _ZN7S1470C3D1Ev();
Name_Map name_map_S1470C3[] = {
  NSPAIR(_ZN7S1470C3C1Ev),
  NSPAIR(_ZN7S1470C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1470C4;
extern VTBL_ENTRY _ZTI7S1470C4[];
extern  VTBL_ENTRY _ZTV7S1470C4[];
static Base_Class bases_S1470C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1470C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1470C3[];
extern void _ZN7S1470C3D1Ev();
extern void _ZN7S1470C3D0Ev();
extern void _ZN7S1470C42v5Ev();
extern void _ZN7S1470C42v6Ev();
extern void _ZN7S1470C42v7Ev();
extern void _ZN7S1470C42v8Ev();
extern void _ZN7S1470C42v9Ev();
extern void _ZN7S1470C43v10Ev();
extern void _ZN7S1470C43v11Ev();
extern void _ZN7S1470C43v12Ev();
extern void _ZN7S1470C43v13Ev();
extern void _ZN7S1470C43v14Ev();
extern void _ZN7S1470C43v15Ev();
extern void _ZN7S1470C43v16Ev();
extern void _ZN7S1470C43v17Ev();
extern void _ZN7S1470C43v18Ev();
extern void _ZN7S1470C43v19Ev();
extern void _ZN7S1470C43v20Ev();
extern void _ZN7S1470C43v21Ev();
extern void _ZN7S1470C43v22Ev();
extern void _ZN7S1470C43v23Ev();
extern void _ZN7S1470C43v24Ev();
extern void _ZN7S1470C43v25Ev();
extern void _ZN7S1470C43v26Ev();
extern void _ZN7S1470C43v27Ev();
extern void _ZN7S1470C43v28Ev();
extern void _ZN7S1470C43v29Ev();
extern void _ZN7S1470C43v30Ev();
extern void _ZN7S1470C43v31Ev();
extern void _ZN7S1470C43v32Ev();
extern void _ZN7S1470C43v33Ev();
extern void _ZN7S1470C43v34Ev();
extern void _ZN7S1470C43v35Ev();
extern void _ZN7S1470C43v36Ev();
extern void _ZN7S1470C43v37Ev();
extern void _ZN7S1470C43v38Ev();
extern void _ZN7S1470C43v39Ev();
extern void _ZN7S1470C43v40Ev();
extern void _ZN7S1470C43v41Ev();
extern void _ZN7S1470C43v42Ev();
extern void _ZN7S1470C43v43Ev();
extern void _ZN7S1470C43v44Ev();
extern void _ZN7S1470C43v45Ev();
extern void _ZN7S1470C43v46Ev();
extern void _ZN7S1470C43v47Ev();
extern void _ZN7S1470C43v48Ev();
extern void _ZN7S1470C43v49Ev();
extern void _ZN7S1470C43v50Ev();
extern void _ZN7S1470C43v51Ev();
extern void _ZN7S1470C43v52Ev();
extern void _ZN7S1470C43v53Ev();
extern void _ZN7S1470C43v54Ev();
extern void _ZN7S1470C43v55Ev();
extern void _ZN7S1470C43v56Ev();
extern void _ZN7S1470C43v57Ev();
extern void _ZN7S1470C43v58Ev();
extern void _ZN7S1470C43v59Ev();
extern void _ZN7S1470C43v60Ev();
extern void _ZN7S1470C43v61Ev();
extern void _ZN7S1470C43v62Ev();
extern void _ZN7S1470C43v63Ev();
extern void _ZN7S1470C43v64Ev();
extern void _ZN7S1470C43v65Ev();
extern void _ZN7S1470C43v66Ev();
extern void _ZN7S1470C43v67Ev();
extern void _ZN7S1470C43v68Ev();
extern void _ZN7S1470C33v69Ev();
extern void _ZN7S1470C33v70Ev();
extern void _ZN7S1470C33v71Ev();
extern void _ZN7S1470C33v72Ev();
extern void _ZN7S1470C33v73Ev();
extern void _ZN7S1470C33v74Ev();
extern void _ZN7S1470C33v75Ev();
extern void _ZN7S1470C33v76Ev();
extern void _ZN7S1470C33v77Ev();
extern void _ZN7S1470C33v78Ev();
extern void _ZN7S1470C33v79Ev();
extern void _ZN7S1470C33v80Ev();
extern void _ZN7S1470C33v81Ev();
extern void _ZN7S1470C33v82Ev();
extern void _ZN7S1470C33v83Ev();
extern void _ZN7S1470C33v84Ev();
extern void _ZN7S1470C33v85Ev();
extern void _ZN7S1470C33v86Ev();
extern void _ZN7S1470C33v87Ev();
extern void _ZN7S1470C33v88Ev();
static  VTBL_ENTRY vtc_S1470C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1470C3[0]),
  (VTBL_ENTRY)&_ZN7S1470C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1470C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v88Ev,
};
extern VTBL_ENTRY _ZTI7S1470C3[];
extern  VTBL_ENTRY _ZTV7S1470C3[];
Class_Descriptor cd_S1470C3 = {  "S1470C3", // class name
  bases_S1470C3, 1,
  &(vtc_S1470C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1470C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1470C3),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1470C2  : S1470C3 {
  virtual  ~S1470C2(); // _ZN7S1470C2D1Ev
  virtual void  v89(); // _ZN7S1470C23v89Ev
  virtual void  v90(); // _ZN7S1470C23v90Ev
  S1470C2(); // tgen
};
//SIG(-1 S1470C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1470C2 ::~S1470C2(){ note_dtor("S1470C2", this);}
void  S1470C2 ::v89(){vfunc_called(this, "_ZN7S1470C23v89Ev");}
void  S1470C2 ::v90(){vfunc_called(this, "_ZN7S1470C23v90Ev");}
S1470C2 ::S1470C2(){ note_ctor("S1470C2", this);} // tgen

static void Test_S1470C2()
{
  extern Class_Descriptor cd_S1470C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1470C2, buf);
    S1470C2 *dp, &lv = *(dp=new (buf) S1470C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1470C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1470C2)");
    check_base_class_offset(lv, (S1470C4*)(S1470C3*), 0, "S1470C2");
    check_base_class_offset(lv, (S1470C3*), 0, "S1470C2");
    test_class_info(&lv, &cd_S1470C2);
    dp->~S1470C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1470C2(Test_S1470C2, "S1470C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1470C2C1Ev();
extern void _ZN7S1470C2D1Ev();
Name_Map name_map_S1470C2[] = {
  NSPAIR(_ZN7S1470C2C1Ev),
  NSPAIR(_ZN7S1470C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1470C4;
extern VTBL_ENTRY _ZTI7S1470C4[];
extern  VTBL_ENTRY _ZTV7S1470C4[];
extern Class_Descriptor cd_S1470C3;
extern VTBL_ENTRY _ZTI7S1470C3[];
extern  VTBL_ENTRY _ZTV7S1470C3[];
static Base_Class bases_S1470C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1470C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1470C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1470C2[];
extern void _ZN7S1470C2D1Ev();
extern void _ZN7S1470C2D0Ev();
extern void _ZN7S1470C42v5Ev();
extern void _ZN7S1470C42v6Ev();
extern void _ZN7S1470C42v7Ev();
extern void _ZN7S1470C42v8Ev();
extern void _ZN7S1470C42v9Ev();
extern void _ZN7S1470C43v10Ev();
extern void _ZN7S1470C43v11Ev();
extern void _ZN7S1470C43v12Ev();
extern void _ZN7S1470C43v13Ev();
extern void _ZN7S1470C43v14Ev();
extern void _ZN7S1470C43v15Ev();
extern void _ZN7S1470C43v16Ev();
extern void _ZN7S1470C43v17Ev();
extern void _ZN7S1470C43v18Ev();
extern void _ZN7S1470C43v19Ev();
extern void _ZN7S1470C43v20Ev();
extern void _ZN7S1470C43v21Ev();
extern void _ZN7S1470C43v22Ev();
extern void _ZN7S1470C43v23Ev();
extern void _ZN7S1470C43v24Ev();
extern void _ZN7S1470C43v25Ev();
extern void _ZN7S1470C43v26Ev();
extern void _ZN7S1470C43v27Ev();
extern void _ZN7S1470C43v28Ev();
extern void _ZN7S1470C43v29Ev();
extern void _ZN7S1470C43v30Ev();
extern void _ZN7S1470C43v31Ev();
extern void _ZN7S1470C43v32Ev();
extern void _ZN7S1470C43v33Ev();
extern void _ZN7S1470C43v34Ev();
extern void _ZN7S1470C43v35Ev();
extern void _ZN7S1470C43v36Ev();
extern void _ZN7S1470C43v37Ev();
extern void _ZN7S1470C43v38Ev();
extern void _ZN7S1470C43v39Ev();
extern void _ZN7S1470C43v40Ev();
extern void _ZN7S1470C43v41Ev();
extern void _ZN7S1470C43v42Ev();
extern void _ZN7S1470C43v43Ev();
extern void _ZN7S1470C43v44Ev();
extern void _ZN7S1470C43v45Ev();
extern void _ZN7S1470C43v46Ev();
extern void _ZN7S1470C43v47Ev();
extern void _ZN7S1470C43v48Ev();
extern void _ZN7S1470C43v49Ev();
extern void _ZN7S1470C43v50Ev();
extern void _ZN7S1470C43v51Ev();
extern void _ZN7S1470C43v52Ev();
extern void _ZN7S1470C43v53Ev();
extern void _ZN7S1470C43v54Ev();
extern void _ZN7S1470C43v55Ev();
extern void _ZN7S1470C43v56Ev();
extern void _ZN7S1470C43v57Ev();
extern void _ZN7S1470C43v58Ev();
extern void _ZN7S1470C43v59Ev();
extern void _ZN7S1470C43v60Ev();
extern void _ZN7S1470C43v61Ev();
extern void _ZN7S1470C43v62Ev();
extern void _ZN7S1470C43v63Ev();
extern void _ZN7S1470C43v64Ev();
extern void _ZN7S1470C43v65Ev();
extern void _ZN7S1470C43v66Ev();
extern void _ZN7S1470C43v67Ev();
extern void _ZN7S1470C43v68Ev();
extern void _ZN7S1470C33v69Ev();
extern void _ZN7S1470C33v70Ev();
extern void _ZN7S1470C33v71Ev();
extern void _ZN7S1470C33v72Ev();
extern void _ZN7S1470C33v73Ev();
extern void _ZN7S1470C33v74Ev();
extern void _ZN7S1470C33v75Ev();
extern void _ZN7S1470C33v76Ev();
extern void _ZN7S1470C33v77Ev();
extern void _ZN7S1470C33v78Ev();
extern void _ZN7S1470C33v79Ev();
extern void _ZN7S1470C33v80Ev();
extern void _ZN7S1470C33v81Ev();
extern void _ZN7S1470C33v82Ev();
extern void _ZN7S1470C33v83Ev();
extern void _ZN7S1470C33v84Ev();
extern void _ZN7S1470C33v85Ev();
extern void _ZN7S1470C33v86Ev();
extern void _ZN7S1470C33v87Ev();
extern void _ZN7S1470C33v88Ev();
extern void _ZN7S1470C23v89Ev();
extern void _ZN7S1470C23v90Ev();
static  VTBL_ENTRY vtc_S1470C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1470C2[0]),
  (VTBL_ENTRY)&_ZN7S1470C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1470C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1470C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1470C23v90Ev,
};
extern VTBL_ENTRY _ZTI7S1470C2[];
extern  VTBL_ENTRY _ZTV7S1470C2[];
Class_Descriptor cd_S1470C2 = {  "S1470C2", // class name
  bases_S1470C2, 2,
  &(vtc_S1470C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1470C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1470C2),90, //virtual function table var
  2, // 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  S1470C12_nt  : S1603C8_nt {
  void *s1470c12f0;
};
//SIG(-1 S1470C12_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1470C12_nt

#else // __cplusplus

extern Class_Descriptor cd_S1603C8_nt;
static Base_Class bases_S1470C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1603C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1470C1  : S1470C2 {
  ::S1603C7_nt s1470c1f0;
  ::S1470C12_nt s1470c1f1;
  virtual  ~S1470C1(); // _ZN7S1470C1D1Ev
  virtual void  v1(); // _ZN7S1470C12v1Ev
  virtual void  v2(); // _ZN7S1470C12v2Ev
  virtual void  v3(); // _ZN7S1470C12v3Ev
  virtual void  v4(); // _ZN7S1470C12v4Ev
  S1470C1(); // tgen
};
//SIG(1 S1470C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v89 v90} vd v1 v2 v3 v4 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC12{ BC8 Fp}}


 S1470C1 ::~S1470C1(){ note_dtor("S1470C1", this);}
void  S1470C1 ::v1(){vfunc_called(this, "_ZN7S1470C12v1Ev");}
void  S1470C1 ::v2(){vfunc_called(this, "_ZN7S1470C12v2Ev");}
void  S1470C1 ::v3(){vfunc_called(this, "_ZN7S1470C12v3Ev");}
void  S1470C1 ::v4(){vfunc_called(this, "_ZN7S1470C12v4Ev");}
S1470C1 ::S1470C1(){ note_ctor("S1470C1", this);} // tgen

static void Test_S1470C1()
{
  extern Class_Descriptor cd_S1470C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,31)];
    init_test(&cd_S1470C1, buf);
    S1470C1 *dp, &lv = *(dp=new (buf) S1470C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,120), "sizeof(S1470C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1470C1)");
    check_base_class_offset(lv, (S1470C4*)(S1470C3*)(S1470C2*), 0, "S1470C1");
    check_base_class_offset(lv, (S1470C3*)(S1470C2*), 0, "S1470C1");
    check_base_class_offset(lv, (S1470C2*), 0, "S1470C1");
    check_field_offset(lv, s1470c1f0, ABISELECT(104,64), "S1470C1.s1470c1f0");
    check_field_offset(lv, s1470c1f1, ABISELECT(144,92), "S1470C1.s1470c1f1");
    test_class_info(&lv, &cd_S1470C1);
    dp->~S1470C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1470C1(Test_S1470C1, "S1470C1", ABISELECT(184,120));

#else // __cplusplus

extern void _ZN7S1470C1C1Ev();
extern void _ZN7S1470C1D1Ev();
Name_Map name_map_S1470C1[] = {
  NSPAIR(_ZN7S1470C1C1Ev),
  NSPAIR(_ZN7S1470C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1470C4;
extern VTBL_ENTRY _ZTI7S1470C4[];
extern  VTBL_ENTRY _ZTV7S1470C4[];
extern Class_Descriptor cd_S1470C3;
extern VTBL_ENTRY _ZTI7S1470C3[];
extern  VTBL_ENTRY _ZTV7S1470C3[];
extern Class_Descriptor cd_S1470C2;
extern VTBL_ENTRY _ZTI7S1470C2[];
extern  VTBL_ENTRY _ZTV7S1470C2[];
static Base_Class bases_S1470C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1470C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1470C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1470C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1470C1[];
extern void _ZN7S1470C1D1Ev();
extern void _ZN7S1470C1D0Ev();
extern void _ZN7S1470C42v5Ev();
extern void _ZN7S1470C42v6Ev();
extern void _ZN7S1470C42v7Ev();
extern void _ZN7S1470C42v8Ev();
extern void _ZN7S1470C42v9Ev();
extern void _ZN7S1470C43v10Ev();
extern void _ZN7S1470C43v11Ev();
extern void _ZN7S1470C43v12Ev();
extern void _ZN7S1470C43v13Ev();
extern void _ZN7S1470C43v14Ev();
extern void _ZN7S1470C43v15Ev();
extern void _ZN7S1470C43v16Ev();
extern void _ZN7S1470C43v17Ev();
extern void _ZN7S1470C43v18Ev();
extern void _ZN7S1470C43v19Ev();
extern void _ZN7S1470C43v20Ev();
extern void _ZN7S1470C43v21Ev();
extern void _ZN7S1470C43v22Ev();
extern void _ZN7S1470C43v23Ev();
extern void _ZN7S1470C43v24Ev();
extern void _ZN7S1470C43v25Ev();
extern void _ZN7S1470C43v26Ev();
extern void _ZN7S1470C43v27Ev();
extern void _ZN7S1470C43v28Ev();
extern void _ZN7S1470C43v29Ev();
extern void _ZN7S1470C43v30Ev();
extern void _ZN7S1470C43v31Ev();
extern void _ZN7S1470C43v32Ev();
extern void _ZN7S1470C43v33Ev();
extern void _ZN7S1470C43v34Ev();
extern void _ZN7S1470C43v35Ev();
extern void _ZN7S1470C43v36Ev();
extern void _ZN7S1470C43v37Ev();
extern void _ZN7S1470C43v38Ev();
extern void _ZN7S1470C43v39Ev();
extern void _ZN7S1470C43v40Ev();
extern void _ZN7S1470C43v41Ev();
extern void _ZN7S1470C43v42Ev();
extern void _ZN7S1470C43v43Ev();
extern void _ZN7S1470C43v44Ev();
extern void _ZN7S1470C43v45Ev();
extern void _ZN7S1470C43v46Ev();
extern void _ZN7S1470C43v47Ev();
extern void _ZN7S1470C43v48Ev();
extern void _ZN7S1470C43v49Ev();
extern void _ZN7S1470C43v50Ev();
extern void _ZN7S1470C43v51Ev();
extern void _ZN7S1470C43v52Ev();
extern void _ZN7S1470C43v53Ev();
extern void _ZN7S1470C43v54Ev();
extern void _ZN7S1470C43v55Ev();
extern void _ZN7S1470C43v56Ev();
extern void _ZN7S1470C43v57Ev();
extern void _ZN7S1470C43v58Ev();
extern void _ZN7S1470C43v59Ev();
extern void _ZN7S1470C43v60Ev();
extern void _ZN7S1470C43v61Ev();
extern void _ZN7S1470C43v62Ev();
extern void _ZN7S1470C43v63Ev();
extern void _ZN7S1470C43v64Ev();
extern void _ZN7S1470C43v65Ev();
extern void _ZN7S1470C43v66Ev();
extern void _ZN7S1470C43v67Ev();
extern void _ZN7S1470C43v68Ev();
extern void _ZN7S1470C33v69Ev();
extern void _ZN7S1470C33v70Ev();
extern void _ZN7S1470C33v71Ev();
extern void _ZN7S1470C33v72Ev();
extern void _ZN7S1470C33v73Ev();
extern void _ZN7S1470C33v74Ev();
extern void _ZN7S1470C33v75Ev();
extern void _ZN7S1470C33v76Ev();
extern void _ZN7S1470C33v77Ev();
extern void _ZN7S1470C33v78Ev();
extern void _ZN7S1470C33v79Ev();
extern void _ZN7S1470C33v80Ev();
extern void _ZN7S1470C33v81Ev();
extern void _ZN7S1470C33v82Ev();
extern void _ZN7S1470C33v83Ev();
extern void _ZN7S1470C33v84Ev();
extern void _ZN7S1470C33v85Ev();
extern void _ZN7S1470C33v86Ev();
extern void _ZN7S1470C33v87Ev();
extern void _ZN7S1470C33v88Ev();
extern void _ZN7S1470C23v89Ev();
extern void _ZN7S1470C23v90Ev();
extern void _ZN7S1470C12v1Ev();
extern void _ZN7S1470C12v2Ev();
extern void _ZN7S1470C12v3Ev();
extern void _ZN7S1470C12v4Ev();
static  VTBL_ENTRY vtc_S1470C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1470C1[0]),
  (VTBL_ENTRY)&_ZN7S1470C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1470C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1470C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1470C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1470C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1470C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1470C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1470C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1470C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1470C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1470C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1470C1[];
extern  VTBL_ENTRY _ZTV7S1470C1[];
Class_Descriptor cd_S1470C1 = {  "S1470C1", // class name
  bases_S1470C1, 3,
  &(vtc_S1470C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,120), // object size
  NSPAIRA(_ZTI7S1470C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1470C1),94, //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  S724C4_nt  : S7368C49 {
  void *s724c4f0;
  ::S10256C12_nt s724c4f1;
  virtual  ~S724C4_nt(); // _ZN9S724C4_ntD1Ev
  virtual void  v11(); // _ZN9S724C4_nt3v11Ev
  virtual void  v12(); // _ZN9S724C4_nt3v12Ev
  virtual void  v13(); // _ZN9S724C4_nt3v13Ev
  virtual void  v14(); // _ZN9S724C4_nt3v14Ev
  virtual void  v15(); // _ZN9S724C4_nt3v15Ev
  virtual void  v16(); // _ZN9S724C4_nt3v16Ev
  virtual void  v17(); // _ZN9S724C4_nt3v17Ev
  virtual void  v18(); // _ZN9S724C4_nt3v18Ev
  virtual void  v19(); // _ZN9S724C4_nt3v19Ev
  virtual void  v20(); // _ZN9S724C4_nt3v20Ev
  virtual void  v21(); // _ZN9S724C4_nt3v21Ev
  S724C4_nt(); // tgen
};
//SIG(-1 S724C4_nt) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S724C4_nt ::~S724C4_nt(){ note_dtor("S724C4_nt", this);}
void  S724C4_nt ::v11(){vfunc_called(this, "_ZN9S724C4_nt3v11Ev");}
void  S724C4_nt ::v12(){vfunc_called(this, "_ZN9S724C4_nt3v12Ev");}
void  S724C4_nt ::v13(){vfunc_called(this, "_ZN9S724C4_nt3v13Ev");}
void  S724C4_nt ::v14(){vfunc_called(this, "_ZN9S724C4_nt3v14Ev");}
void  S724C4_nt ::v15(){vfunc_called(this, "_ZN9S724C4_nt3v15Ev");}
void  S724C4_nt ::v16(){vfunc_called(this, "_ZN9S724C4_nt3v16Ev");}
void  S724C4_nt ::v17(){vfunc_called(this, "_ZN9S724C4_nt3v17Ev");}
void  S724C4_nt ::v18(){vfunc_called(this, "_ZN9S724C4_nt3v18Ev");}
void  S724C4_nt ::v19(){vfunc_called(this, "_ZN9S724C4_nt3v19Ev");}
void  S724C4_nt ::v20(){vfunc_called(this, "_ZN9S724C4_nt3v20Ev");}
void  S724C4_nt ::v21(){vfunc_called(this, "_ZN9S724C4_nt3v21Ev");}
S724C4_nt ::S724C4_nt(){ note_ctor("S724C4_nt", this);} // tgen

//skip512 S724C4_nt

#else // __cplusplus

extern void _ZN9S724C4_ntC1Ev();
extern void _ZN9S724C4_ntD1Ev();
Name_Map name_map_S724C4_nt[] = {
  NSPAIR(_ZN9S724C4_ntC1Ev),
  NSPAIR(_ZN9S724C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S724C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S724C4_nt[];
extern void _ZN9S724C4_ntD1Ev();
extern void _ZN9S724C4_ntD0Ev();
extern void _ZN9S724C4_nt3v11Ev();
extern void _ZN9S724C4_nt3v12Ev();
extern void _ZN9S724C4_nt3v13Ev();
extern void _ZN9S724C4_nt3v14Ev();
extern void _ZN9S724C4_nt3v15Ev();
extern void _ZN9S724C4_nt3v16Ev();
extern void _ZN9S724C4_nt3v17Ev();
extern void _ZN9S724C4_nt3v18Ev();
extern void _ZN9S724C4_nt3v19Ev();
extern void _ZN9S724C4_nt3v20Ev();
extern void _ZN9S724C4_nt3v21Ev();
static  VTBL_ENTRY vtc_S724C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S724C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S724C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S724C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI9S724C4_nt[];
VTBL_ENTRY *P__ZTI9S724C4_nt = _ZTI9S724C4_nt; 
extern  VTBL_ENTRY _ZTV9S724C4_nt[];
Class_Descriptor cd_S724C4_nt = {  "S724C4_nt", // class name
  bases_S724C4_nt, 1,
  &(vtc_S724C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI9S724C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S724C4_nt),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S724C3_nt  : S724C4_nt {
  int s724c3f0;
  virtual  ~S724C3_nt(); // _ZN9S724C3_ntD1Ev
  virtual void  v22(); // _ZN9S724C3_nt3v22Ev
  virtual void  v23(); // _ZN9S724C3_nt3v23Ev
  virtual void  v24(); // _ZN9S724C3_nt3v24Ev
  virtual void  v25(); // _ZN9S724C3_nt3v25Ev
  virtual void  v26(); // _ZN9S724C3_nt3v26Ev
  virtual void  v27(); // _ZN9S724C3_nt3v27Ev
  virtual void  v28(); // _ZN9S724C3_nt3v28Ev
  virtual void  v29(); // _ZN9S724C3_nt3v29Ev
  virtual void  v30(); // _ZN9S724C3_nt3v30Ev
  virtual void  v31(); // _ZN9S724C3_nt3v31Ev
  virtual void  v32(); // _ZN9S724C3_nt3v32Ev
  virtual void  v33(); // _ZN9S724C3_nt3v33Ev
  virtual void  v34(); // _ZN9S724C3_nt3v34Ev
  virtual void  v35(); // _ZN9S724C3_nt3v35Ev
  virtual void  v36(); // _ZN9S724C3_nt3v36Ev
  virtual void  v37(); // _ZN9S724C3_nt3v37Ev
  virtual void  v38(); // _ZN9S724C3_nt3v38Ev
  virtual void  v39(); // _ZN9S724C3_nt3v39Ev
  virtual void  v40(); // _ZN9S724C3_nt3v40Ev
  S724C3_nt(); // tgen
};
//SIG(-1 S724C3_nt) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi}


 S724C3_nt ::~S724C3_nt(){ note_dtor("S724C3_nt", this);}
void  S724C3_nt ::v22(){vfunc_called(this, "_ZN9S724C3_nt3v22Ev");}
void  S724C3_nt ::v23(){vfunc_called(this, "_ZN9S724C3_nt3v23Ev");}
void  S724C3_nt ::v24(){vfunc_called(this, "_ZN9S724C3_nt3v24Ev");}
void  S724C3_nt ::v25(){vfunc_called(this, "_ZN9S724C3_nt3v25Ev");}
void  S724C3_nt ::v26(){vfunc_called(this, "_ZN9S724C3_nt3v26Ev");}
void  S724C3_nt ::v27(){vfunc_called(this, "_ZN9S724C3_nt3v27Ev");}
void  S724C3_nt ::v28(){vfunc_called(this, "_ZN9S724C3_nt3v28Ev");}
void  S724C3_nt ::v29(){vfunc_called(this, "_ZN9S724C3_nt3v29Ev");}
void  S724C3_nt ::v30(){vfunc_called(this, "_ZN9S724C3_nt3v30Ev");}
void  S724C3_nt ::v31(){vfunc_called(this, "_ZN9S724C3_nt3v31Ev");}
void  S724C3_nt ::v32(){vfunc_called(this, "_ZN9S724C3_nt3v32Ev");}
void  S724C3_nt ::v33(){vfunc_called(this, "_ZN9S724C3_nt3v33Ev");}
void  S724C3_nt ::v34(){vfunc_called(this, "_ZN9S724C3_nt3v34Ev");}
void  S724C3_nt ::v35(){vfunc_called(this, "_ZN9S724C3_nt3v35Ev");}
void  S724C3_nt ::v36(){vfunc_called(this, "_ZN9S724C3_nt3v36Ev");}
void  S724C3_nt ::v37(){vfunc_called(this, "_ZN9S724C3_nt3v37Ev");}
void  S724C3_nt ::v38(){vfunc_called(this, "_ZN9S724C3_nt3v38Ev");}
void  S724C3_nt ::v39(){vfunc_called(this, "_ZN9S724C3_nt3v39Ev");}
void  S724C3_nt ::v40(){vfunc_called(this, "_ZN9S724C3_nt3v40Ev");}
S724C3_nt ::S724C3_nt(){ note_ctor("S724C3_nt", this);} // tgen

//skip512 S724C3_nt

#else // __cplusplus

extern void _ZN9S724C3_ntC1Ev();
extern void _ZN9S724C3_ntD1Ev();
Name_Map name_map_S724C3_nt[] = {
  NSPAIR(_ZN9S724C3_ntC1Ev),
  NSPAIR(_ZN9S724C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S724C4_nt;
extern VTBL_ENTRY _ZTI9S724C4_nt[];
extern  VTBL_ENTRY _ZTV9S724C4_nt[];
static Base_Class bases_S724C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S724C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S724C3_nt[];
extern void _ZN9S724C3_ntD1Ev();
extern void _ZN9S724C3_ntD0Ev();
extern void _ZN9S724C4_nt3v11Ev();
extern void _ZN9S724C4_nt3v12Ev();
extern void _ZN9S724C4_nt3v13Ev();
extern void _ZN9S724C4_nt3v14Ev();
extern void _ZN9S724C4_nt3v15Ev();
extern void _ZN9S724C4_nt3v16Ev();
extern void _ZN9S724C4_nt3v17Ev();
extern void _ZN9S724C4_nt3v18Ev();
extern void _ZN9S724C4_nt3v19Ev();
extern void _ZN9S724C4_nt3v20Ev();
extern void _ZN9S724C4_nt3v21Ev();
extern void _ZN9S724C3_nt3v22Ev();
extern void _ZN9S724C3_nt3v23Ev();
extern void _ZN9S724C3_nt3v24Ev();
extern void _ZN9S724C3_nt3v25Ev();
extern void _ZN9S724C3_nt3v26Ev();
extern void _ZN9S724C3_nt3v27Ev();
extern void _ZN9S724C3_nt3v28Ev();
extern void _ZN9S724C3_nt3v29Ev();
extern void _ZN9S724C3_nt3v30Ev();
extern void _ZN9S724C3_nt3v31Ev();
extern void _ZN9S724C3_nt3v32Ev();
extern void _ZN9S724C3_nt3v33Ev();
extern void _ZN9S724C3_nt3v34Ev();
extern void _ZN9S724C3_nt3v35Ev();
extern void _ZN9S724C3_nt3v36Ev();
extern void _ZN9S724C3_nt3v37Ev();
extern void _ZN9S724C3_nt3v38Ev();
extern void _ZN9S724C3_nt3v39Ev();
extern void _ZN9S724C3_nt3v40Ev();
static  VTBL_ENTRY vtc_S724C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S724C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S724C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S724C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v40Ev,
};
extern VTBL_ENTRY _ZTI9S724C3_nt[];
VTBL_ENTRY *P__ZTI9S724C3_nt = _ZTI9S724C3_nt; 
extern  VTBL_ENTRY _ZTV9S724C3_nt[];
Class_Descriptor cd_S724C3_nt = {  "S724C3_nt", // class name
  bases_S724C3_nt, 2,
  &(vtc_S724C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI9S724C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S724C3_nt),34, //virtual function table var
  2, // 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  S724C2_nt  : S724C3_nt {
  ::S7368C77 s724c2f0;
  virtual  ~S724C2_nt(); // _ZN9S724C2_ntD1Ev
  virtual void  v41(); // _ZN9S724C2_nt3v41Ev
  virtual void  v42(); // _ZN9S724C2_nt3v42Ev
  virtual void  v43(); // _ZN9S724C2_nt3v43Ev
  virtual void  v44(); // _ZN9S724C2_nt3v44Ev
  virtual void  v45(); // _ZN9S724C2_nt3v45Ev
  virtual void  v46(); // _ZN9S724C2_nt3v46Ev
  virtual void  v47(); // _ZN9S724C2_nt3v47Ev
  S724C2_nt(); // tgen
};
//SIG(-1 S724C2_nt) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} vd v1 v2 v3 v4 v5 v6 v7 FC8{ m Fp Fi[2] FC9{ m}}}


 S724C2_nt ::~S724C2_nt(){ note_dtor("S724C2_nt", this);}
void  S724C2_nt ::v41(){vfunc_called(this, "_ZN9S724C2_nt3v41Ev");}
void  S724C2_nt ::v42(){vfunc_called(this, "_ZN9S724C2_nt3v42Ev");}
void  S724C2_nt ::v43(){vfunc_called(this, "_ZN9S724C2_nt3v43Ev");}
void  S724C2_nt ::v44(){vfunc_called(this, "_ZN9S724C2_nt3v44Ev");}
void  S724C2_nt ::v45(){vfunc_called(this, "_ZN9S724C2_nt3v45Ev");}
void  S724C2_nt ::v46(){vfunc_called(this, "_ZN9S724C2_nt3v46Ev");}
void  S724C2_nt ::v47(){vfunc_called(this, "_ZN9S724C2_nt3v47Ev");}
S724C2_nt ::S724C2_nt(){ note_ctor("S724C2_nt", this);} // tgen

//skip512 S724C2_nt

#else // __cplusplus

extern void _ZN9S724C2_ntC1Ev();
extern void _ZN9S724C2_ntD1Ev();
Name_Map name_map_S724C2_nt[] = {
  NSPAIR(_ZN9S724C2_ntC1Ev),
  NSPAIR(_ZN9S724C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S724C4_nt;
extern VTBL_ENTRY _ZTI9S724C4_nt[];
extern  VTBL_ENTRY _ZTV9S724C4_nt[];
extern Class_Descriptor cd_S724C3_nt;
extern VTBL_ENTRY _ZTI9S724C3_nt[];
extern  VTBL_ENTRY _ZTV9S724C3_nt[];
static Base_Class bases_S724C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S724C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S724C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S724C2_nt[];
extern void _ZN9S724C2_ntD1Ev();
extern void _ZN9S724C2_ntD0Ev();
extern void _ZN9S724C4_nt3v11Ev();
extern void _ZN9S724C4_nt3v12Ev();
extern void _ZN9S724C4_nt3v13Ev();
extern void _ZN9S724C4_nt3v14Ev();
extern void _ZN9S724C4_nt3v15Ev();
extern void _ZN9S724C4_nt3v16Ev();
extern void _ZN9S724C4_nt3v17Ev();
extern void _ZN9S724C4_nt3v18Ev();
extern void _ZN9S724C4_nt3v19Ev();
extern void _ZN9S724C4_nt3v20Ev();
extern void _ZN9S724C4_nt3v21Ev();
extern void _ZN9S724C3_nt3v22Ev();
extern void _ZN9S724C3_nt3v23Ev();
extern void _ZN9S724C3_nt3v24Ev();
extern void _ZN9S724C3_nt3v25Ev();
extern void _ZN9S724C3_nt3v26Ev();
extern void _ZN9S724C3_nt3v27Ev();
extern void _ZN9S724C3_nt3v28Ev();
extern void _ZN9S724C3_nt3v29Ev();
extern void _ZN9S724C3_nt3v30Ev();
extern void _ZN9S724C3_nt3v31Ev();
extern void _ZN9S724C3_nt3v32Ev();
extern void _ZN9S724C3_nt3v33Ev();
extern void _ZN9S724C3_nt3v34Ev();
extern void _ZN9S724C3_nt3v35Ev();
extern void _ZN9S724C3_nt3v36Ev();
extern void _ZN9S724C3_nt3v37Ev();
extern void _ZN9S724C3_nt3v38Ev();
extern void _ZN9S724C3_nt3v39Ev();
extern void _ZN9S724C3_nt3v40Ev();
extern void _ZN9S724C2_nt3v41Ev();
extern void _ZN9S724C2_nt3v42Ev();
extern void _ZN9S724C2_nt3v43Ev();
extern void _ZN9S724C2_nt3v44Ev();
extern void _ZN9S724C2_nt3v45Ev();
extern void _ZN9S724C2_nt3v46Ev();
extern void _ZN9S724C2_nt3v47Ev();
static  VTBL_ENTRY vtc_S724C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S724C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S724C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S724C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v47Ev,
};
extern VTBL_ENTRY _ZTI9S724C2_nt[];
VTBL_ENTRY *P__ZTI9S724C2_nt = _ZTI9S724C2_nt; 
extern  VTBL_ENTRY _ZTV9S724C2_nt[];
Class_Descriptor cd_S724C2_nt = {  "S724C2_nt", // class name
  bases_S724C2_nt, 3,
  &(vtc_S724C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI9S724C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S724C2_nt),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S724C11_nt  {
  virtual  ~S724C11_nt(); // _ZN10S724C11_ntD1Ev
  virtual void  v48(); // _ZN10S724C11_nt3v48Ev
  S724C11_nt(); // tgen
};
//SIG(-1 S724C11_nt) C1{ vd v1}


 S724C11_nt ::~S724C11_nt(){ note_dtor("S724C11_nt", this);}
void  S724C11_nt ::v48(){vfunc_called(this, "_ZN10S724C11_nt3v48Ev");}
S724C11_nt ::S724C11_nt(){ note_ctor("S724C11_nt", this);} // tgen

//skip512 S724C11_nt

#else // __cplusplus

extern void _ZN10S724C11_ntC1Ev();
extern void _ZN10S724C11_ntD1Ev();
Name_Map name_map_S724C11_nt[] = {
  NSPAIR(_ZN10S724C11_ntC1Ev),
  NSPAIR(_ZN10S724C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S724C11_nt[];
extern void _ZN10S724C11_ntD1Ev();
extern void _ZN10S724C11_ntD0Ev();
extern void _ZN10S724C11_nt3v48Ev();
static  VTBL_ENTRY vtc_S724C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S724C11_nt[0]),
  (VTBL_ENTRY)&_ZN10S724C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S724C11_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S724C11_nt3v48Ev,
};
extern VTBL_ENTRY _ZTI10S724C11_nt[];
VTBL_ENTRY *P__ZTI10S724C11_nt = _ZTI10S724C11_nt; 
extern  VTBL_ENTRY _ZTV10S724C11_nt[];
Class_Descriptor cd_S724C11_nt = {  "S724C11_nt", // class name
  0,0,//no base classes
  &(vtc_S724C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S724C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S724C11_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  S724C12  {
  virtual  ~S724C12(); // _ZN7S724C12D1Ev
  virtual void  v49(); // _ZN7S724C123v49Ev
  S724C12(); // tgen
};
//SIG(-1 S724C12) C1{ vd v1}


 S724C12 ::~S724C12(){ note_dtor("S724C12", this);}
void  S724C12 ::v49(){vfunc_called(this, "_ZN7S724C123v49Ev");}
S724C12 ::S724C12(){ note_ctor("S724C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S724C12C1Ev();
extern void _ZN7S724C12D1Ev();
Name_Map name_map_S724C12[] = {
  NSPAIR(_ZN7S724C12C1Ev),
  NSPAIR(_ZN7S724C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S724C12[];
extern void _ZN7S724C12D1Ev();
extern void _ZN7S724C12D0Ev();
extern void _ZN7S724C123v49Ev();
static  VTBL_ENTRY vtc_S724C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S724C12[0]),
  (VTBL_ENTRY)&_ZN7S724C12D1Ev,
  (VTBL_ENTRY)&_ZN7S724C12D0Ev,
  (VTBL_ENTRY)&_ZN7S724C123v49Ev,
};
extern VTBL_ENTRY _ZTI7S724C12[];
extern  VTBL_ENTRY _ZTV7S724C12[];
Class_Descriptor cd_S724C12 = {  "S724C12", // class name
  0,0,//no base classes
  &(vtc_S724C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S724C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S724C12),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  S724C15  {
  ::S7368C11 s724c15f0;
  int s724c15f1;
  void  mf724c15(); // _ZN7S724C158mf724c15Ev
  virtual  ~S724C15(); // _ZN7S724C15D1Ev
  S724C15(); // tgen
};
//SIG(-1 S724C15) C1{ vd m FC2{ BC3{ vd m Fc} vd FL[2]} Fi}


void  S724C15 ::mf724c15(){}
 S724C15 ::~S724C15(){ note_dtor("S724C15", this);}
S724C15 ::S724C15(){ note_ctor("S724C15", this);} // tgen

static void Test_S724C15()
{
  extern Class_Descriptor cd_S724C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S724C15, buf);
    S724C15 *dp, &lv = *(dp=new (buf) S724C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S724C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S724C15)");
    check_field_offset(lv, s724c15f0, ABISELECT(8,4), "S724C15.s724c15f0");
    check_field_offset(lv, s724c15f1, ABISELECT(40,28), "S724C15.s724c15f1");
    test_class_info(&lv, &cd_S724C15);
    dp->~S724C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS724C15(Test_S724C15, "S724C15", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S724C15C1Ev();
extern void _ZN7S724C15D1Ev();
Name_Map name_map_S724C15[] = {
  NSPAIR(_ZN7S724C15C1Ev),
  NSPAIR(_ZN7S724C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S724C15[];
extern void _ZN7S724C15D1Ev();
extern void _ZN7S724C15D0Ev();
static  VTBL_ENTRY vtc_S724C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S724C15[0]),
  (VTBL_ENTRY)&_ZN7S724C15D1Ev,
  (VTBL_ENTRY)&_ZN7S724C15D0Ev,
};
extern VTBL_ENTRY _ZTI7S724C15[];
extern  VTBL_ENTRY _ZTV7S724C15[];
Class_Descriptor cd_S724C15 = {  "S724C15", // class name
  0,0,//no base classes
  &(vtc_S724C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S724C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S724C15),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  S724C18  {
  ::S7368C11 s724c18f0;
  int s724c18f1[2];
  void  mf724c18(); // _ZN7S724C188mf724c18Ev
  virtual  ~S724C18(); // _ZN7S724C18D1Ev
  S724C18(); // tgen
};
//SIG(-1 S724C18) C1{ vd m FC2{ BC3{ vd m Fc} vd FL[2]} Fi[2]}


void  S724C18 ::mf724c18(){}
 S724C18 ::~S724C18(){ note_dtor("S724C18", this);}
S724C18 ::S724C18(){ note_ctor("S724C18", this);} // tgen

static void Test_S724C18()
{
  extern Class_Descriptor cd_S724C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S724C18, buf);
    S724C18 *dp, &lv = *(dp=new (buf) S724C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S724C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S724C18)");
    check_field_offset(lv, s724c18f0, ABISELECT(8,4), "S724C18.s724c18f0");
    check_field_offset(lv, s724c18f1, ABISELECT(40,28), "S724C18.s724c18f1");
    test_class_info(&lv, &cd_S724C18);
    dp->~S724C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS724C18(Test_S724C18, "S724C18", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S724C18C1Ev();
extern void _ZN7S724C18D1Ev();
Name_Map name_map_S724C18[] = {
  NSPAIR(_ZN7S724C18C1Ev),
  NSPAIR(_ZN7S724C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S724C18[];
extern void _ZN7S724C18D1Ev();
extern void _ZN7S724C18D0Ev();
static  VTBL_ENTRY vtc_S724C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S724C18[0]),
  (VTBL_ENTRY)&_ZN7S724C18D1Ev,
  (VTBL_ENTRY)&_ZN7S724C18D0Ev,
};
extern VTBL_ENTRY _ZTI7S724C18[];
extern  VTBL_ENTRY _ZTV7S724C18[];
Class_Descriptor cd_S724C18 = {  "S724C18", // class name
  0,0,//no base classes
  &(vtc_S724C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S724C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S724C18),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  S724C13  : S7368C18_nt {
  int s724c13f0;
  char s724c13f1[3];
  int s724c13f2[2];
  ::S724C15 s724c13f3;
  ::S724C18 s724c13f4;
  void *s724c13f5[2];
  virtual  ~S724C13(); // _ZN7S724C13D1Ev
  S724C13(); // tgen
};
//SIG(-1 S724C13) C1{ BC2{ vd m Fp} vd Fi Fc[3] Fi[2] FC3{ vd m FC4{ BC5{ vd m Fc} vd FL[2]} Fi} FC6{ vd m FC4 Fi[2]} Fp[2]}


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

static void Test_S724C13()
{
  extern Class_Descriptor cd_S724C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,26)];
    init_test(&cd_S724C13, buf);
    S724C13 *dp, &lv = *(dp=new (buf) S724C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S724C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S724C13)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S724C13");
    check_field_offset(lv, s724c13f0, ABISELECT(16,8), "S724C13.s724c13f0");
    check_field_offset(lv, s724c13f1, ABISELECT(20,12), "S724C13.s724c13f1");
    check_field_offset(lv, s724c13f2, ABISELECT(24,16), "S724C13.s724c13f2");
    check_field_offset(lv, s724c13f3, ABISELECT(32,24), "S724C13.s724c13f3");
    check_field_offset(lv, s724c13f4, ABISELECT(80,56), "S724C13.s724c13f4");
    check_field_offset(lv, s724c13f5, ABISELECT(128,92), "S724C13.s724c13f5");
    test_class_info(&lv, &cd_S724C13);
    dp->~S724C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS724C13(Test_S724C13, "S724C13", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN7S724C13C1Ev();
extern void _ZN7S724C13D1Ev();
Name_Map name_map_S724C13[] = {
  NSPAIR(_ZN7S724C13C1Ev),
  NSPAIR(_ZN7S724C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S724C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S724C13[];
extern void _ZN7S724C13D1Ev();
extern void _ZN7S724C13D0Ev();
static  VTBL_ENTRY vtc_S724C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S724C13[0]),
  (VTBL_ENTRY)&_ZN7S724C13D1Ev,
  (VTBL_ENTRY)&_ZN7S724C13D0Ev,
};
extern VTBL_ENTRY _ZTI7S724C13[];
extern  VTBL_ENTRY _ZTV7S724C13[];
Class_Descriptor cd_S724C13 = {  "S724C13", // class name
  bases_S724C13, 1,
  &(vtc_S724C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI7S724C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S724C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S724C1  : S724C2_nt , S724C11_nt , S724C12 {
  ::S724C13 s724c1f0;
  void *s724c1f1[2];
  ::S7368C58 s724c1f2;
  ::S7368C50 s724c1f3;
  ::S7368C42 s724c1f4;
  void *s724c1f5;
  char s724c1f6;
  virtual  ~S724C1(); // _ZN6S724C1D1Ev
  virtual void  v1(); // _ZN6S724C12v1Ev
  virtual void  v2(); // _ZN6S724C12v2Ev
  virtual void  v3(); // _ZN6S724C12v3Ev
  virtual void  v4(); // _ZN6S724C12v4Ev
  virtual void  v5(); // _ZN6S724C12v5Ev
  virtual void  v6(); // _ZN6S724C12v6Ev
  virtual void  v7(); // _ZN6S724C12v7Ev
  virtual void  v8(); // _ZN6S724C12v8Ev
  virtual void  v9(); // _ZN6S724C12v9Ev
  virtual void  v10(); // _ZN6S724C13v10Ev
  S724C1(); // tgen
};
//SIG(1 S724C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 Fi} vd v41 v42 v43 v44 v45 v46 v47 FC9{ m Fp Fi[2] FC10{ m}}} BC11{ vd v48} BC12{ vd v49} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC13{ BC14{ vd m Fp} vd Fi Fc[3] Fi[2] FC15{ vd m FC16{ BC17{ vd m Fc} vd FL[2]} Fi} FC18{ vd m FC16 Fi[2]} Fp[2]} Fp[2] FC19{ m Fp Fi[2] FC7} FC6 FC20{ m Fp Fi[2] FC21{ m}} Fp Fc}


 S724C1 ::~S724C1(){ note_dtor("S724C1", this);}
void  S724C1 ::v1(){vfunc_called(this, "_ZN6S724C12v1Ev");}
void  S724C1 ::v2(){vfunc_called(this, "_ZN6S724C12v2Ev");}
void  S724C1 ::v3(){vfunc_called(this, "_ZN6S724C12v3Ev");}
void  S724C1 ::v4(){vfunc_called(this, "_ZN6S724C12v4Ev");}
void  S724C1 ::v5(){vfunc_called(this, "_ZN6S724C12v5Ev");}
void  S724C1 ::v6(){vfunc_called(this, "_ZN6S724C12v6Ev");}
void  S724C1 ::v7(){vfunc_called(this, "_ZN6S724C12v7Ev");}
void  S724C1 ::v8(){vfunc_called(this, "_ZN6S724C12v8Ev");}
void  S724C1 ::v9(){vfunc_called(this, "_ZN6S724C12v9Ev");}
void  S724C1 ::v10(){vfunc_called(this, "_ZN6S724C13v10Ev");}
S724C1 ::S724C1(){ note_ctor("S724C1", this);} // tgen

static void Test_S724C1()
{
  extern Class_Descriptor cd_S724C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,65)];
    init_test(&cd_S724C1, buf);
    S724C1 *dp, &lv = *(dp=new (buf) S724C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,256), "sizeof(S724C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S724C1)");
    check_base_class_offset(lv, (S7368C49*)(S724C4_nt*)(S724C3_nt*)(S724C2_nt*), 0, "S724C1");
    check_base_class_offset(lv, (S724C4_nt*)(S724C3_nt*)(S724C2_nt*), 0, "S724C1");
    check_base_class_offset(lv, (S724C3_nt*)(S724C2_nt*), 0, "S724C1");
    check_base_class_offset(lv, (S724C2_nt*), 0, "S724C1");
    check_base_class_offset(lv, (S724C11_nt*), ABISELECT(128,84), "S724C1");
    check_base_class_offset(lv, (S724C12*), ABISELECT(136,88), "S724C1");
    check_field_offset(lv, s724c1f0, ABISELECT(144,92), "S724C1.s724c1f0");
    check_field_offset(lv, s724c1f1, ABISELECT(288,192), "S724C1.s724c1f1");
    check_field_offset(lv, s724c1f2, ABISELECT(304,200), "S724C1.s724c1f2");
    check_field_offset(lv, s724c1f3, ABISELECT(328,216), "S724C1.s724c1f3");
    check_field_offset(lv, s724c1f4, ABISELECT(352,232), "S724C1.s724c1f4");
    check_field_offset(lv, s724c1f5, ABISELECT(376,248), "S724C1.s724c1f5");
    check_field_offset(lv, s724c1f6, ABISELECT(384,252), "S724C1.s724c1f6");
    test_class_info(&lv, &cd_S724C1);
    dp->~S724C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS724C1(Test_S724C1, "S724C1", ABISELECT(392,256));

#else // __cplusplus

extern void _ZN6S724C1C1Ev();
extern void _ZN6S724C1D1Ev();
Name_Map name_map_S724C1[] = {
  NSPAIR(_ZN6S724C1C1Ev),
  NSPAIR(_ZN6S724C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S724C4_nt;
extern VTBL_ENTRY _ZTI9S724C4_nt[];
extern  VTBL_ENTRY _ZTV9S724C4_nt[];
extern Class_Descriptor cd_S724C3_nt;
extern VTBL_ENTRY _ZTI9S724C3_nt[];
extern  VTBL_ENTRY _ZTV9S724C3_nt[];
extern Class_Descriptor cd_S724C2_nt;
extern VTBL_ENTRY _ZTI9S724C2_nt[];
extern  VTBL_ENTRY _ZTV9S724C2_nt[];
extern Class_Descriptor cd_S724C11_nt;
extern VTBL_ENTRY _ZTI10S724C11_nt[];
extern  VTBL_ENTRY _ZTV10S724C11_nt[];
extern Class_Descriptor cd_S724C12;
extern VTBL_ENTRY _ZTI7S724C12[];
extern  VTBL_ENTRY _ZTV7S724C12[];
static Base_Class bases_S724C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S724C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S724C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S724C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S724C11_nt,    ABISELECT(128,84), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S724C12,    ABISELECT(136,88), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S724C1[];
extern void _ZN6S724C1D1Ev();
extern void _ZN6S724C1D0Ev();
extern void _ZN9S724C4_nt3v11Ev();
extern void _ZN9S724C4_nt3v12Ev();
extern void _ZN9S724C4_nt3v13Ev();
extern void _ZN9S724C4_nt3v14Ev();
extern void _ZN9S724C4_nt3v15Ev();
extern void _ZN9S724C4_nt3v16Ev();
extern void _ZN9S724C4_nt3v17Ev();
extern void _ZN9S724C4_nt3v18Ev();
extern void _ZN9S724C4_nt3v19Ev();
extern void _ZN9S724C4_nt3v20Ev();
extern void _ZN9S724C4_nt3v21Ev();
extern void _ZN9S724C3_nt3v22Ev();
extern void _ZN9S724C3_nt3v23Ev();
extern void _ZN9S724C3_nt3v24Ev();
extern void _ZN9S724C3_nt3v25Ev();
extern void _ZN9S724C3_nt3v26Ev();
extern void _ZN9S724C3_nt3v27Ev();
extern void _ZN9S724C3_nt3v28Ev();
extern void _ZN9S724C3_nt3v29Ev();
extern void _ZN9S724C3_nt3v30Ev();
extern void _ZN9S724C3_nt3v31Ev();
extern void _ZN9S724C3_nt3v32Ev();
extern void _ZN9S724C3_nt3v33Ev();
extern void _ZN9S724C3_nt3v34Ev();
extern void _ZN9S724C3_nt3v35Ev();
extern void _ZN9S724C3_nt3v36Ev();
extern void _ZN9S724C3_nt3v37Ev();
extern void _ZN9S724C3_nt3v38Ev();
extern void _ZN9S724C3_nt3v39Ev();
extern void _ZN9S724C3_nt3v40Ev();
extern void _ZN9S724C2_nt3v41Ev();
extern void _ZN9S724C2_nt3v42Ev();
extern void _ZN9S724C2_nt3v43Ev();
extern void _ZN9S724C2_nt3v44Ev();
extern void _ZN9S724C2_nt3v45Ev();
extern void _ZN9S724C2_nt3v46Ev();
extern void _ZN9S724C2_nt3v47Ev();
extern void _ZN6S724C12v1Ev();
extern void _ZN6S724C12v2Ev();
extern void _ZN6S724C12v3Ev();
extern void _ZN6S724C12v4Ev();
extern void _ZN6S724C12v5Ev();
extern void _ZN6S724C12v6Ev();
extern void _ZN6S724C12v7Ev();
extern void _ZN6S724C12v8Ev();
extern void _ZN6S724C12v9Ev();
extern void _ZN6S724C13v10Ev();
extern void ABISELECT(_ZThn128_N6S724C1D1Ev,_ZThn84_N6S724C1D1Ev)();
extern void ABISELECT(_ZThn128_N6S724C1D0Ev,_ZThn84_N6S724C1D0Ev)();
extern void _ZN10S724C11_nt3v48Ev();
extern void ABISELECT(_ZThn136_N6S724C1D1Ev,_ZThn88_N6S724C1D1Ev)();
extern void ABISELECT(_ZThn136_N6S724C1D0Ev,_ZThn88_N6S724C1D0Ev)();
extern void _ZN7S724C123v49Ev();
static  VTBL_ENTRY vtc_S724C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S724C1[0]),
  (VTBL_ENTRY)&_ZN6S724C1D1Ev,
  (VTBL_ENTRY)&_ZN6S724C1D0Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S724C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S724C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S724C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN6S724C12v1Ev,
  (VTBL_ENTRY)&_ZN6S724C12v2Ev,
  (VTBL_ENTRY)&_ZN6S724C12v3Ev,
  (VTBL_ENTRY)&_ZN6S724C12v4Ev,
  (VTBL_ENTRY)&_ZN6S724C12v5Ev,
  (VTBL_ENTRY)&_ZN6S724C12v6Ev,
  (VTBL_ENTRY)&_ZN6S724C12v7Ev,
  (VTBL_ENTRY)&_ZN6S724C12v8Ev,
  (VTBL_ENTRY)&_ZN6S724C12v9Ev,
  (VTBL_ENTRY)&_ZN6S724C13v10Ev,
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI6S724C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N6S724C1D1Ev,_ZThn84_N6S724C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N6S724C1D0Ev,_ZThn84_N6S724C1D0Ev),
  (VTBL_ENTRY)&_ZN10S724C11_nt3v48Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S724C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S724C1D1Ev,_ZThn88_N6S724C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S724C1D0Ev,_ZThn88_N6S724C1D0Ev),
  (VTBL_ENTRY)&_ZN7S724C123v49Ev,
};
extern VTBL_ENTRY _ZTI6S724C1[];
extern  VTBL_ENTRY _ZTV6S724C1[];
Class_Descriptor cd_S724C1 = {  "S724C1", // class name
  bases_S724C1, 6,
  &(vtc_S724C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,256), // object size
  NSPAIRA(_ZTI6S724C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S724C1),61, //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  S7676C3  {
  void *s7676c3f0;
  virtual void  v8(); // _ZN7S7676C32v8Ev
  virtual void  v9(); // _ZN7S7676C32v9Ev
  ~S7676C3(); // tgen
  S7676C3(); // tgen
};
//SIG(-1 S7676C3) C1{ v1 v2 Fp}


void  S7676C3 ::v8(){vfunc_called(this, "_ZN7S7676C32v8Ev");}
void  S7676C3 ::v9(){vfunc_called(this, "_ZN7S7676C32v9Ev");}
S7676C3 ::~S7676C3(){ note_dtor("S7676C3", this);} // tgen
S7676C3 ::S7676C3(){ note_ctor("S7676C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7676C3C1Ev();
extern void _ZN7S7676C3D1Ev();
Name_Map name_map_S7676C3[] = {
  NSPAIR(_ZN7S7676C3C1Ev),
  NSPAIR(_ZN7S7676C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7676C3[];
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY vtc_S7676C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C3[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
Class_Descriptor cd_S7676C3 = {  "S7676C3", // class name
  0,0,//no base classes
  &(vtc_S7676C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7676C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7676C3),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  S7676C2  : virtual S7676C3 {
  void *s7676c2f0;
  virtual  ~S7676C2(); // _ZN7S7676C2D2Ev
  virtual void  v10(); // _ZN7S7676C23v10Ev
  virtual void  v11(); // _ZN7S7676C23v11Ev
  S7676C2(); // tgen
};
//SIG(-1 S7676C2) C1{ VBC2{ v3 v4 Fp} vd v1 v2 Fp}


 S7676C2 ::~S7676C2(){ note_dtor("S7676C2", this);}
void  S7676C2 ::v10(){vfunc_called(this, "_ZN7S7676C23v10Ev");}
void  S7676C2 ::v11(){vfunc_called(this, "_ZN7S7676C23v11Ev");}
S7676C2 ::S7676C2(){ note_ctor("S7676C2", this);} // tgen

static void Test_S7676C2()
{
  extern Class_Descriptor cd_S7676C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7676C2, buf);
    S7676C2 *dp, &lv = *(dp=new (buf) S7676C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7676C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7676C2)");
    check_base_class_offset(lv, (S7676C3*), ABISELECT(16,8), "S7676C2");
    check_field_offset(lv, s7676c2f0, ABISELECT(8,4), "S7676C2.s7676c2f0");
    test_class_info(&lv, &cd_S7676C2);
    dp->~S7676C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C2(Test_S7676C2, "S7676C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7676C2C1Ev();
extern void _ZN7S7676C2D2Ev();
Name_Map name_map_S7676C2[] = {
  NSPAIR(_ZN7S7676C2C1Ev),
  NSPAIR(_ZN7S7676C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
static Base_Class bases_S7676C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7676C2[];
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY vtc_S7676C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7676C2[];
static  VTT_ENTRY vtt_S7676C2[] = {
  {&(_ZTV7S7676C2[3]),  3,13},
  {&(_ZTV7S7676C2[11]),  11,13},
};
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
Class_Descriptor cd_S7676C2 = {  "S7676C2", // class name
  bases_S7676C2, 1,
  &(vtc_S7676C2[0]), // expected_vtbl_contents
  &(vtt_S7676C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7676C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7676C2),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7676C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C8_nt  {
  virtual void  v12(); // _ZN10S7676C8_nt3v12Ev
  ~S7676C8_nt(); // tgen
  S7676C8_nt(); // tgen
};
//SIG(-1 S7676C8_nt) C1{ v1}


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

//skip512 S7676C8_nt

#else // __cplusplus

extern void _ZN10S7676C8_ntC1Ev();
extern void _ZN10S7676C8_ntD1Ev();
Name_Map name_map_S7676C8_nt[] = {
  NSPAIR(_ZN10S7676C8_ntC1Ev),
  NSPAIR(_ZN10S7676C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY vtc_S7676C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7676C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
VTBL_ENTRY *P__ZTI10S7676C8_nt = _ZTI10S7676C8_nt; 
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
Class_Descriptor cd_S7676C8_nt = {  "S7676C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7676C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7676C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7676C8_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C7  : virtual S7676C3 , S7676C2 , S7676C8_nt {
  __tsi64 s7676c7f0;
  int s7676c7f1;
  void *s7676c7f2[8];
  int s7676c7f3[2];
  long double s7676c7f4;
  int s7676c7f5;
  virtual  ~S7676C7(); // _ZN7S7676C7D2Ev
  virtual void  v13(); // _ZN7S7676C73v13Ev
  virtual void  v14(); // _ZN7S7676C73v14Ev
  virtual void  v15(); // _ZN7S7676C73v15Ev
  S7676C7(); // tgen
};
//SIG(-1 S7676C7) C1{ VBC2{ v4 v5 Fp} BC3{ VBC2 vd v6 v7 Fp} BC4{ v8} vd v1 v2 v3 FL Fi Fp[8] Fi[2] FD Fi}


 S7676C7 ::~S7676C7(){ note_dtor("S7676C7", this);}
void  S7676C7 ::v13(){vfunc_called(this, "_ZN7S7676C73v13Ev");}
void  S7676C7 ::v14(){vfunc_called(this, "_ZN7S7676C73v14Ev");}
void  S7676C7 ::v15(){vfunc_called(this, "_ZN7S7676C73v15Ev");}
S7676C7 ::S7676C7(){ note_ctor("S7676C7", this);} // tgen

static void Test_S7676C7()
{
  extern Class_Descriptor cd_S7676C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,23)];
    init_test(&cd_S7676C7, buf);
    S7676C7 *dp, &lv = *(dp=new (buf) S7676C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S7676C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C7)");
    check_base_class_offset(lv, (S7676C3*), ABISELECT(136,80), "S7676C7");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*), ABISELECT(136,80), "S7676C7");
    check_base_class_offset(lv, (S7676C2*), 0, "S7676C7");
    check_base_class_offset(lv, (S7676C8_nt*), ABISELECT(16,8), "S7676C7");
    check_field_offset(lv, s7676c7f0, ABISELECT(24,12), "S7676C7.s7676c7f0");
    check_field_offset(lv, s7676c7f1, ABISELECT(32,20), "S7676C7.s7676c7f1");
    check_field_offset(lv, s7676c7f2, ABISELECT(40,24), "S7676C7.s7676c7f2");
    check_field_offset(lv, s7676c7f3, ABISELECT(104,56), "S7676C7.s7676c7f3");
    check_field_offset(lv, s7676c7f4, ABISELECT(112,64), "S7676C7.s7676c7f4");
    check_field_offset(lv, s7676c7f5, ABISELECT(128,76), "S7676C7.s7676c7f5");
    test_class_info(&lv, &cd_S7676C7);
    dp->~S7676C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C7(Test_S7676C7, "S7676C7", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN7S7676C7C1Ev();
extern void _ZN7S7676C7D2Ev();
Name_Map name_map_S7676C7[] = {
  NSPAIR(_ZN7S7676C7C1Ev),
  NSPAIR(_ZN7S7676C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
static Base_Class bases_S7676C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    ABISELECT(136,80), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7676C8_nt,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7676C7[];
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY vtc_S7676C7[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7676C7[];
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__7S7676C7[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C2__7S7676C7[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
static  VTT_ENTRY vtt_S7676C7[] = {
  {&(_ZTV7S7676C7[3]),  3,19},
  {&(_tg__ZTV7S7676C2__7S7676C7[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C2__7S7676C7[4]),  4,6},
  {&(_ZTV7S7676C7[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
Class_Descriptor cd_S7676C7 = {  "S7676C7", // class name
  bases_S7676C7, 3,
  &(vtc_S7676C7[0]), // expected_vtbl_contents
  &(vtt_S7676C7[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI7S7676C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7676C7),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7676C7),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C9  {
  void *s7676c9f0;
  char s7676c9f1;
  virtual void  v16(); // _ZN7S7676C93v16Ev
  virtual void  v17(); // _ZN7S7676C93v17Ev
  virtual void  v18(); // _ZN7S7676C93v18Ev
  virtual void  v19(); // _ZN7S7676C93v19Ev
  ~S7676C9(); // tgen
  S7676C9(); // tgen
};
//SIG(-1 S7676C9) C1{ v1 v2 v3 v4 Fp Fc}


void  S7676C9 ::v16(){vfunc_called(this, "_ZN7S7676C93v16Ev");}
void  S7676C9 ::v17(){vfunc_called(this, "_ZN7S7676C93v17Ev");}
void  S7676C9 ::v18(){vfunc_called(this, "_ZN7S7676C93v18Ev");}
void  S7676C9 ::v19(){vfunc_called(this, "_ZN7S7676C93v19Ev");}
S7676C9 ::~S7676C9(){ note_dtor("S7676C9", this);} // tgen
S7676C9 ::S7676C9(){ note_ctor("S7676C9", this);} // tgen

static void Test_S7676C9()
{
  extern Class_Descriptor cd_S7676C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7676C9, buf);
    S7676C9 *dp, &lv = *(dp=new (buf) S7676C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7676C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7676C9)");
    check_field_offset(lv, s7676c9f0, ABISELECT(8,4), "S7676C9.s7676c9f0");
    check_field_offset(lv, s7676c9f1, ABISELECT(16,8), "S7676C9.s7676c9f1");
    test_class_info(&lv, &cd_S7676C9);
    dp->~S7676C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C9(Test_S7676C9, "S7676C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7676C9C1Ev();
extern void _ZN7S7676C9D1Ev();
Name_Map name_map_S7676C9[] = {
  NSPAIR(_ZN7S7676C9C1Ev),
  NSPAIR(_ZN7S7676C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7676C9[];
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY vtc_S7676C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C9[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
Class_Descriptor cd_S7676C9 = {  "S7676C9", // class name
  0,0,//no base classes
  &(vtc_S7676C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7676C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7676C9),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  S7676C6  : virtual S7676C3 , S7676C7 , S7676C8_nt , virtual S7676C9 {
  long double s7676c6f0;
  virtual void  v20(); // _ZN7S7676C63v20Ev
  virtual void  v21(); // _ZN7S7676C63v21Ev
  virtual void  v22(); // _ZN7S7676C63v22Ev
  virtual void  v23(); // _ZN7S7676C63v23Ev
  virtual void  v24(); // _ZN7S7676C63v24Ev
  ~S7676C6(); // tgen
  S7676C6(); // tgen
};
//SIG(-1 S7676C6) C1{ VBC2{ v6 v7 Fp} BC3{ VBC2 BC4{ VBC2 vd v8 v9 Fp} BC5{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} BC5 VBC6{ v14 v15 v16 v17 Fp Fc} v1 v2 v3 v4 v5 FD}


void  S7676C6 ::v20(){vfunc_called(this, "_ZN7S7676C63v20Ev");}
void  S7676C6 ::v21(){vfunc_called(this, "_ZN7S7676C63v21Ev");}
void  S7676C6 ::v22(){vfunc_called(this, "_ZN7S7676C63v22Ev");}
void  S7676C6 ::v23(){vfunc_called(this, "_ZN7S7676C63v23Ev");}
void  S7676C6 ::v24(){vfunc_called(this, "_ZN7S7676C63v24Ev");}
S7676C6 ::~S7676C6(){ note_dtor("S7676C6", this);} // tgen
S7676C6 ::S7676C6(){ note_ctor("S7676C6", this);} // tgen

static void Test_S7676C6()
{
  extern Class_Descriptor cd_S7676C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,30)];
    init_test(&cd_S7676C6, buf);
    S7676C6 *dp, &lv = *(dp=new (buf) S7676C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,116), "sizeof(S7676C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C6)");
    check_base_class_offset(lv, (S7676C3*), ABISELECT(160,96), "S7676C6");
    check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(160,96), "S7676C6");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(160,96), "S7676C6");
    check_base_class_offset(lv, (S7676C2*)(S7676C7*), 0, "S7676C6");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(16,8), "S7676C6");
    check_base_class_offset(lv, (S7676C7*), 0, "S7676C6");
    /*is_ambiguous_... S7676C6::S7676C8_nt */ AMB_check_base_class_offset(lv, (S7676C8_nt*), ABISELECT(136,80), "S7676C6");
    check_base_class_offset(lv, (S7676C9*), ABISELECT(176,104), "S7676C6");
    check_field_offset(lv, s7676c6f0, ABISELECT(144,84), "S7676C6.s7676c6f0");
    test_class_info(&lv, &cd_S7676C6);
    dp->~S7676C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C6(Test_S7676C6, "S7676C6", ABISELECT(208,116));

#else // __cplusplus

extern void _ZN7S7676C6C1Ev();
extern void _ZN7S7676C6D1Ev();
Name_Map name_map_S7676C6[] = {
  NSPAIR(_ZN7S7676C6C1Ev),
  NSPAIR(_ZN7S7676C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C9;
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
static Base_Class bases_S7676C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    ABISELECT(160,96), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //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_S7676C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7676C8_nt,    ABISELECT(136,80), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7676C9,    ABISELECT(176,104), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7676C6[];
extern void _ZN7S7676C6D1Ev();
extern void _ZN7S7676C6D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY vtc_S7676C6[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern VTBL_ENTRY _ZTV7S7676C6[];
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__7S7676C6[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__7S7676C6[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__7S7676C6[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__7S7676C6[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
static  VTT_ENTRY vtt_S7676C6[] = {
  {&(_ZTV7S7676C6[4]),  4,38},
  {&(_tg__ZTV7S7676C7__7S7676C6[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__7S7676C6[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__7S7676C6[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__7S7676C6[4]),  4,6},
  {&(_ZTV7S7676C6[26]),  26,38},
  {&(_ZTV7S7676C6[34]),  34,38},
};
extern VTBL_ENTRY _ZTI7S7676C6[];
extern  VTBL_ENTRY _ZTV7S7676C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C6[];
Class_Descriptor cd_S7676C6 = {  "S7676C6", // class name
  bases_S7676C6, 6,
  &(vtc_S7676C6[0]), // expected_vtbl_contents
  &(vtt_S7676C6[0]), // expected_vtt_contents
  ABISELECT(208,116), // object size
  NSPAIRA(_ZTI7S7676C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7676C6),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7676C6),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C11  {
  int s7676c11f0[9];
  virtual void  v25(); // _ZN8S7676C113v25Ev
  ~S7676C11(); // tgen
  S7676C11(); // tgen
};
//SIG(-1 S7676C11) C1{ v1 Fi[9]}


void  S7676C11 ::v25(){vfunc_called(this, "_ZN8S7676C113v25Ev");}
S7676C11 ::~S7676C11(){ note_dtor("S7676C11", this);} // tgen
S7676C11 ::S7676C11(){ note_ctor("S7676C11", this);} // tgen

static void Test_S7676C11()
{
  extern Class_Descriptor cd_S7676C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S7676C11, buf);
    S7676C11 *dp, &lv = *(dp=new (buf) S7676C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S7676C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7676C11)");
    check_field_offset(lv, s7676c11f0, ABISELECT(8,4), "S7676C11.s7676c11f0");
    test_class_info(&lv, &cd_S7676C11);
    dp->~S7676C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C11(Test_S7676C11, "S7676C11", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S7676C11C1Ev();
extern void _ZN8S7676C11D1Ev();
Name_Map name_map_S7676C11[] = {
  NSPAIR(_ZN8S7676C11C1Ev),
  NSPAIR(_ZN8S7676C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7676C11[];
extern void _ZN8S7676C113v25Ev();
static  VTBL_ENTRY vtc_S7676C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C11[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
};
extern VTBL_ENTRY _ZTI8S7676C11[];
extern  VTBL_ENTRY _ZTV8S7676C11[];
Class_Descriptor cd_S7676C11 = {  "S7676C11", // class name
  0,0,//no base classes
  &(vtc_S7676C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S7676C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7676C11),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  S7676C10  : S7676C11 , S7676C8_nt {
  long double s7676c10f0;
  virtual void  v26(); // _ZN8S7676C103v26Ev
  virtual void  v27(); // _ZN8S7676C103v27Ev
  virtual void  v28(); // _ZN8S7676C103v28Ev
  virtual void  v29(); // _ZN8S7676C103v29Ev
  ~S7676C10(); // tgen
  S7676C10(); // tgen
};
//SIG(-1 S7676C10) C1{ BC2{ v5 Fi[9]} BC3{ v6} v1 v2 v3 v4 FD}


void  S7676C10 ::v26(){vfunc_called(this, "_ZN8S7676C103v26Ev");}
void  S7676C10 ::v27(){vfunc_called(this, "_ZN8S7676C103v27Ev");}
void  S7676C10 ::v28(){vfunc_called(this, "_ZN8S7676C103v28Ev");}
void  S7676C10 ::v29(){vfunc_called(this, "_ZN8S7676C103v29Ev");}
S7676C10 ::~S7676C10(){ note_dtor("S7676C10", this);} // tgen
S7676C10 ::S7676C10(){ note_ctor("S7676C10", this);} // tgen

static void Test_S7676C10()
{
  extern Class_Descriptor cd_S7676C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,15)];
    init_test(&cd_S7676C10, buf);
    S7676C10 *dp, &lv = *(dp=new (buf) S7676C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S7676C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C10)");
    check_base_class_offset(lv, (S7676C11*), 0, "S7676C10");
    check_base_class_offset(lv, (S7676C8_nt*), ABISELECT(48,40), "S7676C10");
    check_field_offset(lv, s7676c10f0, ABISELECT(64,44), "S7676C10.s7676c10f0");
    test_class_info(&lv, &cd_S7676C10);
    dp->~S7676C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C10(Test_S7676C10, "S7676C10", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S7676C10C1Ev();
extern void _ZN8S7676C10D1Ev();
Name_Map name_map_S7676C10[] = {
  NSPAIR(_ZN8S7676C10C1Ev),
  NSPAIR(_ZN8S7676C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C11;
extern VTBL_ENTRY _ZTI8S7676C11[];
extern  VTBL_ENTRY _ZTV8S7676C11[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
static Base_Class bases_S7676C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7676C8_nt,    ABISELECT(48,40), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7676C10[];
extern void _ZN8S7676C113v25Ev();
extern void _ZN8S7676C103v26Ev();
extern void _ZN8S7676C103v27Ev();
extern void _ZN8S7676C103v28Ev();
extern void _ZN8S7676C103v29Ev();
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY vtc_S7676C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C10[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v26Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v29Ev,
  ABISELECT(-48,-40),
  (VTBL_ENTRY)&(_ZTI8S7676C10[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI8S7676C10[];
extern  VTBL_ENTRY _ZTV8S7676C10[];
Class_Descriptor cd_S7676C10 = {  "S7676C10", // class name
  bases_S7676C10, 2,
  &(vtc_S7676C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S7676C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7676C10),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C12  {
  void *s7676c12f0;
  virtual void  v30(); // _ZN8S7676C123v30Ev
  virtual void  v31(); // _ZN8S7676C123v31Ev
  ~S7676C12(); // tgen
  S7676C12(); // tgen
};
//SIG(-1 S7676C12) C1{ v1 v2 Fp}


void  S7676C12 ::v30(){vfunc_called(this, "_ZN8S7676C123v30Ev");}
void  S7676C12 ::v31(){vfunc_called(this, "_ZN8S7676C123v31Ev");}
S7676C12 ::~S7676C12(){ note_dtor("S7676C12", this);} // tgen
S7676C12 ::S7676C12(){ note_ctor("S7676C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7676C12C1Ev();
extern void _ZN8S7676C12D1Ev();
Name_Map name_map_S7676C12[] = {
  NSPAIR(_ZN8S7676C12C1Ev),
  NSPAIR(_ZN8S7676C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7676C12[];
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
static  VTBL_ENTRY vtc_S7676C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C12[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
};
extern VTBL_ENTRY _ZTI8S7676C12[];
extern  VTBL_ENTRY _ZTV8S7676C12[];
Class_Descriptor cd_S7676C12 = {  "S7676C12", // class name
  0,0,//no base classes
  &(vtc_S7676C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7676C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7676C12),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  S7676C13  : virtual S7676C9 , virtual S7676C7 {
  int s7676c13f0:4;
  virtual void  v32(); // _ZN8S7676C133v32Ev
  ~S7676C13(); // tgen
  S7676C13(); // tgen
};
//SIG(-1 S7676C13) C1{ VBC2{ v2 v3 v4 v5 Fp Fc} VBC3{ VBC4{ v6 v7 Fp} BC5{ VBC4 vd v8 v9 Fp} BC6{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} v1 Fi:4}


void  S7676C13 ::v32(){vfunc_called(this, "_ZN8S7676C133v32Ev");}
S7676C13 ::~S7676C13(){ note_dtor("S7676C13", this);} // tgen
S7676C13 ::S7676C13(){ note_ctor("S7676C13", this);} // tgen

static void Test_S7676C13()
{
  extern Class_Descriptor cd_S7676C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,28)];
    init_test(&cd_S7676C13, buf);
    S7676C13 *dp, &lv = *(dp=new (buf) S7676C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S7676C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C13)");
    check_base_class_offset(lv, (S7676C9*), ABISELECT(16,8), "S7676C13");
    check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(184,100), "S7676C13");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(184,100), "S7676C13");
    check_base_class_offset(lv, (S7676C2*)(S7676C7*), ABISELECT(48,20), "S7676C13");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(64,28), "S7676C13");
    check_base_class_offset(lv, (S7676C7*), ABISELECT(48,20), "S7676C13");
    set_bf_and_test(lv, s7676c13f0, ABISELECT(8,4), 0, 4, 1, "S7676C13");
    set_bf_and_test(lv, s7676c13f0, ABISELECT(8,4), 0, 4, hide_sll(1LL<<3), "S7676C13");
    test_class_info(&lv, &cd_S7676C13);
    dp->~S7676C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C13(Test_S7676C13, "S7676C13", ABISELECT(208,108));

#else // __cplusplus

extern void _ZN8S7676C13C1Ev();
extern void _ZN8S7676C13D1Ev();
Name_Map name_map_S7676C13[] = {
  NSPAIR(_ZN8S7676C13C1Ev),
  NSPAIR(_ZN8S7676C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C9;
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
static Base_Class bases_S7676C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C3,    ABISELECT(184,100), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(64,28), //bcp->offset
    35, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(48,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7676C13[];
extern void _ZN8S7676C133v32Ev();
extern void _ZN8S7676C13D1Ev();
extern void _ZN8S7676C13D0Ev();
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
extern void ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S7676C13D1Ev,_ZThn20_N8S7676C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S7676C13D0Ev,_ZThn20_N8S7676C13D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY vtc_S7676C13[] = {
  ABISELECT(184,100),
  ABISELECT(48,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  ABISELECT(136,80),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern VTBL_ENTRY _ZTV8S7676C13[];
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C13[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__8S7676C13[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C13[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__8S7676C13[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
static  VTT_ENTRY vtt_S7676C13[] = {
  {&(_ZTV8S7676C13[5]),  5,44},
  {&(_ZTV8S7676C13[14]),  14,44},
  {&(_ZTV8S7676C13[28]),  28,44},
  {&(_ZTV8S7676C13[42]),  42,44},
  {&(_ZTV8S7676C13[37]),  37,44},
  {&(_tg__ZTV7S7676C7__8S7676C13[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__8S7676C13[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C13[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__8S7676C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7676C13[];
extern  VTBL_ENTRY _ZTV8S7676C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C13[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C13D0Ev,_ZThn20_N8S7676C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C13D1Ev,_ZThn20_N8S7676C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7676C13 = {  "S7676C13", // class name
  bases_S7676C13, 5,
  &(vtc_S7676C13[0]), // expected_vtbl_contents
  &(vtt_S7676C13[0]), // expected_vtt_contents
  ABISELECT(208,108), // object size
  NSPAIRA(_ZTI8S7676C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7676C13),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7676C13),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S7676C14_nt  {
  void  mf7676c14(); // _ZN11S7676C14_nt9mf7676c14Ev
};
//SIG(1 S7676C14_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7676C5  : virtual S7676C6 , S7676C8_nt , S7676C10 , virtual S7676C12 , virtual S7676C13 {
  ::S7676C14_nt s7676c5f0[9];
  virtual  ~S7676C5(); // _ZN7S7676C5D2Ev
  virtual void  v33(); // _ZN7S7676C53v33Ev
  virtual void  v34(); // _ZN7S7676C53v34Ev
  virtual void  v35(); // _ZN7S7676C53v35Ev
  S7676C5(); // tgen
};
//SIG(-1 S7676C5) C1{ VBC2{ VBC3{ v4 v5 Fp} BC4{ VBC3 BC5{ VBC3 vd v6 v7 Fp} BC6{ v8} vd v9 v10 v11 FL Fi Fp[8] Fi[2] FD Fi} BC6 VBC7{ v12 v13 v14 v15 Fp Fc} v16 v17 v18 v19 v20 FD} BC6 BC8{ BC9{ v21 Fi[9]} BC6 v22 v23 v24 v25 FD} VBC10{ v26 v27 Fp} VBC11{ VBC7 VBC4 v28 Fi:4} vd v1 v2 v3 FU12{ m}[9]}


 S7676C5 ::~S7676C5(){ note_dtor("S7676C5", this);}
void  S7676C5 ::v33(){vfunc_called(this, "_ZN7S7676C53v33Ev");}
void  S7676C5 ::v34(){vfunc_called(this, "_ZN7S7676C53v34Ev");}
void  S7676C5 ::v35(){vfunc_called(this, "_ZN7S7676C53v35Ev");}
S7676C5 ::S7676C5(){ note_ctor("S7676C5", this);} // tgen

static void Test_S7676C5()
{
  extern Class_Descriptor cd_S7676C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,72)];
    init_test(&cd_S7676C5, buf);
    S7676C5 *dp, &lv = *(dp=new (buf) S7676C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,284), "sizeof(S7676C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C5)");
    check_base_class_offset(lv, (S7676C3*)(S7676C6*), ABISELECT(272,168), "S7676C5");
    check_base_class_offset(lv, (S7676C3*)(S7676C7*)(S7676C6*), ABISELECT(272,168), "S7676C5");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*)(S7676C6*), ABISELECT(272,168), "S7676C5");
    /*is_ambiguous_... S7676C5::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(272,168), "S7676C5");
    /*is_ambiguous_... S7676C5::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(272,168), "S7676C5");
    check_base_class_offset(lv, (S7676C2*)(S7676C7*)(S7676C6*), ABISELECT(112,72), "S7676C5");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*)(S7676C6*), ABISELECT(128,80), "S7676C5");
    check_base_class_offset(lv, (S7676C7*)(S7676C6*), ABISELECT(112,72), "S7676C5");
    /*is_ambiguous_... S7676C6::S7676C8_nt */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C6*), ABISELECT(248,152), "S7676C5");
    check_base_class_offset(lv, (S7676C9*)(S7676C6*), ABISELECT(288,176), "S7676C5");
    check_base_class_offset(lv, (S7676C9*)(S7676C13*), ABISELECT(288,176), "S7676C5");
    check_base_class_offset(lv, (S7676C6*), ABISELECT(112,72), "S7676C5");
    /*is_ambiguous_... S7676C5::S7676C8_nt */ AMB_check_base_class_offset(lv, (S7676C8_nt*), 0, "S7676C5");
    check_base_class_offset(lv, (S7676C11*)(S7676C10*), ABISELECT(16,4), "S7676C5");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C10*), ABISELECT(64,44), "S7676C5");
    check_base_class_offset(lv, (S7676C10*), ABISELECT(16,4), "S7676C5");
    check_base_class_offset(lv, (S7676C12*), ABISELECT(312,188), "S7676C5");
    /*is_ambiguous_... S7676C5::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C7*), ABISELECT(352,204), "S7676C5");
    /*is_ambiguous_... S7676C5::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(368,212), "S7676C5");
    check_base_class_offset(lv, (S7676C7*)(S7676C13*), ABISELECT(352,204), "S7676C5");
    check_base_class_offset(lv, (S7676C13*), ABISELECT(328,196), "S7676C5");
    check_field_offset(lv, s7676c5f0, ABISELECT(96,60), "S7676C5.s7676c5f0");
    test_class_info(&lv, &cd_S7676C5);
    dp->~S7676C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C5(Test_S7676C5, "S7676C5", ABISELECT(496,284));

#else // __cplusplus

extern void _ZN7S7676C5C1Ev();
extern void _ZN7S7676C5D2Ev();
Name_Map name_map_S7676C5[] = {
  NSPAIR(_ZN7S7676C5C1Ev),
  NSPAIR(_ZN7S7676C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C9;
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
extern Class_Descriptor cd_S7676C6;
extern VTBL_ENTRY _ZTI7S7676C6[];
extern  VTBL_ENTRY _ZTV7S7676C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C6[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C11;
extern VTBL_ENTRY _ZTI8S7676C11[];
extern  VTBL_ENTRY _ZTV8S7676C11[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C10;
extern VTBL_ENTRY _ZTI8S7676C10[];
extern  VTBL_ENTRY _ZTV8S7676C10[];
extern Class_Descriptor cd_S7676C12;
extern VTBL_ENTRY _ZTI8S7676C12[];
extern  VTBL_ENTRY _ZTV8S7676C12[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C13;
extern VTBL_ENTRY _ZTI8S7676C13[];
extern  VTBL_ENTRY _ZTV8S7676C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C13[];
static Base_Class bases_S7676C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    ABISELECT(272,168), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(128,80), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(248,152), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7676C9,    ABISELECT(288,176), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7676C6,    ABISELECT(112,72), //bcp->offset
    24, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7676C11,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(64,44), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7676C10,    ABISELECT(16,4), //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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7676C12,    ABISELECT(312,188), //bcp->offset
    74, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C2,    ABISELECT(352,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(368,212), //bcp->offset
    107, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(352,204), //bcp->offset
    90, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7676C13,    ABISELECT(328,196), //bcp->offset
    80, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7676C5[];
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C5D1Ev();
extern void _ZN7S7676C5D0Ev();
extern void _ZN7S7676C53v33Ev();
extern void _ZN7S7676C53v34Ev();
extern void _ZN7S7676C53v35Ev();
extern void _ZN8S7676C113v25Ev();
extern void _ZN8S7676C103v26Ev();
extern void _ZN8S7676C103v27Ev();
extern void _ZN8S7676C103v28Ev();
extern void _ZN8S7676C103v29Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn112_N7S7676C5D1Ev,_ZThn72_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn112_N7S7676C5D0Ev,_ZThn72_N7S7676C5D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn328_N7S7676C5D1Ev,_ZThn196_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn328_N7S7676C5D0Ev,_ZThn196_N7S7676C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn352_N7S7676C5D1Ev,_ZThn204_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn352_N7S7676C5D0Ev,_ZThn204_N7S7676C5D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY vtc_S7676C5[] = {
  ABISELECT(352,204),
  ABISELECT(328,196),
  ABISELECT(312,188),
  ABISELECT(288,176),
  ABISELECT(272,168),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7676C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v33Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v34Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v35Ev,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v26Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v29Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-72),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
  0,
  0,
  ABISELECT(-312,-188),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
  ABISELECT(-328,-196),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-328,-196),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-204),
  ABISELECT(-80,-36),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern VTBL_ENTRY _ZTV7S7676C5[];
extern void _ZN7S7676C6D1Ev();
extern void _ZN7S7676C6D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C6__7S7676C5[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C77S7676C6__7S7676C5[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C77S7676C6__7S7676C5[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C77S7676C6__7S7676C5[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C77S7676C6__7S7676C5[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C6__7S7676C5[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__7S7676C6__7S7676C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void _ZN8S7676C133v32Ev();
extern void _ZN8S7676C13D1Ev();
extern void _ZN8S7676C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C13__7S7676C5[] = {
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D0Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__8S7676C13__7S7676C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S7676C13D1Ev,_ZThn8_N8S7676C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S7676C13D0Ev,_ZThn8_N8S7676C13D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C13__7S7676C5[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  ABISELECT(-80,-36),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__8S7676C13__7S7676C5[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__7S7676C5[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__7S7676C5[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__A1__7S7676C5[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__A1__7S7676C5[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__A1__7S7676C5[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
static  VTT_ENTRY vtt_S7676C5[] = {
  {&(_ZTV7S7676C5[8]),  8,110},
  {&(_ZTV7S7676C5[40]),  40,110},
  {&(_ZTV7S7676C5[62]),  62,110},
  {&(_ZTV7S7676C5[54]),  54,110},
  {&(_ZTV7S7676C5[57]),  57,110},
  {&(_ZTV7S7676C5[70]),  70,110},
  {&(_ZTV7S7676C5[78]),  78,110},
  {&(_ZTV7S7676C5[87]),  87,110},
  {&(_ZTV7S7676C5[100]),  100,110},
  {&(_ZTV7S7676C5[109]),  109,110},
  {&(_tg__ZTV7S7676C6__7S7676C5[4]),  4,16},
  {&(_tg__ZTV7S7676C77S7676C6__7S7676C5[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C77S7676C6__7S7676C5[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C77S7676C6__7S7676C5[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C77S7676C6__7S7676C5[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C6__7S7676C5[4]),  4,6},
  {&(_tg__ZTV7S7676C9__7S7676C6__7S7676C5[6]),  6,10},
  {&(_tg__ZTV8S7676C13__7S7676C5[5]),  5,8},
  {&(_tg__ZTV7S7676C9__8S7676C13__7S7676C5[6]),  6,10},
  {&(_tg__ZTV7S7676C7__8S7676C13__7S7676C5[10]),  10,17},
  {&(_tg__ZTV7S7676C3__8S7676C13__7S7676C5[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__7S7676C5[2]),  2,3},
  {&(_tg__ZTV7S7676C7__A1__7S7676C5[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__A1__7S7676C5[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__A1__7S7676C5[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__A1__7S7676C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7676C5[];
extern  VTBL_ENTRY _ZTV7S7676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C5[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7676C13D0Ev,_ZThn8_N8S7676C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7676C13D1Ev,_ZThn8_N8S7676C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7676C5D0Ev,_ZThn204_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7676C5D1Ev,_ZThn204_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7676C5D0Ev,_ZThn196_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7676C5D1Ev,_ZThn196_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7676C5D0Ev,_ZThn72_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7676C5D1Ev,_ZThn72_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7676C5 = {  "S7676C5", // class name
  bases_S7676C5, 16,
  &(vtc_S7676C5[0]), // expected_vtbl_contents
  &(vtt_S7676C5[0]), // expected_vtt_contents
  ABISELECT(496,284), // object size
  NSPAIRA(_ZTI7S7676C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7676C5),110, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7676C5),26, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C4  : S7676C5 {
  void *s7676c4f0;
  virtual  ~S7676C4(); // _ZN7S7676C4D2Ev
  virtual void  v36(); // _ZN7S7676C43v36Ev
  virtual void  v37(); // _ZN7S7676C43v37Ev
  virtual void  v38(); // _ZN7S7676C43v38Ev
  virtual void  v39(); // _ZN7S7676C43v39Ev
  virtual void  v40(); // _ZN7S7676C43v40Ev
  S7676C4(); // tgen
};
//SIG(-1 S7676C4) C1{ BC2{ VBC3{ VBC4{ v6 v7 Fp} BC5{ VBC4 BC6{ VBC4 vd v8 v9 Fp} BC7{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} BC7 VBC8{ v14 v15 v16 v17 Fp Fc} v18 v19 v20 v21 v22 FD} BC7 BC9{ BC10{ v23 Fi[9]} BC7 v24 v25 v26 v27 FD} VBC11{ v28 v29 Fp} VBC12{ VBC8 VBC5 v30 Fi:4} vd v31 v32 v33 FU13{ m}[9]} vd v1 v2 v3 v4 v5 Fp}


 S7676C4 ::~S7676C4(){ note_dtor("S7676C4", this);}
void  S7676C4 ::v36(){vfunc_called(this, "_ZN7S7676C43v36Ev");}
void  S7676C4 ::v37(){vfunc_called(this, "_ZN7S7676C43v37Ev");}
void  S7676C4 ::v38(){vfunc_called(this, "_ZN7S7676C43v38Ev");}
void  S7676C4 ::v39(){vfunc_called(this, "_ZN7S7676C43v39Ev");}
void  S7676C4 ::v40(){vfunc_called(this, "_ZN7S7676C43v40Ev");}
S7676C4 ::S7676C4(){ note_ctor("S7676C4", this);} // tgen

static void Test_S7676C4()
{
  extern Class_Descriptor cd_S7676C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,73)];
    init_test(&cd_S7676C4, buf);
    S7676C4 *dp, &lv = *(dp=new (buf) S7676C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,288), "sizeof(S7676C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C4)");
    check_base_class_offset(lv, (S7676C3*)(S7676C6*), ABISELECT(288,172), "S7676C4");
    check_base_class_offset(lv, (S7676C3*)(S7676C7*)(S7676C6*), ABISELECT(288,172), "S7676C4");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*)(S7676C6*), ABISELECT(288,172), "S7676C4");
    /*is_ambiguous_... S7676C4::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(288,172), "S7676C4");
    /*is_ambiguous_... S7676C4::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(288,172), "S7676C4");
    check_base_class_offset(lv, (S7676C2*)(S7676C7*)(S7676C6*), ABISELECT(128,76), "S7676C4");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*)(S7676C6*), ABISELECT(144,84), "S7676C4");
    check_base_class_offset(lv, (S7676C7*)(S7676C6*), ABISELECT(128,76), "S7676C4");
    /*is_ambiguous_... S7676C6::S7676C8_nt */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C6*), ABISELECT(264,156), "S7676C4");
    check_base_class_offset(lv, (S7676C9*)(S7676C6*), ABISELECT(304,180), "S7676C4");
    check_base_class_offset(lv, (S7676C9*)(S7676C13*), ABISELECT(304,180), "S7676C4");
    check_base_class_offset(lv, (S7676C6*)(S7676C5*), ABISELECT(128,76), "S7676C4");
    /*is_ambiguous_... S7676C5::S7676C8_nt */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C5*), 0, "S7676C4");
    check_base_class_offset(lv, (S7676C11*)(S7676C10*)(S7676C5*), ABISELECT(16,4), "S7676C4");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C10*)(S7676C5*), ABISELECT(64,44), "S7676C4");
    check_base_class_offset(lv, (S7676C10*)(S7676C5*), ABISELECT(16,4), "S7676C4");
    check_base_class_offset(lv, (S7676C12*)(S7676C5*), ABISELECT(328,192), "S7676C4");
    /*is_ambiguous_... S7676C4::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C7*), ABISELECT(368,208), "S7676C4");
    /*is_ambiguous_... S7676C4::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(384,216), "S7676C4");
    check_base_class_offset(lv, (S7676C7*)(S7676C13*), ABISELECT(368,208), "S7676C4");
    check_base_class_offset(lv, (S7676C13*)(S7676C5*), ABISELECT(344,200), "S7676C4");
    check_base_class_offset(lv, (S7676C5*), 0, "S7676C4");
    check_field_offset(lv, s7676c4f0, ABISELECT(112,72), "S7676C4.s7676c4f0");
    test_class_info(&lv, &cd_S7676C4);
    dp->~S7676C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C4(Test_S7676C4, "S7676C4", ABISELECT(512,288));

#else // __cplusplus

extern void _ZN7S7676C4C1Ev();
extern void _ZN7S7676C4D2Ev();
Name_Map name_map_S7676C4[] = {
  NSPAIR(_ZN7S7676C4C1Ev),
  NSPAIR(_ZN7S7676C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C9;
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
extern Class_Descriptor cd_S7676C6;
extern VTBL_ENTRY _ZTI7S7676C6[];
extern  VTBL_ENTRY _ZTV7S7676C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C6[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C11;
extern VTBL_ENTRY _ZTI8S7676C11[];
extern  VTBL_ENTRY _ZTV8S7676C11[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C10;
extern VTBL_ENTRY _ZTI8S7676C10[];
extern  VTBL_ENTRY _ZTV8S7676C10[];
extern Class_Descriptor cd_S7676C12;
extern VTBL_ENTRY _ZTI8S7676C12[];
extern  VTBL_ENTRY _ZTV8S7676C12[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C13;
extern VTBL_ENTRY _ZTI8S7676C13[];
extern  VTBL_ENTRY _ZTV8S7676C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C13[];
extern Class_Descriptor cd_S7676C5;
extern VTBL_ENTRY _ZTI7S7676C5[];
extern  VTBL_ENTRY _ZTV7S7676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C5[];
static Base_Class bases_S7676C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    ABISELECT(288,172), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(144,84), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(264,156), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7676C9,    ABISELECT(304,180), //bcp->offset
    69, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7676C6,    ABISELECT(128,76), //bcp->offset
    29, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7676C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S7676C11,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(64,44), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7676C10,    ABISELECT(16,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7676C12,    ABISELECT(328,192), //bcp->offset
    79, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(368,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(384,216), //bcp->offset
    112, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(368,208), //bcp->offset
    95, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7676C13,    ABISELECT(344,200), //bcp->offset
    85, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7676C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7676C4[];
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C4D1Ev();
extern void _ZN7S7676C4D0Ev();
extern void _ZN7S7676C53v33Ev();
extern void _ZN7S7676C53v34Ev();
extern void _ZN7S7676C53v35Ev();
extern void _ZN7S7676C43v36Ev();
extern void _ZN7S7676C43v37Ev();
extern void _ZN7S7676C43v38Ev();
extern void _ZN7S7676C43v39Ev();
extern void _ZN7S7676C43v40Ev();
extern void _ZN8S7676C113v25Ev();
extern void _ZN8S7676C103v26Ev();
extern void _ZN8S7676C103v27Ev();
extern void _ZN8S7676C103v28Ev();
extern void _ZN8S7676C103v29Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S7676C4D1Ev,_ZTv0_n20_N7S7676C4D1Ev)();
extern void ABISELECT(_ZThn128_N7S7676C4D1Ev,_ZThn76_N7S7676C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7676C4D0Ev,_ZTv0_n20_N7S7676C4D0Ev)();
extern void ABISELECT(_ZThn128_N7S7676C4D0Ev,_ZThn76_N7S7676C4D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7676C4D1Ev,_ZTv0_n28_N7S7676C4D1Ev)();
extern void ABISELECT(_ZThn344_N7S7676C4D1Ev,_ZThn200_N7S7676C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7676C4D0Ev,_ZTv0_n28_N7S7676C4D0Ev)();
extern void ABISELECT(_ZThn344_N7S7676C4D0Ev,_ZThn200_N7S7676C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C4D1Ev,_ZTv0_n16_N7S7676C4D1Ev)();
extern void ABISELECT(_ZThn368_N7S7676C4D1Ev,_ZThn208_N7S7676C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C4D0Ev,_ZTv0_n16_N7S7676C4D0Ev)();
extern void ABISELECT(_ZThn368_N7S7676C4D0Ev,_ZThn208_N7S7676C4D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY vtc_S7676C4[] = {
  ABISELECT(368,208),
  ABISELECT(344,200),
  ABISELECT(328,192),
  ABISELECT(304,180),
  ABISELECT(288,172),
  ABISELECT(128,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7676C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v33Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v34Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v35Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v36Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v37Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v38Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v39Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v40Ev,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v26Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v29Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C4D1Ev,_ZTv0_n20_N7S7676C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C4D0Ev,_ZTv0_n20_N7S7676C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
  0,
  0,
  ABISELECT(-328,-192),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
  ABISELECT(-344,-200),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-344,-200),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C4D1Ev,_ZTv0_n28_N7S7676C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C4D0Ev,_ZTv0_n28_N7S7676C4D0Ev),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-208),
  ABISELECT(-80,-36),
  ABISELECT(-368,-208),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C4D1Ev,_ZTv0_n16_N7S7676C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C4D0Ev,_ZTv0_n16_N7S7676C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern VTBL_ENTRY _ZTV7S7676C4[];
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C5D1Ev();
extern void _ZN7S7676C5D0Ev();
extern void _ZN7S7676C53v33Ev();
extern void _ZN7S7676C53v34Ev();
extern void _ZN7S7676C53v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C5__7S7676C4[] = {
  ABISELECT(368,208),
  ABISELECT(344,200),
  ABISELECT(328,192),
  ABISELECT(304,180),
  ABISELECT(288,172),
  ABISELECT(128,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7676C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v33Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v34Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v35Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn128_N7S7676C5D1Ev,_ZThn76_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn128_N7S7676C5D0Ev,_ZThn76_N7S7676C5D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C6__7S7676C5__7S7676C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C5__7S7676C4[] = {
  0,
  0,
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C77S7676C6__7S7676C5__7S7676C4[] = {
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C6__A1__7S7676C5__7S7676C4[] = {
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__7S7676C5__7S7676C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C12__7S7676C5__7S7676C4[] = {
  0,
  0,
  ABISELECT(-328,-192),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
};
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn344_N7S7676C5D1Ev,_ZThn200_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn344_N7S7676C5D0Ev,_ZThn200_N7S7676C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7676C13__7S7676C5__7S7676C4[] = {
  ABISELECT(-344,-200),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-344,-200),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn368_N7S7676C5D1Ev,_ZThn208_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn368_N7S7676C5D0Ev,_ZThn208_N7S7676C5D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__7S7676C5__7S7676C4[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-208),
  ABISELECT(-80,-36),
  ABISELECT(-368,-208),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__A4__7S7676C5__7S7676C4[] = {
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C6D1Ev();
extern void _ZN7S7676C6D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C6__7S7676C4[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C77S7676C6__7S7676C4[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C77S7676C6__7S7676C4[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C77S7676C6__7S7676C4[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C77S7676C6__7S7676C4[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C6__7S7676C4[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__7S7676C6__7S7676C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void _ZN8S7676C133v32Ev();
extern void _ZN8S7676C13D1Ev();
extern void _ZN8S7676C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C13__7S7676C4[] = {
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D0Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__8S7676C13__7S7676C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S7676C13D1Ev,_ZThn8_N8S7676C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S7676C13D0Ev,_ZThn8_N8S7676C13D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C13__7S7676C4[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  ABISELECT(-80,-36),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__8S7676C13__7S7676C4[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__7S7676C4[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__7S7676C4[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__A1__7S7676C4[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__A1__7S7676C4[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__A1__7S7676C4[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
static  VTT_ENTRY vtt_S7676C4[] = {
  {&(_ZTV7S7676C4[8]),  8,115},
  {&(_tg__ZTV7S7676C5__7S7676C4[8]),  8,14},
  {&(_tg__ZTV7S7676C6__7S7676C5__7S7676C4[16]),  16,28},
  {&(_tg__ZTV7S7676C3__7S7676C5__7S7676C4[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C77S7676C6__7S7676C5__7S7676C4[2]),  2,3},
  {&(_tg__ZTV10S7676C8_nt7S7676C6__A1__7S7676C5__7S7676C4[2]),  2,3},
  {&(_tg__ZTV7S7676C9__7S7676C5__7S7676C4[6]),  6,10},
  {&(_tg__ZTV8S7676C12__7S7676C5__7S7676C4[4]),  4,6},
  {&(_tg__ZTV8S7676C13__7S7676C5__7S7676C4[7]),  7,10},
  {&(_tg__ZTV7S7676C7__A1__7S7676C5__7S7676C4[10]),  10,17},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__A4__7S7676C5__7S7676C4[2]),  2,3},
  {&(_ZTV7S7676C4[45]),  45,115},
  {&(_ZTV7S7676C4[67]),  67,115},
  {&(_ZTV7S7676C4[59]),  59,115},
  {&(_ZTV7S7676C4[62]),  62,115},
  {&(_ZTV7S7676C4[75]),  75,115},
  {&(_ZTV7S7676C4[83]),  83,115},
  {&(_ZTV7S7676C4[92]),  92,115},
  {&(_ZTV7S7676C4[105]),  105,115},
  {&(_ZTV7S7676C4[114]),  114,115},
  {&(_tg__ZTV7S7676C6__7S7676C4[4]),  4,16},
  {&(_tg__ZTV7S7676C77S7676C6__7S7676C4[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C77S7676C6__7S7676C4[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C77S7676C6__7S7676C4[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C77S7676C6__7S7676C4[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C6__7S7676C4[4]),  4,6},
  {&(_tg__ZTV7S7676C9__7S7676C6__7S7676C4[6]),  6,10},
  {&(_tg__ZTV8S7676C13__7S7676C4[5]),  5,8},
  {&(_tg__ZTV7S7676C9__8S7676C13__7S7676C4[6]),  6,10},
  {&(_tg__ZTV7S7676C7__8S7676C13__7S7676C4[10]),  10,17},
  {&(_tg__ZTV7S7676C3__8S7676C13__7S7676C4[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__7S7676C4[2]),  2,3},
  {&(_tg__ZTV7S7676C7__A1__7S7676C4[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__A1__7S7676C4[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__A1__7S7676C4[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__A1__7S7676C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7676C4[];
extern  VTBL_ENTRY _ZTV7S7676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C4[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7676C13D0Ev,_ZThn8_N8S7676C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7676C13D1Ev,_ZThn8_N8S7676C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7676C5D0Ev,_ZThn208_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7676C5D1Ev,_ZThn208_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7676C5D0Ev,_ZThn200_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7676C5D1Ev,_ZThn200_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C5D0Ev,_ZThn76_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C5D1Ev,_ZThn76_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C4D0Ev,_ZTv0_n16_N7S7676C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7676C4D0Ev,_ZThn208_N7S7676C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C4D1Ev,_ZTv0_n16_N7S7676C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7676C4D1Ev,_ZThn208_N7S7676C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C4D0Ev,_ZTv0_n28_N7S7676C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7676C4D0Ev,_ZThn200_N7S7676C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C4D1Ev,_ZTv0_n28_N7S7676C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7676C4D1Ev,_ZThn200_N7S7676C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C4D0Ev,_ZTv0_n20_N7S7676C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C4D0Ev,_ZThn76_N7S7676C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C4D1Ev,_ZTv0_n20_N7S7676C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C4D1Ev,_ZThn76_N7S7676C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7676C4 = {  "S7676C4", // class name
  bases_S7676C4, 17,
  &(vtc_S7676C4[0]), // expected_vtbl_contents
  &(vtt_S7676C4[0]), // expected_vtt_contents
  ABISELECT(512,288), // object size
  NSPAIRA(_ZTI7S7676C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7676C4),115, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7676C4),36, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C16  : S7676C3 , virtual S7676C7 , S7676C2 {
  char s7676c16f0;
  int s7676c16f1;
  virtual  ~S7676C16(); // _ZN8S7676C16D2Ev
  virtual void  v41(); // _ZN8S7676C163v41Ev
  virtual void  v42(); // _ZN8S7676C163v42Ev
  virtual void  v43(); // _ZN8S7676C163v43Ev
  virtual void  v44(); // _ZN8S7676C163v44Ev
  S7676C16(); // tgen
};
//SIG(-1 S7676C16) C1{ BC2{ v5 v6 Fp} VBC3{ VBC2 BC4{ VBC2 vd v7 v8 Fp} BC5{ v9} vd v10 v11 v12 FL Fi Fp[8] Fi[2] FD Fi} BC4 vd v1 v2 v3 v4 Fc Fi}


 S7676C16 ::~S7676C16(){ note_dtor("S7676C16", this);}
void  S7676C16 ::v41(){vfunc_called(this, "_ZN8S7676C163v41Ev");}
void  S7676C16 ::v42(){vfunc_called(this, "_ZN8S7676C163v42Ev");}
void  S7676C16 ::v43(){vfunc_called(this, "_ZN8S7676C163v43Ev");}
void  S7676C16 ::v44(){vfunc_called(this, "_ZN8S7676C163v44Ev");}
S7676C16 ::S7676C16(){ note_ctor("S7676C16", this);} // tgen

static void Test_S7676C16()
{
  extern Class_Descriptor cd_S7676C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,29)];
    init_test(&cd_S7676C16, buf);
    S7676C16 *dp, &lv = *(dp=new (buf) S7676C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S7676C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C16)");
    /*is_ambiguous_... S7676C16::S7676C3 */ AMB_check_base_class_offset(lv, (S7676C3*), 0, "S7676C16");
    check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(184,104), "S7676C16");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(184,104), "S7676C16");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*), ABISELECT(184,104), "S7676C16");
    check_base_class_offset(lv, (S7676C2*)(S7676C7*), ABISELECT(48,24), "S7676C16");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(64,32), "S7676C16");
    check_base_class_offset(lv, (S7676C7*), ABISELECT(48,24), "S7676C16");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C2*), ABISELECT(16,8), "S7676C16");
    check_field_offset(lv, s7676c16f0, ABISELECT(32,16), "S7676C16.s7676c16f0");
    check_field_offset(lv, s7676c16f1, ABISELECT(36,20), "S7676C16.s7676c16f1");
    test_class_info(&lv, &cd_S7676C16);
    dp->~S7676C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C16(Test_S7676C16, "S7676C16", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN8S7676C16C1Ev();
extern void _ZN8S7676C16D2Ev();
Name_Map name_map_S7676C16[] = {
  NSPAIR(_ZN8S7676C16C1Ev),
  NSPAIR(_ZN8S7676C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
static Base_Class bases_S7676C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7676C3,    ABISELECT(184,104), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(64,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(48,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C2,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7676C16[];
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN8S7676C16D1Ev();
extern void _ZN8S7676C16D0Ev();
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
extern void ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev)();
extern void ABISELECT(_ZThn48_N8S7676C16D1Ev,_ZThn24_N8S7676C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev)();
extern void ABISELECT(_ZThn48_N8S7676C16D0Ev,_ZThn24_N8S7676C16D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY vtc_S7676C16[] = {
  ABISELECT(184,104),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
  ABISELECT(168,96),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(136,80),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern VTBL_ENTRY _ZTV8S7676C16[];
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A1__8S7676C16[] = {
  ABISELECT(168,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C2__A1__8S7676C16[] = {
  0,
  0,
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C16[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__8S7676C16[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C16[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__8S7676C16[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
static  VTT_ENTRY vtt_S7676C16[] = {
  {&(_ZTV8S7676C16[4]),  4,45},
  {&(_tg__ZTV7S7676C2__A1__8S7676C16[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C2__A1__8S7676C16[4]),  4,6},
  {&(_ZTV8S7676C16[29]),  29,45},
  {&(_ZTV8S7676C16[43]),  43,45},
  {&(_ZTV8S7676C16[38]),  38,45},
  {&(_ZTV8S7676C16[15]),  15,45},
  {&(_tg__ZTV7S7676C7__8S7676C16[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__8S7676C16[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C16[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__8S7676C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7676C16[];
extern  VTBL_ENTRY _ZTV8S7676C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C16[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C16D0Ev,_ZThn24_N8S7676C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C16D1Ev,_ZThn24_N8S7676C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7676C16 = {  "S7676C16", // class name
  bases_S7676C16, 6,
  &(vtc_S7676C16[0]), // expected_vtbl_contents
  &(vtt_S7676C16[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI8S7676C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7676C16),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7676C16),11, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C15  : virtual S7676C13 , virtual S7676C2 , virtual S7676C16 , S7676C11 , virtual S7676C12 {
  int s7676c15f0:24;
  virtual  ~S7676C15(); // _ZN8S7676C15D2Ev
  virtual void  v45(); // _ZN8S7676C153v45Ev
  virtual void  v46(); // _ZN8S7676C153v46Ev
  virtual void  v47(); // _ZN8S7676C153v47Ev
  virtual void  v48(); // _ZN8S7676C153v48Ev
  virtual void  v49(); // _ZN8S7676C153v49Ev
  virtual void  v50(); // _ZN8S7676C153v50Ev
  virtual void  v51(); // _ZN8S7676C153v51Ev
  S7676C15(); // tgen
};
//SIG(-1 S7676C15) C1{ VBC2{ VBC3{ v8 v9 v10 v11 Fp Fc} VBC4{ VBC5{ v12 v13 Fp} BC6{ VBC5 vd v14 v15 Fp} BC7{ v16} vd v17 v18 v19 FL Fi Fp[8] Fi[2] FD Fi} v20 Fi:4} VBC6 VBC8{ BC5 VBC4 BC6 vd v21 v22 v23 v24 Fc Fi} BC9{ v25 Fi[9]} VBC10{ v26 v27 Fp} vd v1 v2 v3 v4 v5 v6 v7 Fi:24}


 S7676C15 ::~S7676C15(){ note_dtor("S7676C15", this);}
void  S7676C15 ::v45(){vfunc_called(this, "_ZN8S7676C153v45Ev");}
void  S7676C15 ::v46(){vfunc_called(this, "_ZN8S7676C153v46Ev");}
void  S7676C15 ::v47(){vfunc_called(this, "_ZN8S7676C153v47Ev");}
void  S7676C15 ::v48(){vfunc_called(this, "_ZN8S7676C153v48Ev");}
void  S7676C15 ::v49(){vfunc_called(this, "_ZN8S7676C153v49Ev");}
void  S7676C15 ::v50(){vfunc_called(this, "_ZN8S7676C153v50Ev");}
void  S7676C15 ::v51(){vfunc_called(this, "_ZN8S7676C153v51Ev");}
S7676C15 ::S7676C15(){ note_ctor("S7676C15", this);} // tgen

static void Test_S7676C15()
{
  extern Class_Descriptor cd_S7676C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,49)];
    init_test(&cd_S7676C15, buf);
    S7676C15 *dp, &lv = *(dp=new (buf) S7676C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,192), "sizeof(S7676C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C15)");
    check_base_class_offset(lv, (S7676C9*)(S7676C13*), ABISELECT(64,52), "S7676C15");
    check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(232,144), "S7676C15");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(232,144), "S7676C15");
    /*is_ambiguous_... S7676C15::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*), ABISELECT(232,144), "S7676C15");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C16*), ABISELECT(232,144), "S7676C15");
    check_base_class_offset(lv, (S7676C2*)(S7676C7*), ABISELECT(96,64), "S7676C15");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(112,72), "S7676C15");
    check_base_class_offset(lv, (S7676C7*)(S7676C13*), ABISELECT(96,64), "S7676C15");
    check_base_class_offset(lv, (S7676C7*)(S7676C16*), ABISELECT(96,64), "S7676C15");
    check_base_class_offset(lv, (S7676C13*), ABISELECT(48,44), "S7676C15");
    /*is_ambiguous_... S7676C15::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C2*), ABISELECT(248,152), "S7676C15");
    /*is_ambiguous_... S7676C16::S7676C3 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C16*), ABISELECT(264,160), "S7676C15");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C16*), ABISELECT(280,168), "S7676C15");
    check_base_class_offset(lv, (S7676C16*), ABISELECT(264,160), "S7676C15");
    check_base_class_offset(lv, (S7676C11*), 0, "S7676C15");
    check_base_class_offset(lv, (S7676C12*), ABISELECT(304,184), "S7676C15");
    set_bf_and_test(lv, s7676c15f0, ABISELECT(44,40), 0, 24, 1, "S7676C15");
    set_bf_and_test(lv, s7676c15f0, ABISELECT(44,40), 0, 24, hide_sll(1LL<<23), "S7676C15");
    test_class_info(&lv, &cd_S7676C15);
    dp->~S7676C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C15(Test_S7676C15, "S7676C15", ABISELECT(320,192));

#else // __cplusplus

extern void _ZN8S7676C15C1Ev();
extern void _ZN8S7676C15D2Ev();
Name_Map name_map_S7676C15[] = {
  NSPAIR(_ZN8S7676C15C1Ev),
  NSPAIR(_ZN8S7676C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C9;
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C13;
extern VTBL_ENTRY _ZTI8S7676C13[];
extern  VTBL_ENTRY _ZTV8S7676C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C13[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C16;
extern VTBL_ENTRY _ZTI8S7676C16[];
extern  VTBL_ENTRY _ZTV8S7676C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C16[];
extern Class_Descriptor cd_S7676C11;
extern VTBL_ENTRY _ZTI8S7676C11[];
extern  VTBL_ENTRY _ZTV8S7676C11[];
extern Class_Descriptor cd_S7676C12;
extern VTBL_ENTRY _ZTI8S7676C12[];
extern  VTBL_ENTRY _ZTV8S7676C12[];
static Base_Class bases_S7676C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C9,    ABISELECT(64,52), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7676C3,    ABISELECT(232,144), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(112,72), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(96,64), //bcp->offset
    39, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7676C13,    ABISELECT(48,44), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C2,    ABISELECT(248,152), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C3,    ABISELECT(264,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7676C2,    ABISELECT(280,168), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7676C16,    ABISELECT(264,160), //bcp->offset
    75, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7676C12,    ABISELECT(304,184), //bcp->offset
    103, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7676C15[];
extern void _ZN8S7676C113v25Ev();
extern void _ZN8S7676C15D1Ev();
extern void _ZN8S7676C15D0Ev();
extern void _ZN8S7676C153v45Ev();
extern void _ZN8S7676C153v46Ev();
extern void _ZN8S7676C153v47Ev();
extern void _ZN8S7676C153v48Ev();
extern void _ZN8S7676C153v49Ev();
extern void _ZN8S7676C153v50Ev();
extern void _ZN8S7676C153v51Ev();
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev)();
extern void ABISELECT(_ZThn48_N8S7676C15D1Ev,_ZThn44_N8S7676C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev)();
extern void ABISELECT(_ZThn48_N8S7676C15D0Ev,_ZThn44_N8S7676C15D0Ev)() __attribute__((weak));
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
extern void ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev)();
extern void ABISELECT(_ZThn96_N8S7676C15D1Ev,_ZThn64_N8S7676C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev)();
extern void ABISELECT(_ZThn96_N8S7676C15D0Ev,_ZThn64_N8S7676C15D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev)();
extern void ABISELECT(_ZThn248_N8S7676C15D1Ev,_ZThn152_N8S7676C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev)();
extern void ABISELECT(_ZThn248_N8S7676C15D0Ev,_ZThn152_N8S7676C15D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev)();
extern void ABISELECT(_ZThn264_N8S7676C15D1Ev,_ZThn160_N8S7676C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev)();
extern void ABISELECT(_ZThn264_N8S7676C15D0Ev,_ZThn160_N8S7676C15D0Ev)() __attribute__((weak));
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
extern void ABISELECT(_ZTvn16_n56_N8S7676C15D1Ev,_ZTvn8_n28_N8S7676C15D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S7676C15D0Ev,_ZTvn8_n28_N8S7676C15D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
static  VTBL_ENTRY vtc_S7676C15[] = {
  ABISELECT(304,184),
  ABISELECT(264,160),
  ABISELECT(248,152),
  ABISELECT(232,144),
  ABISELECT(96,64),
  ABISELECT(64,52),
  ABISELECT(48,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
  (VTBL_ENTRY)&_ZN8S7676C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v45Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v46Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v47Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v48Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v49Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v50Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v51Ev,
  ABISELECT(-48,-44),
  0,
  ABISELECT(184,100),
  ABISELECT(48,20),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-64),
  ABISELECT(136,80),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  0,
  0,
  ABISELECT(-248,-152),
  ABISELECT(-16,-8),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-264,-160),
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-168,-96),
  ABISELECT(-264,-160),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
  ABISELECT(-48,-24),
  ABISELECT(-280,-168),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C15D1Ev,_ZTvn8_n28_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C15D0Ev,_ZTvn8_n28_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  0,
  0,
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
};
extern VTBL_ENTRY _ZTV8S7676C15[];
extern void _ZN8S7676C133v32Ev();
extern void _ZN8S7676C13D1Ev();
extern void _ZN8S7676C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C13__8S7676C15[] = {
  ABISELECT(184,100),
  ABISELECT(48,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D0Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__8S7676C13__8S7676C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S7676C13D1Ev,_ZThn20_N8S7676C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S7676C13D0Ev,_ZThn20_N8S7676C13D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C13__8S7676C15[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  ABISELECT(136,80),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__8S7676C13__8S7676C15[] = {
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__8S7676C15[] = {
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C15[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__8S7676C15[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C15[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__8S7676C15[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A1__8S7676C15[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C2__A1__8S7676C15[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN8S7676C16D1Ev();
extern void _ZN8S7676C16D0Ev();
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C16__8S7676C15[] = {
  ABISELECT(-32,-16),
  ABISELECT(-168,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C28S7676C16__A2__8S7676C15[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C28S7676C16__A2__8S7676C15[] = {
  0,
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C16__8S7676C15[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,96),
  ABISELECT(136,80),
  ABISELECT(168,96),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__A1__8S7676C16__8S7676C15[] = {
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C16__8S7676C15[] = {
  ABISELECT(152,88),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A1__8S7676C16__8S7676C15[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
static  VTT_ENTRY vtt_S7676C15[] = {
  {&(_ZTV8S7676C15[9]),  9,109},
  {&(_ZTV8S7676C15[26]),  26,109},
  {&(_ZTV8S7676C15[35]),  35,109},
  {&(_ZTV8S7676C15[49]),  49,109},
  {&(_ZTV8S7676C15[63]),  63,109},
  {&(_ZTV8S7676C15[58]),  58,109},
  {&(_ZTV8S7676C15[71]),  71,109},
  {&(_ZTV8S7676C15[88]),  88,109},
  {&(_ZTV8S7676C15[99]),  99,109},
  {&(_ZTV8S7676C15[107]),  107,109},
  {&(_tg__ZTV8S7676C13__8S7676C15[5]),  5,8},
  {&(_tg__ZTV7S7676C9__8S7676C13__8S7676C15[6]),  6,10},
  {&(_tg__ZTV7S7676C7__8S7676C13__8S7676C15[10]),  10,17},
  {&(_tg__ZTV7S7676C3__8S7676C13__8S7676C15[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__8S7676C15[2]),  2,3},
  {&(_tg__ZTV7S7676C7__8S7676C15[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__8S7676C15[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C15[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__8S7676C15[4]),  4,6},
  {&(_tg__ZTV7S7676C2__A1__8S7676C15[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C2__A1__8S7676C15[4]),  4,6},
  {&(_tg__ZTV8S7676C16__8S7676C15[4]),  4,12},
  {&(_tg__ZTV7S7676C28S7676C16__A2__8S7676C15[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C28S7676C16__A2__8S7676C15[4]),  4,6},
  {&(_tg__ZTV7S7676C7__8S7676C16__8S7676C15[10]),  10,17},
  {&(_tg__ZTV7S7676C3__A1__8S7676C16__8S7676C15[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C16__8S7676C15[2]),  2,3},
  {&(_tg__ZTV7S7676C2__A1__8S7676C16__8S7676C15[3]),  3,7},
};
extern VTBL_ENTRY _ZTI8S7676C15[];
extern  VTBL_ENTRY _ZTV8S7676C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C15[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C13D0Ev,_ZThn20_N8S7676C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C13D1Ev,_ZThn20_N8S7676C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7676C15D0Ev,_ZThn152_N8S7676C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7676C15D0Ev,_ZThn64_N8S7676C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S7676C15D1Ev,_ZThn152_N8S7676C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7676C15D1Ev,_ZThn64_N8S7676C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S7676C15D0Ev,_ZThn160_N8S7676C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C15D0Ev,_ZThn44_N8S7676C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S7676C15D1Ev,_ZThn160_N8S7676C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C15D1Ev,_ZThn44_N8S7676C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7676C15 = {  "S7676C15", // class name
  bases_S7676C15, 12,
  &(vtc_S7676C15[0]), // expected_vtbl_contents
  &(vtt_S7676C15[0]), // expected_vtt_contents
  ABISELECT(320,192), // object size
  NSPAIRA(_ZTI8S7676C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7676C15),109, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7676C15),28, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C17  : S7676C7 , virtual S7676C9 , virtual S7676C12 , virtual S7676C16 {
  virtual  ~S7676C17(); // _ZN8S7676C17D2Ev
  virtual void  v52(); // _ZN8S7676C173v52Ev
  virtual void  v53(); // _ZN8S7676C173v53Ev
  virtual void  v54(); // _ZN8S7676C173v54Ev
  S7676C17(); // tgen
};
//SIG(-1 S7676C17) C1{ BC2{ VBC3{ v4 v5 Fp} BC4{ VBC3 vd v6 v7 Fp} BC5{ v8} vd v9 v10 v11 FL Fi Fp[8] Fi[2] FD Fi} VBC6{ v12 v13 v14 v15 Fp Fc} VBC7{ v16 v17 Fp} VBC8{ BC3 VBC2 BC4 vd v18 v19 v20 v21 Fc Fi} vd v1 v2 v3}


 S7676C17 ::~S7676C17(){ note_dtor("S7676C17", this);}
void  S7676C17 ::v52(){vfunc_called(this, "_ZN8S7676C173v52Ev");}
void  S7676C17 ::v53(){vfunc_called(this, "_ZN8S7676C173v53Ev");}
void  S7676C17 ::v54(){vfunc_called(this, "_ZN8S7676C173v54Ev");}
S7676C17 ::S7676C17(){ note_ctor("S7676C17", this);} // tgen

static void Test_S7676C17()
{
  extern Class_Descriptor cd_S7676C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,54)];
    init_test(&cd_S7676C17, buf);
    S7676C17 *dp, &lv = *(dp=new (buf) S7676C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,212), "sizeof(S7676C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C17)");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(136,80), "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(136,80), "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(136,80), "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(136,80), "S7676C17");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C16*), ABISELECT(136,80), "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C7*), 0, "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(16,8), "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C7*), 0, "S7676C17");
    check_base_class_offset(lv, (S7676C9*), ABISELECT(152,88), "S7676C17");
    check_base_class_offset(lv, (S7676C12*), ABISELECT(176,100), "S7676C17");
    /*is_ambiguous_... S7676C16::S7676C3 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C16*), ABISELECT(192,108), "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C7*), ABISELECT(240,132), "S7676C17");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(256,140), "S7676C17");
    check_base_class_offset(lv, (S7676C7*)(S7676C16*), ABISELECT(240,132), "S7676C17");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C16*), ABISELECT(208,116), "S7676C17");
    check_base_class_offset(lv, (S7676C16*), ABISELECT(192,108), "S7676C17");
    test_class_info(&lv, &cd_S7676C17);
    dp->~S7676C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C17(Test_S7676C17, "S7676C17", ABISELECT(384,212));

#else // __cplusplus

extern void _ZN8S7676C17C1Ev();
extern void _ZN8S7676C17D2Ev();
Name_Map name_map_S7676C17[] = {
  NSPAIR(_ZN8S7676C17C1Ev),
  NSPAIR(_ZN8S7676C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C9;
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
extern Class_Descriptor cd_S7676C12;
extern VTBL_ENTRY _ZTI8S7676C12[];
extern  VTBL_ENTRY _ZTV8S7676C12[];
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C16;
extern VTBL_ENTRY _ZTI8S7676C16[];
extern  VTBL_ENTRY _ZTV8S7676C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C16[];
static Base_Class bases_S7676C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    ABISELECT(136,80), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7676C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7676C7,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7676C9,    ABISELECT(152,88), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C12,    ABISELECT(176,100), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C3,    ABISELECT(192,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7676C2,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(256,140), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(240,132), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(208,116), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7676C16,    ABISELECT(192,108), //bcp->offset
    42, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7676C17[];
extern void _ZN8S7676C17D1Ev();
extern void _ZN8S7676C17D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN8S7676C173v52Ev();
extern void _ZN8S7676C173v53Ev();
extern void _ZN8S7676C173v54Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void ABISELECT(_ZTv0_n56_N8S7676C17D1Ev,_ZTv0_n28_N8S7676C17D1Ev)();
extern void ABISELECT(_ZThn192_N8S7676C17D1Ev,_ZThn108_N8S7676C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7676C17D0Ev,_ZTv0_n28_N8S7676C17D0Ev)();
extern void ABISELECT(_ZThn192_N8S7676C17D0Ev,_ZThn108_N8S7676C17D0Ev)() __attribute__((weak));
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
extern void ABISELECT(_ZTvn16_n56_N8S7676C17D1Ev,_ZTvn8_n28_N8S7676C17D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S7676C17D0Ev,_ZTvn8_n28_N8S7676C17D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void ABISELECT(_ZTv0_n32_N8S7676C17D1Ev,_ZTv0_n16_N8S7676C17D1Ev)();
extern void ABISELECT(_ZThn240_N8S7676C17D1Ev,_ZThn132_N8S7676C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C17D0Ev,_ZTv0_n16_N8S7676C17D0Ev)();
extern void ABISELECT(_ZThn240_N8S7676C17D0Ev,_ZThn132_N8S7676C17D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY vtc_S7676C17[] = {
  ABISELECT(240,132),
  ABISELECT(192,108),
  ABISELECT(176,100),
  ABISELECT(152,88),
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN8S7676C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C17D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v52Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v53Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v54Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-108),
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(48,24),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C17D1Ev,_ZTv0_n28_N8S7676C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C17D0Ev,_ZTv0_n28_N8S7676C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
  ABISELECT(-72,-36),
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C17D1Ev,_ZTvn8_n28_N8S7676C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C17D0Ev,_ZTvn8_n28_N8S7676C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-104,-52),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C17D1Ev,_ZTv0_n16_N8S7676C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C17D0Ev,_ZTv0_n16_N8S7676C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern VTBL_ENTRY _ZTV8S7676C17[];
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A__8S7676C17[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__8S7676C17[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C17[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__A__8S7676C17[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN8S7676C16D1Ev();
extern void _ZN8S7676C16D0Ev();
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C16__8S7676C17[] = {
  ABISELECT(-56,-28),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C28S7676C16__A2__8S7676C17[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C28S7676C16__A2__8S7676C17[] = {
  0,
  0,
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev)();
extern void ABISELECT(_ZThn48_N8S7676C16D1Ev,_ZThn24_N8S7676C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev)();
extern void ABISELECT(_ZThn48_N8S7676C16D0Ev,_ZThn24_N8S7676C16D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C16__8S7676C17[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-104,-52),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__A1__8S7676C16__8S7676C17[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C16__8S7676C17[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A1__8S7676C16__8S7676C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__8S7676C17[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__A1__8S7676C17[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__A1__8S7676C17[] = {
  0,
  0,
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__A1__8S7676C17[] = {
  0,
  0,
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
static  VTT_ENTRY vtt_S7676C17[] = {
  {&(_ZTV8S7676C17[7]),  7,90},
  {&(_tg__ZTV7S7676C7__A__8S7676C17[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__8S7676C17[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__8S7676C17[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__A__8S7676C17[4]),  4,6},
  {&(_ZTV8S7676C17[24]),  24,90},
  {&(_ZTV8S7676C17[32]),  32,90},
  {&(_ZTV8S7676C17[40]),  40,90},
  {&(_ZTV8S7676C17[55]),  55,90},
  {&(_ZTV8S7676C17[80]),  80,90},
  {&(_ZTV8S7676C17[89]),  89,90},
  {&(_ZTV8S7676C17[66]),  66,90},
  {&(_tg__ZTV8S7676C16__8S7676C17[4]),  4,12},
  {&(_tg__ZTV7S7676C28S7676C16__A2__8S7676C17[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C28S7676C16__A2__8S7676C17[4]),  4,6},
  {&(_tg__ZTV7S7676C7__8S7676C16__8S7676C17[10]),  10,17},
  {&(_tg__ZTV7S7676C3__A1__8S7676C16__8S7676C17[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C16__8S7676C17[2]),  2,3},
  {&(_tg__ZTV7S7676C2__A1__8S7676C16__8S7676C17[3]),  3,7},
  {&(_tg__ZTV7S7676C7__A1__8S7676C17[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__A1__8S7676C17[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__A1__8S7676C17[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__A1__8S7676C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7676C17[];
extern  VTBL_ENTRY _ZTV8S7676C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C17[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C16D0Ev,_ZThn24_N8S7676C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C16D1Ev,_ZThn24_N8S7676C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C17D0Ev,_ZTv0_n16_N8S7676C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7676C17D0Ev,_ZThn132_N8S7676C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C17D1Ev,_ZTv0_n16_N8S7676C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7676C17D1Ev,_ZThn132_N8S7676C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7676C17D0Ev,_ZTv0_n28_N8S7676C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7676C17D0Ev,_ZThn108_N8S7676C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7676C17D1Ev,_ZTv0_n28_N8S7676C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7676C17D1Ev,_ZThn108_N8S7676C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7676C17 = {  "S7676C17", // class name
  bases_S7676C17, 12,
  &(vtc_S7676C17[0]), // expected_vtbl_contents
  &(vtt_S7676C17[0]), // expected_vtt_contents
  ABISELECT(384,212), // object size
  NSPAIRA(_ZTI8S7676C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7676C17),90, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7676C17),23, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7676C1  : S7676C2 , virtual S7676C4 , virtual S7676C15 , virtual S7676C17 {
  int s7676c1f0;
  virtual  ~S7676C1(); // _ZN7S7676C1D2Ev
  virtual void  v1(); // _ZN7S7676C12v1Ev
  virtual void  v2(); // _ZN7S7676C12v2Ev
  virtual void  v3(); // _ZN7S7676C12v3Ev
  virtual void  v4(); // _ZN7S7676C12v4Ev
  virtual void  v5(); // _ZN7S7676C12v5Ev
  virtual void  v6(); // _ZN7S7676C12v6Ev
  virtual void  v7(); // _ZN7S7676C12v7Ev
  S7676C1(); // tgen
};
//SIG(1 S7676C1) C1{ BC2{ VBC3{ v8 v9 Fp} vd v10 v11 Fp} VBC4{ BC5{ VBC6{ VBC3 BC7{ VBC3 BC2 BC8{ v12} vd v13 v14 v15 FL Fi Fp[8] Fi[2] FD Fi} BC8 VBC9{ v16 v17 v18 v19 Fp Fc} v20 v21 v22 v23 v24 FD} BC8 BC10{ BC11{ v25 Fi[9]} BC8 v26 v27 v28 v29 FD} VBC12{ v30 v31 Fp} VBC13{ VBC9 VBC7 v32 Fi:4} vd v33 v34 v35 FU14{ m}[9]} vd v36 v37 v38 v39 v40 Fp} VBC15{ VBC13 VBC2 VBC16{ BC3 VBC7 BC2 vd v41 v42 v43 v44 Fc Fi} BC11 VBC12 vd v45 v46 v47 v48 v49 v50 v51 Fi:24} VBC17{ BC7 VBC9 VBC12 VBC16 vd v52 v53 v54} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S7676C1 ::~S7676C1(){ note_dtor("S7676C1", this);}
void  S7676C1 ::v1(){vfunc_called(this, "_ZN7S7676C12v1Ev");}
void  S7676C1 ::v2(){vfunc_called(this, "_ZN7S7676C12v2Ev");}
void  S7676C1 ::v3(){vfunc_called(this, "_ZN7S7676C12v3Ev");}
void  S7676C1 ::v4(){vfunc_called(this, "_ZN7S7676C12v4Ev");}
void  S7676C1 ::v5(){vfunc_called(this, "_ZN7S7676C12v5Ev");}
void  S7676C1 ::v6(){vfunc_called(this, "_ZN7S7676C12v6Ev");}
void  S7676C1 ::v7(){vfunc_called(this, "_ZN7S7676C12v7Ev");}
S7676C1 ::S7676C1(){ note_ctor("S7676C1", this);} // tgen

static void Test_S7676C1()
{
  extern Class_Descriptor cd_S7676C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,115)];
    init_test(&cd_S7676C1, buf);
    S7676C1 *dp, &lv = *(dp=new (buf) S7676C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,456), "sizeof(S7676C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7676C1)");
    /*is_ambiguous_... S7676C1::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*), ABISELECT(24,12), "S7676C1");
    check_base_class_offset(lv, (S7676C3*)(S7676C6*), ABISELECT(24,12), "S7676C1");
    check_base_class_offset(lv, (S7676C3*)(S7676C7*)(S7676C6*), ABISELECT(24,12), "S7676C1");
    check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*)(S7676C6*), ABISELECT(24,12), "S7676C1");
    /*is_ambiguous_... S7676C1::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C7*), ABISELECT(24,12), "S7676C1");
    /*is_ambiguous_... S7676C1::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*), ABISELECT(24,12), "S7676C1");
    /*is_ambiguous_... S7676C1::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*), ABISELECT(24,12), "S7676C1");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C16*), ABISELECT(24,12), "S7676C1");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C7*)(S7676C17*), ABISELECT(24,12), "S7676C1");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C2*)(S7676C7*)(S7676C17*), ABISELECT(24,12), "S7676C1");
    /*is_ambiguous_... S7676C1::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C2*), 0, "S7676C1");
    check_base_class_offset(lv, (S7676C2*)(S7676C7*)(S7676C6*), ABISELECT(176,96), "S7676C1");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*)(S7676C6*), ABISELECT(192,104), "S7676C1");
    check_base_class_offset(lv, (S7676C7*)(S7676C6*), ABISELECT(176,96), "S7676C1");
    /*is_ambiguous_... S7676C6::S7676C8_nt */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C6*), ABISELECT(312,176), "S7676C1");
    check_base_class_offset(lv, (S7676C9*)(S7676C6*), ABISELECT(336,192), "S7676C1");
    check_base_class_offset(lv, (S7676C9*)(S7676C13*), ABISELECT(336,192), "S7676C1");
    check_base_class_offset(lv, (S7676C9*)(S7676C17*), ABISELECT(336,192), "S7676C1");
    check_base_class_offset(lv, (S7676C6*)(S7676C5*)(S7676C4*), ABISELECT(176,96), "S7676C1");
    /*is_ambiguous_... S7676C5::S7676C8_nt */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C5*)(S7676C4*), ABISELECT(48,20), "S7676C1");
    check_base_class_offset(lv, (S7676C11*)(S7676C10*)(S7676C5*)(S7676C4*), ABISELECT(64,24), "S7676C1");
    check_base_class_offset(lv, (S7676C8_nt*)(S7676C10*)(S7676C5*)(S7676C4*), ABISELECT(112,64), "S7676C1");
    check_base_class_offset(lv, (S7676C10*)(S7676C5*)(S7676C4*), ABISELECT(64,24), "S7676C1");
    check_base_class_offset(lv, (S7676C12*)(S7676C5*)(S7676C4*), ABISELECT(360,204), "S7676C1");
    check_base_class_offset(lv, (S7676C12*)(S7676C15*), ABISELECT(360,204), "S7676C1");
    check_base_class_offset(lv, (S7676C12*)(S7676C17*), ABISELECT(360,204), "S7676C1");
    /*is_ambiguous_... S7676C1::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C7*), ABISELECT(400,220), "S7676C1");
    /*is_ambiguous_... S7676C1::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*), ABISELECT(416,228), "S7676C1");
    check_base_class_offset(lv, (S7676C7*)(S7676C13*), ABISELECT(400,220), "S7676C1");
    check_base_class_offset(lv, (S7676C7*)(S7676C16*), ABISELECT(400,220), "S7676C1");
    check_base_class_offset(lv, (S7676C13*)(S7676C5*)(S7676C4*), ABISELECT(376,212), "S7676C1");
    check_base_class_offset(lv, (S7676C13*)(S7676C15*), ABISELECT(376,212), "S7676C1");
    check_base_class_offset(lv, (S7676C5*)(S7676C4*), ABISELECT(48,20), "S7676C1");
    check_base_class_offset(lv, (S7676C4*), ABISELECT(48,20), "S7676C1");
    /*is_ambiguous_... S7676C15::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C15*), ABISELECT(584,344), "S7676C1");
    /*is_ambiguous_... S7676C16::S7676C3 */ AMB_check_base_class_offset(lv, (S7676C3*)(S7676C16*), ABISELECT(600,352), "S7676C1");
    /*is_ambiguous_... S7676C16::S7676C2 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C16*), ABISELECT(616,360), "S7676C1");
    check_base_class_offset(lv, (S7676C16*)(S7676C15*), ABISELECT(600,352), "S7676C1");
    check_base_class_offset(lv, (S7676C16*)(S7676C17*), ABISELECT(600,352), "S7676C1");
    check_base_class_offset(lv, (S7676C11*)(S7676C15*), ABISELECT(536,300), "S7676C1");
    check_base_class_offset(lv, (S7676C15*), ABISELECT(536,300), "S7676C1");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C2*)(S7676C7*)(S7676C17*), ABISELECT(640,376), "S7676C1");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C8_nt*)(S7676C7*)(S7676C17*), ABISELECT(656,384), "S7676C1");
    /*is_ambiguous_... S7676C17::S7676C7 */ AMB_check_base_class_offset(lv, (S7676C7*)(S7676C17*), ABISELECT(640,376), "S7676C1");
    check_base_class_offset(lv, (S7676C17*), ABISELECT(640,376), "S7676C1");
    check_field_offset(lv, s7676c1f0, ABISELECT(16,8), "S7676C1.s7676c1f0");
    test_class_info(&lv, &cd_S7676C1);
    dp->~S7676C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7676C1(Test_S7676C1, "S7676C1", ABISELECT(784,456));

#else // __cplusplus

extern void _ZN7S7676C1C1Ev();
extern void _ZN7S7676C1D2Ev();
Name_Map name_map_S7676C1[] = {
  NSPAIR(_ZN7S7676C1C1Ev),
  NSPAIR(_ZN7S7676C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C9;
extern VTBL_ENTRY _ZTI7S7676C9[];
extern  VTBL_ENTRY _ZTV7S7676C9[];
extern Class_Descriptor cd_S7676C6;
extern VTBL_ENTRY _ZTI7S7676C6[];
extern  VTBL_ENTRY _ZTV7S7676C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C6[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C11;
extern VTBL_ENTRY _ZTI8S7676C11[];
extern  VTBL_ENTRY _ZTV8S7676C11[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C10;
extern VTBL_ENTRY _ZTI8S7676C10[];
extern  VTBL_ENTRY _ZTV8S7676C10[];
extern Class_Descriptor cd_S7676C12;
extern VTBL_ENTRY _ZTI8S7676C12[];
extern  VTBL_ENTRY _ZTV8S7676C12[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C13;
extern VTBL_ENTRY _ZTI8S7676C13[];
extern  VTBL_ENTRY _ZTV8S7676C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C13[];
extern Class_Descriptor cd_S7676C5;
extern VTBL_ENTRY _ZTI7S7676C5[];
extern  VTBL_ENTRY _ZTV7S7676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C5[];
extern Class_Descriptor cd_S7676C4;
extern VTBL_ENTRY _ZTI7S7676C4[];
extern  VTBL_ENTRY _ZTV7S7676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C4[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C3;
extern VTBL_ENTRY _ZTI7S7676C3[];
extern  VTBL_ENTRY _ZTV7S7676C3[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C16;
extern VTBL_ENTRY _ZTI8S7676C16[];
extern  VTBL_ENTRY _ZTV8S7676C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C16[];
extern Class_Descriptor cd_S7676C11;
extern VTBL_ENTRY _ZTI8S7676C11[];
extern  VTBL_ENTRY _ZTV8S7676C11[];
extern Class_Descriptor cd_S7676C15;
extern VTBL_ENTRY _ZTI8S7676C15[];
extern  VTBL_ENTRY _ZTV8S7676C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C15[];
extern Class_Descriptor cd_S7676C2;
extern VTBL_ENTRY _ZTI7S7676C2[];
extern  VTBL_ENTRY _ZTV7S7676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C2[];
extern Class_Descriptor cd_S7676C8_nt;
extern VTBL_ENTRY _ZTI10S7676C8_nt[];
extern  VTBL_ENTRY _ZTV10S7676C8_nt[];
extern Class_Descriptor cd_S7676C7;
extern VTBL_ENTRY _ZTI7S7676C7[];
extern  VTBL_ENTRY _ZTV7S7676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C7[];
extern Class_Descriptor cd_S7676C17;
extern VTBL_ENTRY _ZTI8S7676C17[];
extern  VTBL_ENTRY _ZTV8S7676C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7676C17[];
static Base_Class bases_S7676C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7676C3,    ABISELECT(24,12), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7676C2,    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
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7676C2,    ABISELECT(176,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(192,104), //bcp->offset
    102, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(176,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(312,176), //bcp->offset
    105, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7676C9,    ABISELECT(336,192), //bcp->offset
    108, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7676C6,    ABISELECT(176,96), //bcp->offset
    74, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7676C8_nt,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7676C11,    ABISELECT(64,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(112,64), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7676C10,    ABISELECT(64,24), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7676C12,    ABISELECT(360,204), //bcp->offset
    118, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7676C2,    ABISELECT(400,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    15, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(416,228), //bcp->offset
    151, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(400,220), //bcp->offset
    134, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7676C13,    ABISELECT(376,212), //bcp->offset
    124, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7676C5,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7676C4,    ABISELECT(48,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C2,    ABISELECT(584,344), //bcp->offset
    182, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7676C3,    ABISELECT(600,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7676C2,    ABISELECT(616,360), //bcp->offset
    213, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7676C16,    ABISELECT(600,352), //bcp->offset
    192, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S7676C11,    ABISELECT(536,300), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S7676C15,    ABISELECT(536,300), //bcp->offset
    154, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7676C2,    ABISELECT(640,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7676C8_nt,    ABISELECT(656,384), //bcp->offset
    247, //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
    26, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7676C7,    ABISELECT(640,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7676C17,    ABISELECT(640,376), //bcp->offset
    220, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7676C1[];
extern void _ZN7S7676C1D1Ev();
extern void _ZN7S7676C1D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C12v1Ev();
extern void _ZN7S7676C12v2Ev();
extern void _ZN7S7676C12v3Ev();
extern void _ZN7S7676C12v4Ev();
extern void _ZN7S7676C12v5Ev();
extern void _ZN7S7676C12v6Ev();
extern void _ZN7S7676C12v7Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void ABISELECT(_ZTv0_n80_N7S7676C1D1Ev,_ZTv0_n40_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7676C1D1Ev,_ZThn20_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7676C1D0Ev,_ZTv0_n40_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7676C1D0Ev,_ZThn20_N7S7676C1D0Ev)() __attribute__((weak));
extern void _ZN7S7676C53v33Ev();
extern void _ZN7S7676C53v34Ev();
extern void _ZN7S7676C53v35Ev();
extern void _ZN7S7676C43v36Ev();
extern void _ZN7S7676C43v37Ev();
extern void _ZN7S7676C43v38Ev();
extern void _ZN7S7676C43v39Ev();
extern void _ZN7S7676C43v40Ev();
extern void _ZN8S7676C113v25Ev();
extern void _ZN8S7676C103v26Ev();
extern void _ZN8S7676C103v27Ev();
extern void _ZN8S7676C103v28Ev();
extern void _ZN8S7676C103v29Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S7676C1D1Ev,_ZTv0_n20_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S7676C1D1Ev,_ZThn96_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7676C1D0Ev,_ZTv0_n20_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn176_N7S7676C1D0Ev,_ZThn96_N7S7676C1D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7676C1D1Ev,_ZTv0_n28_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn376_N7S7676C1D1Ev,_ZThn212_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7676C1D0Ev,_ZTv0_n28_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn376_N7S7676C1D0Ev,_ZThn212_N7S7676C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C1D1Ev,_ZTv0_n16_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn400_N7S7676C1D1Ev,_ZThn220_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C1D0Ev,_ZTv0_n16_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn400_N7S7676C1D0Ev,_ZThn220_N7S7676C1D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN8S7676C113v25Ev();
extern void ABISELECT(_ZTv0_n88_N7S7676C1D1Ev,_ZTv0_n44_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn536_N7S7676C1D1Ev,_ZThn300_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7676C1D0Ev,_ZTv0_n44_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn536_N7S7676C1D0Ev,_ZThn300_N7S7676C1D0Ev)() __attribute__((weak));
extern void _ZN8S7676C153v45Ev();
extern void _ZN8S7676C153v46Ev();
extern void _ZN8S7676C153v47Ev();
extern void _ZN8S7676C153v48Ev();
extern void _ZN8S7676C153v49Ev();
extern void _ZN8S7676C153v50Ev();
extern void _ZN8S7676C153v51Ev();
extern void ABISELECT(_ZTv0_n32_N7S7676C1D1Ev,_ZTv0_n16_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn584_N7S7676C1D1Ev,_ZThn344_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C1D0Ev,_ZTv0_n16_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn584_N7S7676C1D0Ev,_ZThn344_N7S7676C1D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void ABISELECT(_ZTv0_n56_N7S7676C1D1Ev,_ZTv0_n28_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn600_N7S7676C1D1Ev,_ZThn352_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7676C1D0Ev,_ZTv0_n28_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn600_N7S7676C1D0Ev,_ZThn352_N7S7676C1D0Ev)() __attribute__((weak));
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
extern void ABISELECT(_ZTvn16_n56_N7S7676C1D1Ev,_ZTvn8_n28_N7S7676C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S7676C1D0Ev,_ZTvn8_n28_N7S7676C1D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void ABISELECT(_ZTv0_n64_N7S7676C1D1Ev,_ZTv0_n32_N7S7676C1D1Ev)();
extern void ABISELECT(_ZThn640_N7S7676C1D1Ev,_ZThn376_N7S7676C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7676C1D0Ev,_ZTv0_n32_N7S7676C1D0Ev)();
extern void ABISELECT(_ZThn640_N7S7676C1D0Ev,_ZThn376_N7S7676C1D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN8S7676C173v52Ev();
extern void _ZN8S7676C173v53Ev();
extern void _ZN8S7676C173v54Ev();
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY vtc_S7676C1[] = {
  ABISELECT(640,376),
  ABISELECT(600,352),
  ABISELECT(584,344),
  ABISELECT(536,300),
  ABISELECT(400,220),
  ABISELECT(376,212),
  ABISELECT(360,204),
  ABISELECT(336,192),
  ABISELECT(176,96),
  ABISELECT(48,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN7S7676C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7676C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7676C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7676C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7676C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7676C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7676C12v7Ev,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  ABISELECT(16,4),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(352,200),
  ABISELECT(328,192),
  ABISELECT(312,184),
  ABISELECT(288,172),
  ABISELECT(-24,-8),
  ABISELECT(128,76),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7676C1D1Ev,_ZTv0_n40_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7676C1D0Ev,_ZTv0_n40_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C53v33Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v34Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v35Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v36Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v37Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v38Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v39Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v40Ev,
  ABISELECT(-64,-24),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v26Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7676C103v29Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-96),
  ABISELECT(160,96),
  ABISELECT(-152,-84),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C1D1Ev,_ZTv0_n20_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C1D0Ev,_ZTv0_n20_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  ABISELECT(-312,-176),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-192),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
  0,
  0,
  ABISELECT(-360,-204),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
  ABISELECT(-376,-212),
  0,
  ABISELECT(-352,-200),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-376,-212),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C1D1Ev,_ZTv0_n28_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C1D0Ev,_ZTv0_n28_N7S7676C1D0Ev),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-220),
  ABISELECT(-376,-208),
  ABISELECT(-400,-220),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C1D1Ev,_ZTv0_n16_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C1D0Ev,_ZTv0_n16_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  ABISELECT(-416,-228),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-536,-300),
  0,
  ABISELECT(-176,-96),
  ABISELECT(64,52),
  ABISELECT(48,44),
  ABISELECT(-512,-288),
  ABISELECT(-136,-80),
  ABISELECT(-200,-108),
  ABISELECT(-160,-88),
  ABISELECT(-536,-300),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7676C1D1Ev,_ZTv0_n44_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7676C1D0Ev,_ZTv0_n44_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7676C153v45Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v46Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v47Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v48Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v49Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v50Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v51Ev,
  0,
  0,
  ABISELECT(-584,-344),
  ABISELECT(-560,-332),
  ABISELECT(-584,-344),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C1D1Ev,_ZTv0_n16_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C1D0Ev,_ZTv0_n16_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-600,-352),
  0,
  0,
  ABISELECT(-576,-340),
  ABISELECT(-200,-132),
  ABISELECT(-600,-352),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C1D1Ev,_ZTv0_n28_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C1D0Ev,_ZTv0_n28_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
  ABISELECT(-592,-348),
  ABISELECT(-616,-360),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S7676C1D1Ev,_ZTvn8_n28_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S7676C1D0Ev,_ZTvn8_n28_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-640,-376),
  ABISELECT(-240,-156),
  ABISELECT(-40,-24),
  ABISELECT(-280,-172),
  ABISELECT(-304,-184),
  ABISELECT(-616,-364),
  ABISELECT(-640,-376),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7676C1D1Ev,_ZTv0_n32_N7S7676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7676C1D0Ev,_ZTv0_n32_N7S7676C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v52Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v53Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v54Ev,
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI7S7676C1[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern VTBL_ENTRY _ZTV7S7676C1[];
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A__7S7676C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C2__A__7S7676C1[] = {
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C4D1Ev();
extern void _ZN7S7676C4D0Ev();
extern void _ZN7S7676C53v33Ev();
extern void _ZN7S7676C53v34Ev();
extern void _ZN7S7676C53v35Ev();
extern void _ZN7S7676C43v36Ev();
extern void _ZN7S7676C43v37Ev();
extern void _ZN7S7676C43v38Ev();
extern void _ZN7S7676C43v39Ev();
extern void _ZN7S7676C43v40Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C4__7S7676C1[] = {
  ABISELECT(352,200),
  ABISELECT(328,192),
  ABISELECT(312,184),
  ABISELECT(288,172),
  ABISELECT(-24,-8),
  ABISELECT(128,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7676C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v33Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v34Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v35Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v36Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v37Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v38Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v39Ev,
  (VTBL_ENTRY)&_ZN7S7676C43v40Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
extern void _ZN7S7676C5D1Ev();
extern void _ZN7S7676C5D0Ev();
extern void _ZN7S7676C53v33Ev();
extern void _ZN7S7676C53v34Ev();
extern void _ZN7S7676C53v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C57S7676C4__7S7676C1[] = {
  ABISELECT(352,200),
  ABISELECT(328,192),
  ABISELECT(312,184),
  ABISELECT(288,172),
  ABISELECT(-24,-8),
  ABISELECT(128,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7676C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v33Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v34Ev,
  (VTBL_ENTRY)&_ZN7S7676C53v35Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn128_N7S7676C5D1Ev,_ZThn76_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn128_N7S7676C5D0Ev,_ZThn76_N7S7676C5D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C6__7S7676C57S7676C4__7S7676C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(160,96),
  ABISELECT(-152,-84),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C57S7676C4__7S7676C1[] = {
  0,
  0,
  ABISELECT(24,8),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C77S7676C6__7S7676C57S7676C4__7S7676C1[] = {
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C6__A1__7S7676C57S7676C4__7S7676C1[] = {
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__7S7676C57S7676C4__7S7676C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C12__7S7676C57S7676C4__7S7676C1[] = {
  0,
  0,
  ABISELECT(-312,-184),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
};
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn328_N7S7676C5D1Ev,_ZThn192_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn328_N7S7676C5D0Ev,_ZThn192_N7S7676C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7676C13__7S7676C57S7676C4__7S7676C1[] = {
  ABISELECT(-328,-192),
  0,
  ABISELECT(-352,-200),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-328,-192),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev)();
extern void ABISELECT(_ZThn352_N7S7676C5D1Ev,_ZThn200_N7S7676C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev)();
extern void ABISELECT(_ZThn352_N7S7676C5D0Ev,_ZThn200_N7S7676C5D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__7S7676C57S7676C4__7S7676C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-200),
  ABISELECT(-376,-208),
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__A4__7S7676C57S7676C4__7S7676C1[] = {
  ABISELECT(-368,-208),
  (VTBL_ENTRY)&(_ZTI7S7676C5[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7676C4D1Ev,_ZTv0_n20_N7S7676C4D1Ev)();
extern void ABISELECT(_ZThn128_N7S7676C4D1Ev,_ZThn76_N7S7676C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7676C4D0Ev,_ZTv0_n20_N7S7676C4D0Ev)();
extern void ABISELECT(_ZThn128_N7S7676C4D0Ev,_ZThn76_N7S7676C4D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C6__7S7676C4__7S7676C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(160,96),
  ABISELECT(-152,-84),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C4D1Ev,_ZTv0_n20_N7S7676C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7676C4D0Ev,_ZTv0_n20_N7S7676C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C4__7S7676C1[] = {
  0,
  0,
  ABISELECT(24,8),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C77S7676C6__7S7676C4__7S7676C1[] = {
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C6__A1__7S7676C4__7S7676C1[] = {
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__7S7676C4__7S7676C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C12__7S7676C4__7S7676C1[] = {
  0,
  0,
  ABISELECT(-312,-184),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
};
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N7S7676C4D1Ev,_ZTv0_n28_N7S7676C4D1Ev)();
extern void ABISELECT(_ZThn328_N7S7676C4D1Ev,_ZThn192_N7S7676C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7676C4D0Ev,_ZTv0_n28_N7S7676C4D0Ev)();
extern void ABISELECT(_ZThn328_N7S7676C4D0Ev,_ZThn192_N7S7676C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7676C13__7S7676C4__7S7676C1[] = {
  ABISELECT(-328,-192),
  0,
  ABISELECT(-352,-200),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-328,-192),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C4D1Ev,_ZTv0_n28_N7S7676C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7676C4D0Ev,_ZTv0_n28_N7S7676C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7676C4D1Ev,_ZTv0_n16_N7S7676C4D1Ev)();
extern void ABISELECT(_ZThn352_N7S7676C4D1Ev,_ZThn200_N7S7676C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7676C4D0Ev,_ZTv0_n16_N7S7676C4D0Ev)();
extern void ABISELECT(_ZThn352_N7S7676C4D0Ev,_ZThn200_N7S7676C4D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__7S7676C4__7S7676C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-200),
  ABISELECT(-376,-208),
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C4D1Ev,_ZTv0_n16_N7S7676C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7676C4D0Ev,_ZTv0_n16_N7S7676C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__A4__7S7676C4__7S7676C1[] = {
  ABISELECT(-368,-208),
  (VTBL_ENTRY)&(_ZTI7S7676C4[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C6D1Ev();
extern void _ZN7S7676C6D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN7S7676C63v20Ev();
extern void _ZN7S7676C63v21Ev();
extern void _ZN7S7676C63v22Ev();
extern void _ZN7S7676C63v23Ev();
extern void _ZN7S7676C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C6__7S7676C1[] = {
  ABISELECT(160,96),
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7676C63v24Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C77S7676C6__7S7676C1[] = {
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C77S7676C6__A1__7S7676C1[] = {
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C77S7676C6__A1__7S7676C1[] = {
  0,
  0,
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C77S7676C6__7S7676C1[] = {
  0,
  0,
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C6__7S7676C1[] = {
  0,
  0,
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__7S7676C6__7S7676C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7676C6[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void _ZN8S7676C133v32Ev();
extern void _ZN8S7676C13D1Ev();
extern void _ZN8S7676C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C13__7S7676C1[] = {
  ABISELECT(-352,-200),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C13D0Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__8S7676C13__7S7676C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S7676C13D1Ev,_ZThn8_N8S7676C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S7676C13D0Ev,_ZThn8_N8S7676C13D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C13__7S7676C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  ABISELECT(-376,-208),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__8S7676C13__7S7676C1[] = {
  0,
  0,
  ABISELECT(352,200),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__7S7676C1[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S7676C13[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__7S7676C1[] = {
  ABISELECT(-376,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C7__A2__7S7676C1[] = {
  ABISELECT(-376,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C7__A2__7S7676C1[] = {
  0,
  0,
  ABISELECT(376,208),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C7__A1__7S7676C1[] = {
  0,
  0,
  ABISELECT(376,208),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN8S7676C113v25Ev();
extern void _ZN8S7676C15D1Ev();
extern void _ZN8S7676C15D0Ev();
extern void _ZN8S7676C153v45Ev();
extern void _ZN8S7676C153v46Ev();
extern void _ZN8S7676C153v47Ev();
extern void _ZN8S7676C153v48Ev();
extern void _ZN8S7676C153v49Ev();
extern void _ZN8S7676C153v50Ev();
extern void _ZN8S7676C153v51Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C15__7S7676C1[] = {
  ABISELECT(-176,-96),
  ABISELECT(64,52),
  ABISELECT(48,44),
  ABISELECT(-512,-288),
  ABISELECT(-136,-80),
  ABISELECT(-200,-108),
  ABISELECT(-160,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN8S7676C113v25Ev,
  (VTBL_ENTRY)&_ZN8S7676C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v45Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v46Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v47Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v48Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v49Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v50Ev,
  (VTBL_ENTRY)&_ZN8S7676C153v51Ev,
};
extern void _ZN8S7676C133v32Ev();
extern void ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7676C13__8S7676C15__7S7676C1[] = {
  ABISELECT(160,88),
  0,
  ABISELECT(-352,-200),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN8S7676C133v32Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev),
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__8S7676C15__7S7676C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(200,108),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C15__7S7676C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(136,80),
  ABISELECT(-376,-208),
  ABISELECT(136,80),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__8S7676C15__7S7676C1[] = {
  0,
  0,
  ABISELECT(512,288),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C15__7S7676C1[] = {
  ABISELECT(120,72),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev)();
extern void ABISELECT(_ZThn48_N8S7676C15D1Ev,_ZThn44_N8S7676C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev)();
extern void ABISELECT(_ZThn48_N8S7676C15D0Ev,_ZThn44_N8S7676C15D0Ev)() __attribute__((weak));
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A1__8S7676C15__7S7676C1[] = {
  0,
  0,
  ABISELECT(-48,-44),
  ABISELECT(-560,-332),
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev)();
extern void ABISELECT(_ZThn64_N8S7676C15D1Ev,_ZThn52_N8S7676C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev)();
extern void ABISELECT(_ZThn64_N8S7676C15D0Ev,_ZThn52_N8S7676C15D0Ev)() __attribute__((weak));
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C16__8S7676C15__7S7676C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  0,
  0,
  ABISELECT(-576,-340),
  ABISELECT(-200,-132),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S7676C15D1Ev,_ZTvn8_n28_N8S7676C15D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S7676C15D0Ev,_ZTvn8_n28_N8S7676C15D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C28S7676C16__A2__8S7676C15__7S7676C1[] = {
  ABISELECT(-592,-348),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C15D1Ev,_ZTvn8_n28_N8S7676C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C15D0Ev,_ZTvn8_n28_N8S7676C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C12__8S7676C15__7S7676C1[] = {
  0,
  0,
  ABISELECT(176,96),
  (VTBL_ENTRY)&(_ZTI8S7676C15[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A3__7S7676C1[] = {
  ABISELECT(-560,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C2__A3__7S7676C1[] = {
  0,
  0,
  ABISELECT(560,332),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void _ZN8S7676C16D1Ev();
extern void _ZN8S7676C16D0Ev();
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C16__7S7676C1[] = {
  ABISELECT(-576,-340),
  ABISELECT(-200,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C16D0Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C28S7676C16__A4__7S7676C1[] = {
  ABISELECT(-592,-348),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C28S7676C16__A4__7S7676C1[] = {
  0,
  0,
  ABISELECT(592,348),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__8S7676C16__7S7676C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(200,132),
  ABISELECT(-376,-208),
  ABISELECT(200,132),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D1Ev,_ZTv0_n16_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C16D0Ev,_ZTv0_n16_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__A1__8S7676C16__7S7676C1[] = {
  0,
  0,
  ABISELECT(576,340),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__8S7676C16__7S7676C1[] = {
  ABISELECT(184,124),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C2__A1__8S7676C16__7S7676C1[] = {
  ABISELECT(-592,-348),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7676C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D1Ev,_ZThn8_N8S7676C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7676C16D0Ev,_ZThn8_N8S7676C16D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN8S7676C17D1Ev();
extern void _ZN8S7676C17D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
extern void _ZN8S7676C173v52Ev();
extern void _ZN8S7676C173v53Ev();
extern void _ZN8S7676C173v54Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C17__7S7676C1[] = {
  ABISELECT(-240,-156),
  ABISELECT(-40,-24),
  ABISELECT(-280,-172),
  ABISELECT(-304,-184),
  ABISELECT(-616,-364),
  0,
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN8S7676C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7676C17D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v52Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v53Ev,
  (VTBL_ENTRY)&_ZN8S7676C173v54Ev,
};
extern void _ZN7S7676C7D1Ev();
extern void _ZN7S7676C7D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C78S7676C17__A2__7S7676C1[] = {
  ABISELECT(-616,-364),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN7S7676C2D1Ev();
extern void _ZN7S7676C2D0Ev();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C27S7676C78S7676C17__A5__7S7676C1[] = {
  ABISELECT(-616,-364),
  0,
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7676C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C27S7676C78S7676C17__A5__7S7676C1[] = {
  0,
  0,
  ABISELECT(616,364),
  (VTBL_ENTRY)&(_ZTI7S7676C2[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__7S7676C78S7676C17__A2__7S7676C1[] = {
  0,
  0,
  ABISELECT(616,364),
  (VTBL_ENTRY)&(_ZTI7S7676C7[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C3__8S7676C17__7S7676C1[] = {
  0,
  0,
  ABISELECT(616,364),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
};
extern void _ZN7S7676C93v16Ev();
extern void _ZN7S7676C93v17Ev();
extern void _ZN7S7676C93v18Ev();
extern void _ZN7S7676C93v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C9__8S7676C17__7S7676C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(304,184),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN7S7676C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7676C93v19Ev,
};
extern void _ZN8S7676C123v30Ev();
extern void _ZN8S7676C123v31Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C12__8S7676C17__7S7676C1[] = {
  0,
  0,
  ABISELECT(280,172),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN8S7676C123v30Ev,
  (VTBL_ENTRY)&_ZN8S7676C123v31Ev,
};
extern void _ZN7S7676C32v8Ev();
extern void _ZN7S7676C32v9Ev();
extern void ABISELECT(_ZTv0_n56_N8S7676C17D1Ev,_ZTv0_n28_N8S7676C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7676C17D0Ev,_ZTv0_n28_N8S7676C17D0Ev)();
extern void _ZN8S7676C163v41Ev();
extern void _ZN8S7676C163v42Ev();
extern void _ZN8S7676C163v43Ev();
extern void _ZN8S7676C163v44Ev();
static  VTBL_ENTRY _tg__ZTV8S7676C16__8S7676C17__7S7676C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(-576,-340),
  ABISELECT(-200,-132),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN7S7676C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7676C32v9Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C17D1Ev,_ZTv0_n28_N8S7676C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7676C17D0Ev,_ZTv0_n28_N8S7676C17D0Ev),
  (VTBL_ENTRY)&_ZN8S7676C163v41Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v42Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v43Ev,
  (VTBL_ENTRY)&_ZN8S7676C163v44Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7676C17D1Ev,_ZTv0_n16_N8S7676C17D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7676C17D0Ev,_ZTv0_n16_N8S7676C17D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
extern void _ZN7S7676C73v13Ev();
extern void _ZN7S7676C73v14Ev();
extern void _ZN7S7676C73v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C7__A1__8S7676C17__7S7676C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(240,156),
  ABISELECT(-376,-208),
  ABISELECT(240,156),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C17D1Ev,_ZTv0_n16_N8S7676C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7676C17D0Ev,_ZTv0_n16_N8S7676C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v13Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v14Ev,
  (VTBL_ENTRY)&_ZN7S7676C73v15Ev,
};
extern void _ZN10S7676C8_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7676C8_nt7S7676C7__A1__8S7676C17__7S7676C1[] = {
  ABISELECT(224,148),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&_ZN10S7676C8_nt3v12Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S7676C17D1Ev,_ZTvn8_n28_N8S7676C17D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S7676C17D0Ev,_ZTvn8_n28_N8S7676C17D0Ev)();
extern void _ZN7S7676C23v10Ev();
extern void _ZN7S7676C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7676C28S7676C16__A2__8S7676C17__7S7676C1[] = {
  ABISELECT(-592,-348),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S7676C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C17D1Ev,_ZTvn8_n28_N8S7676C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S7676C17D0Ev,_ZTvn8_n28_N8S7676C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7676C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7676C23v11Ev,
};
static  VTT_ENTRY vtt_S7676C1[] = {
  {&(_ZTV7S7676C1[13]),  13,250},
  {&(_tg__ZTV7S7676C2__A__7S7676C1[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C2__A__7S7676C1[4]),  4,6},
  {&(_ZTV7S7676C1[28]),  28,250},
  {&(_ZTV7S7676C1[53]),  53,250},
  {&(_ZTV7S7676C1[90]),  90,250},
  {&(_ZTV7S7676C1[104]),  104,250},
  {&(_ZTV7S7676C1[107]),  107,250},
  {&(_ZTV7S7676C1[114]),  114,250},
  {&(_ZTV7S7676C1[66]),  66,250},
  {&(_ZTV7S7676C1[73]),  73,250},
  {&(_ZTV7S7676C1[122]),  122,250},
  {&(_ZTV7S7676C1[131]),  131,250},
  {&(_ZTV7S7676C1[144]),  144,250},
  {&(_ZTV7S7676C1[153]),  153,250},
  {&(_ZTV7S7676C1[172]),  172,250},
  {&(_ZTV7S7676C1[188]),  188,250},
  {&(_ZTV7S7676C1[205]),  205,250},
  {&(_ZTV7S7676C1[216]),  216,250},
  {&(_ZTV7S7676C1[237]),  237,250},
  {&(_ZTV7S7676C1[249]),  249,250},
  {&(_tg__ZTV7S7676C4__7S7676C1[8]),  8,19},
  {&(_tg__ZTV7S7676C57S7676C4__7S7676C1[8]),  8,14},
  {&(_tg__ZTV7S7676C6__7S7676C57S7676C4__7S7676C1[16]),  16,28},
  {&(_tg__ZTV7S7676C3__7S7676C57S7676C4__7S7676C1[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C77S7676C6__7S7676C57S7676C4__7S7676C1[2]),  2,3},
  {&(_tg__ZTV10S7676C8_nt7S7676C6__A1__7S7676C57S7676C4__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C9__7S7676C57S7676C4__7S7676C1[6]),  6,10},
  {&(_tg__ZTV8S7676C12__7S7676C57S7676C4__7S7676C1[4]),  4,6},
  {&(_tg__ZTV8S7676C13__7S7676C57S7676C4__7S7676C1[7]),  7,10},
  {&(_tg__ZTV7S7676C7__A1__7S7676C57S7676C4__7S7676C1[10]),  10,17},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__A4__7S7676C57S7676C4__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C6__7S7676C4__7S7676C1[16]),  16,28},
  {&(_tg__ZTV7S7676C3__7S7676C4__7S7676C1[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C77S7676C6__7S7676C4__7S7676C1[2]),  2,3},
  {&(_tg__ZTV10S7676C8_nt7S7676C6__A1__7S7676C4__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C9__7S7676C4__7S7676C1[6]),  6,10},
  {&(_tg__ZTV8S7676C12__7S7676C4__7S7676C1[4]),  4,6},
  {&(_tg__ZTV8S7676C13__7S7676C4__7S7676C1[7]),  7,10},
  {&(_tg__ZTV7S7676C7__A1__7S7676C4__7S7676C1[10]),  10,17},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__A4__7S7676C4__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C6__7S7676C1[4]),  4,16},
  {&(_tg__ZTV7S7676C77S7676C6__7S7676C1[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C77S7676C6__A1__7S7676C1[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C77S7676C6__A1__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C77S7676C6__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C6__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C9__7S7676C6__7S7676C1[6]),  6,10},
  {&(_tg__ZTV8S7676C13__7S7676C1[5]),  5,8},
  {&(_tg__ZTV7S7676C9__8S7676C13__7S7676C1[6]),  6,10},
  {&(_tg__ZTV7S7676C7__8S7676C13__7S7676C1[10]),  10,17},
  {&(_tg__ZTV7S7676C3__8S7676C13__7S7676C1[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C13__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C7__A1__7S7676C1[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C7__A2__7S7676C1[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C7__A2__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C7__A1__7S7676C1[4]),  4,6},
  {&(_tg__ZTV8S7676C15__7S7676C1[9]),  9,19},
  {&(_tg__ZTV8S7676C13__8S7676C15__7S7676C1[7]),  7,10},
  {&(_tg__ZTV7S7676C9__8S7676C15__7S7676C1[6]),  6,10},
  {&(_tg__ZTV7S7676C7__8S7676C15__7S7676C1[10]),  10,17},
  {&(_tg__ZTV7S7676C3__8S7676C15__7S7676C1[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C15__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C2__A1__8S7676C15__7S7676C1[6]),  6,10},
  {&(_tg__ZTV8S7676C16__8S7676C15__7S7676C1[13]),  13,21},
  {&(_tg__ZTV7S7676C28S7676C16__A2__8S7676C15__7S7676C1[3]),  3,7},
  {&(_tg__ZTV8S7676C12__8S7676C15__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C2__A3__7S7676C1[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C2__A3__7S7676C1[4]),  4,6},
  {&(_tg__ZTV8S7676C16__7S7676C1[4]),  4,12},
  {&(_tg__ZTV7S7676C28S7676C16__A4__7S7676C1[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C28S7676C16__A4__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C7__8S7676C16__7S7676C1[10]),  10,17},
  {&(_tg__ZTV7S7676C3__A1__8S7676C16__7S7676C1[4]),  4,6},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__8S7676C16__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C2__A1__8S7676C16__7S7676C1[3]),  3,7},
  {&(_tg__ZTV8S7676C17__7S7676C1[7]),  7,17},
  {&(_tg__ZTV7S7676C78S7676C17__A2__7S7676C1[3]),  3,10},
  {&(_tg__ZTV7S7676C27S7676C78S7676C17__A5__7S7676C1[3]),  3,7},
  {&(_tg__ZTV7S7676C3__7S7676C27S7676C78S7676C17__A5__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C3__7S7676C78S7676C17__A2__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C3__8S7676C17__7S7676C1[4]),  4,6},
  {&(_tg__ZTV7S7676C9__8S7676C17__7S7676C1[6]),  6,10},
  {&(_tg__ZTV8S7676C12__8S7676C17__7S7676C1[4]),  4,6},
  {&(_tg__ZTV8S7676C16__8S7676C17__7S7676C1[13]),  13,21},
  {&(_tg__ZTV7S7676C7__A1__8S7676C17__7S7676C1[10]),  10,17},
  {&(_tg__ZTV10S7676C8_nt7S7676C7__A1__8S7676C17__7S7676C1[2]),  2,3},
  {&(_tg__ZTV7S7676C28S7676C16__A2__8S7676C17__7S7676C1[3]),  3,7},
};
extern VTBL_ENTRY _ZTI7S7676C1[];
extern  VTBL_ENTRY _ZTV7S7676C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7676C1[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7676C15D0Ev,_ZTv0_n28_N8S7676C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7676C15D0Ev,_ZThn52_N8S7676C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7676C15D1Ev,_ZTv0_n28_N8S7676C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7676C15D1Ev,_ZThn52_N8S7676C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C15D0Ev,_ZTv0_n16_N8S7676C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C15D0Ev,_ZThn44_N8S7676C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C15D1Ev,_ZTv0_n16_N8S7676C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7676C15D1Ev,_ZThn44_N8S7676C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D0Ev,_ZTv0_n16_N8S7676C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7676C13D0Ev,_ZThn8_N8S7676C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7676C13D1Ev,_ZTv0_n16_N8S7676C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7676C13D1Ev,_ZThn8_N8S7676C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C4D0Ev,_ZTv0_n16_N7S7676C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7676C4D0Ev,_ZThn200_N7S7676C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C4D1Ev,_ZTv0_n16_N7S7676C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7676C4D1Ev,_ZThn200_N7S7676C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C4D0Ev,_ZTv0_n28_N7S7676C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7676C4D0Ev,_ZThn192_N7S7676C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C4D1Ev,_ZTv0_n28_N7S7676C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7676C4D1Ev,_ZThn192_N7S7676C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C4D0Ev,_ZTv0_n20_N7S7676C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C4D0Ev,_ZThn76_N7S7676C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C4D1Ev,_ZTv0_n20_N7S7676C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C4D1Ev,_ZThn76_N7S7676C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C5D0Ev,_ZTv0_n16_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7676C5D0Ev,_ZThn200_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C5D1Ev,_ZTv0_n16_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7676C5D1Ev,_ZThn200_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C5D0Ev,_ZTv0_n28_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7676C5D0Ev,_ZThn192_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C5D1Ev,_ZTv0_n28_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7676C5D1Ev,_ZThn192_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C5D0Ev,_ZTv0_n20_N7S7676C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C5D0Ev,_ZThn76_N7S7676C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C5D1Ev,_ZTv0_n20_N7S7676C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7676C5D1Ev,_ZThn76_N7S7676C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7676C1D0Ev,_ZTv0_n32_N7S7676C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N7S7676C1D0Ev,_ZThn376_N7S7676C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7676C1D1Ev,_ZTv0_n32_N7S7676C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N7S7676C1D1Ev,_ZThn376_N7S7676C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7676C1D0Ev,_ZTv0_n44_N7S7676C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N7S7676C1D0Ev,_ZThn300_N7S7676C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7676C1D1Ev,_ZTv0_n44_N7S7676C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N7S7676C1D1Ev,_ZThn300_N7S7676C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C1D0Ev,_ZTv0_n16_N7S7676C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N7S7676C1D0Ev,_ZThn344_N7S7676C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7676C1D0Ev,_ZThn220_N7S7676C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7676C1D1Ev,_ZTv0_n16_N7S7676C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N7S7676C1D1Ev,_ZThn344_N7S7676C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7676C1D1Ev,_ZThn220_N7S7676C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C1D0Ev,_ZTv0_n28_N7S7676C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S7676C1D0Ev,_ZThn352_N7S7676C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7676C1D0Ev,_ZThn212_N7S7676C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7676C1D1Ev,_ZTv0_n28_N7S7676C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S7676C1D1Ev,_ZThn352_N7S7676C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7676C1D1Ev,_ZThn212_N7S7676C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C1D0Ev,_ZTv0_n20_N7S7676C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7676C1D0Ev,_ZThn96_N7S7676C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7676C1D1Ev,_ZTv0_n20_N7S7676C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7676C1D1Ev,_ZThn96_N7S7676C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7676C1D0Ev,_ZTv0_n40_N7S7676C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7676C1D0Ev,_ZThn20_N7S7676C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7676C1D1Ev,_ZTv0_n40_N7S7676C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7676C1D1Ev,_ZThn20_N7S7676C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7676C1 = {  "S7676C1", // class name
  bases_S7676C1, 29,
  &(vtc_S7676C1[0]), // expected_vtbl_contents
  &(vtt_S7676C1[0]), // expected_vtt_contents
  ABISELECT(784,456), // object size
  NSPAIRA(_ZTI7S7676C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7676C1),250, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7676C1),88, //virtual table table var
  29, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6060C7_nt  {
  int s6060c7f0[4];
  void  mf6060c7(); // _ZN10S6060C7_nt8mf6060c7Ev
};
//SIG(-1 S6060C7_nt) C1{ m Fi[4]}


void  S6060C7_nt ::mf6060c7(){}

//skip512 S6060C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6060C8  {
  ::S499C43 s6060c8f0;
  ::S499C43 s6060c8f1;
  void  mf6060c8(); // _ZN7S6060C88mf6060c8Ev
};
//SIG(-1 S6060C8) C1{ m FC2{ BC3{ m Fp Fi[2]}} FC2}


void  S6060C8 ::mf6060c8(){}

static void Test_S6060C8()
{
  {
    init_simple_test("S6060C8");
    S6060C8 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S6060C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C8)");
    check_field_offset(lv, s6060c8f0, 0, "S6060C8.s6060c8f0");
    check_field_offset(lv, s6060c8f1, ABISELECT(16,12), "S6060C8.s6060c8f1");
  }
}
static Arrange_To_Call_Me vS6060C8(Test_S6060C8, "S6060C8", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6060C10_nt  : S499C29_nt {
  int s6060c10f0;
};
//SIG(-1 S6060C10_nt) C1{ BC2{ m Fi[3]} Fi}



//skip512 S6060C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S499C29_nt;
static Base_Class bases_S6060C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C29_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S6060C2  {
  void *s6060c2f0[7];
  int s6060c2f1[8];
  ::S7368C78 s6060c2f2;
  ::S7368C78 s6060c2f3;
  ::S499C21_nt s6060c2f4;
  ::S499C21_nt s6060c2f5;
  ::S499C21_nt s6060c2f6;
  ::S6712C22 s6060c2f7;
  ::S7368C78 s6060c2f8;
  ::S7368C78 s6060c2f9;
  ::S6060C7_nt s6060c2f10;
  ::S6060C8 s6060c2f11;
  int s6060c2f12;
  ::S6060C10_nt s6060c2f13;
  int s6060c2f14[2];
  ::S6060C7_nt s6060c2f15;
  ::S6060C7_nt s6060c2f16;
  int s6060c2f17[2];
  void  mf6060c2(); // _ZN7S6060C28mf6060c2Ev
};
//SIG(-1 S6060C2) C1{ m Fp[7] Fi[8] FC2{ m} FC2 FC3{ m Fi[4]} FC3 FC3 FC4{ BC5{ m Fp Fi[2]}} FC2 FC2 FC6{ m Fi[4]} FC7{ m FC8{ BC5} FC8} Fi FC9{ BC10{ m Fi[3]} Fi} Fi[2] FC6 FC6 Fi[2]}


void  S6060C2 ::mf6060c2(){}

static void Test_S6060C2()
{
  {
    init_simple_test("S6060C2");
    S6060C2 lv;
    check2(sizeof(lv), ABISELECT(288,236), "sizeof(S6060C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C2)");
    check_field_offset(lv, s6060c2f0, 0, "S6060C2.s6060c2f0");
    check_field_offset(lv, s6060c2f1, ABISELECT(56,28), "S6060C2.s6060c2f1");
    check_field_offset(lv, s6060c2f2, ABISELECT(88,60), "S6060C2.s6060c2f2");
    check_field_offset(lv, s6060c2f3, ABISELECT(89,61), "S6060C2.s6060c2f3");
    check_field_offset(lv, s6060c2f4, ABISELECT(92,64), "S6060C2.s6060c2f4");
    check_field_offset(lv, s6060c2f5, ABISELECT(108,80), "S6060C2.s6060c2f5");
    check_field_offset(lv, s6060c2f6, ABISELECT(124,96), "S6060C2.s6060c2f6");
    check_field_offset(lv, s6060c2f7, ABISELECT(144,112), "S6060C2.s6060c2f7");
    check_field_offset(lv, s6060c2f8, ABISELECT(160,124), "S6060C2.s6060c2f8");
    check_field_offset(lv, s6060c2f9, ABISELECT(161,125), "S6060C2.s6060c2f9");
    check_field_offset(lv, s6060c2f10, ABISELECT(164,128), "S6060C2.s6060c2f10");
    check_field_offset(lv, s6060c2f11, ABISELECT(184,144), "S6060C2.s6060c2f11");
    check_field_offset(lv, s6060c2f12, ABISELECT(216,168), "S6060C2.s6060c2f12");
    check_field_offset(lv, s6060c2f13, ABISELECT(220,172), "S6060C2.s6060c2f13");
    check_field_offset(lv, s6060c2f14, ABISELECT(236,188), "S6060C2.s6060c2f14");
    check_field_offset(lv, s6060c2f15, ABISELECT(244,196), "S6060C2.s6060c2f15");
    check_field_offset(lv, s6060c2f16, ABISELECT(260,212), "S6060C2.s6060c2f16");
    check_field_offset(lv, s6060c2f17, ABISELECT(276,228), "S6060C2.s6060c2f17");
  }
}
static Arrange_To_Call_Me vS6060C2(Test_S6060C2, "S6060C2", ABISELECT(288,236));

#else // __cplusplus

Class_Descriptor cd_S6060C2 = {  "S6060C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(288,236), // 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  S6060C12_nt  {
  void *s6060c12f0;
  int s6060c12f1[6];
  void  mf6060c12(); // _ZN11S6060C12_nt9mf6060c12Ev
};
//SIG(-1 S6060C12_nt) C1{ m Fp Fi[6]}


void  S6060C12_nt ::mf6060c12(){}

//skip512 S6060C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6060C15_nt  {
  ::S499C18 s6060c15f0;
  void  mf6060c15(); // _ZN11S6060C15_nt9mf6060c15Ev
};
//SIG(1 S6060C15_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}}}


void  S6060C15_nt ::mf6060c15(){}

//skip512 S6060C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S6060C22_nt

#else // __cplusplus

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



static void Test_S6060C24()
{
  extern Class_Descriptor cd_S6060C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6060C24, buf);
    S6060C24 &lv = *(new (buf) S6060C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6060C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C24)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S6060C24");
    test_class_info(&lv, &cd_S6060C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6060C24(Test_S6060C24, "S6060C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
static Base_Class bases_S6060C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6060C24 = {  "S6060C24", // class name
  bases_S6060C24, 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  S6060C20  {
  ::S499C9_nt s6060c20f0;
  ::S6060C22_nt s6060c20f1;
  ::S6060C22_nt s6060c20f2;
  int s6060c20f3[2];
  ::S6060C24 s6060c20f4;
  ::S499C9_nt s6060c20f5;
  ::S6060C24 s6060c20f6;
  void  mf6060c20(); // _ZN8S6060C209mf6060c20Ev
};
//SIG(-1 S6060C20) C1{ m FC2{ BC3{ m Fp Fi[2]}} FC4{ BC3} FC4 Fi[2] FC5{ BC3} FC2 FC5}


void  S6060C20 ::mf6060c20(){}

static void Test_S6060C20()
{
  {
    init_simple_test("S6060C20");
    S6060C20 lv;
    check2(sizeof(lv), ABISELECT(104,80), "sizeof(S6060C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C20)");
    check_field_offset(lv, s6060c20f0, 0, "S6060C20.s6060c20f0");
    check_field_offset(lv, s6060c20f1, ABISELECT(16,12), "S6060C20.s6060c20f1");
    check_field_offset(lv, s6060c20f2, ABISELECT(32,24), "S6060C20.s6060c20f2");
    check_field_offset(lv, s6060c20f3, ABISELECT(48,36), "S6060C20.s6060c20f3");
    check_field_offset(lv, s6060c20f4, ABISELECT(56,44), "S6060C20.s6060c20f4");
    check_field_offset(lv, s6060c20f5, ABISELECT(72,56), "S6060C20.s6060c20f5");
    check_field_offset(lv, s6060c20f6, ABISELECT(88,68), "S6060C20.s6060c20f6");
  }
}
static Arrange_To_Call_Me vS6060C20(Test_S6060C20, "S6060C20", ABISELECT(104,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S6060C26()
{
  extern Class_Descriptor cd_S6060C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6060C26, buf);
    S6060C26 &lv = *(new (buf) S6060C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6060C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C26)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S6060C26");
    test_class_info(&lv, &cd_S6060C26);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6060C26(Test_S6060C26, "S6060C26", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
static Base_Class bases_S6060C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6060C26 = {  "S6060C26", // class name
  bases_S6060C26, 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  S6060C28_nt  {
  int s6060c28f0[5];
  void  mf6060c28(); // _ZN11S6060C28_nt9mf6060c28Ev
};
//SIG(-1 S6060C28_nt) C1{ m Fi[5]}


void  S6060C28_nt ::mf6060c28(){}

//skip512 S6060C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S6060C29()
{
  extern Class_Descriptor cd_S6060C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6060C29, buf);
    S6060C29 &lv = *(new (buf) S6060C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6060C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C29)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S6060C29");
    test_class_info(&lv, &cd_S6060C29);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6060C29(Test_S6060C29, "S6060C29", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S6060C32()
{
  extern Class_Descriptor cd_S6060C32;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6060C32, buf);
    S6060C32 &lv = *(new (buf) S6060C32());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6060C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C32)");
    check_base_class_offset(lv, (S499C10_nt*), 0, "S6060C32");
    test_class_info(&lv, &cd_S6060C32);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6060C32(Test_S6060C32, "S6060C32", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S499C10_nt;
static Base_Class bases_S6060C32[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S499C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6060C32 = {  "S6060C32", // class name
  bases_S6060C32, 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  S6060C30  {
  ::S6060C29 s6060c30f0;
  ::S6060C32 s6060c30f1;
  void *s6060c30f2;
  int s6060c30f3[2];
  void *s6060c30f4;
  void  mf6060c30(); // _ZN8S6060C309mf6060c30Ev
};
//SIG(-1 S6060C30) C1{ m FC2{ BC3{ m Fp Fi[2]}} FC4{ BC3} Fp Fi[2] Fp}


void  S6060C30 ::mf6060c30(){}

static void Test_S6060C30()
{
  {
    init_simple_test("S6060C30");
    S6060C30 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S6060C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C30)");
    check_field_offset(lv, s6060c30f0, 0, "S6060C30.s6060c30f0");
    check_field_offset(lv, s6060c30f1, ABISELECT(16,12), "S6060C30.s6060c30f1");
    check_field_offset(lv, s6060c30f2, ABISELECT(32,24), "S6060C30.s6060c30f2");
    check_field_offset(lv, s6060c30f3, ABISELECT(40,28), "S6060C30.s6060c30f3");
    check_field_offset(lv, s6060c30f4, ABISELECT(48,36), "S6060C30.s6060c30f4");
  }
}
static Arrange_To_Call_Me vS6060C30(Test_S6060C30, "S6060C30", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6060C1  : S6060C2 {
  ::S6060C12_nt s6060c1f0;
  ::S6060C12_nt s6060c1f1;
  ::S499C39 s6060c1f2;
  ::S6060C12_nt s6060c1f3;
  ::S6060C12_nt s6060c1f4;
  ::S6060C12_nt s6060c1f5;
  ::S499C18 s6060c1f6;
  ::S499C18 s6060c1f7;
  ::S6060C15_nt s6060c1f8[4];
  ::S6060C8 s6060c1f9[4];
  ::S6060C15_nt s6060c1f10[4];
  ::S499C14 s6060c1f11;
  ::S6060C20 s6060c1f12[4];
  ::S6060C26 s6060c1f13[4];
  int s6060c1f14:4;
  int s6060c1f15:4;
  ::S6060C26 s6060c1f16;
  int s6060c1f17[16];
  ::S499C21_nt s6060c1f18[4];
  int s6060c1f19[7];
  ::S7368C78 s6060c1f20;
  ::S6060C28_nt s6060c1f21;
  ::S6060C29 s6060c1f22;
  int s6060c1f23[2];
  ::S6060C30 s6060c1f24;
  ::S6060C30 s6060c1f25;
};
//SIG(1 S6060C1) C1{ BC2{ m Fp[7] Fi[8] FC3{ m} FC3 FC4{ m Fi[4]} FC4 FC4 FC5{ BC6{ m Fp Fi[2]}} FC3 FC3 FC7{ m Fi[4]} FC8{ m FC9{ BC6} FC9} Fi FC10{ BC11{ m Fi[3]} Fi} Fi[2] FC7 FC7 Fi[2]} FC12{ m Fp Fi[6]} FC12 FC13{ BC6} FC12 FC12 FC12 FC14{ BC6} FC14 FC15{ m FC14}[4] FC8[4] FC15[4] FC16{ BC6} FC17{ m FC18{ BC6} FC19{ BC6} FC19 Fi[2] FC20{ BC6} FC18 FC20}[4] FC21{ BC6}[4] Fi:4 Fi:4 FC21 Fi[16] FC4[4] Fi[7] FC3 FC22{ m Fi[5]} FC23{ BC6} Fi[2] FC24{ m FC23 FC25{ BC6} Fp Fi[2] Fp} FC24}



static void Test_S6060C1()
{
  extern Class_Descriptor cd_S6060C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(200,321)];
    init_test(&cd_S6060C1, buf);
    S6060C1 &lv = *(new (buf) S6060C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1592,1280), "sizeof(S6060C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6060C1)");
    check_base_class_offset(lv, (S6060C2*), 0, "S6060C1");
    check_field_offset(lv, s6060c1f0, ABISELECT(288,236), "S6060C1.s6060c1f0");
    check_field_offset(lv, s6060c1f1, ABISELECT(320,264), "S6060C1.s6060c1f1");
    check_field_offset(lv, s6060c1f2, ABISELECT(352,292), "S6060C1.s6060c1f2");
    check_field_offset(lv, s6060c1f3, ABISELECT(368,304), "S6060C1.s6060c1f3");
    check_field_offset(lv, s6060c1f4, ABISELECT(400,332), "S6060C1.s6060c1f4");
    check_field_offset(lv, s6060c1f5, ABISELECT(432,360), "S6060C1.s6060c1f5");
    check_field_offset(lv, s6060c1f6, ABISELECT(464,388), "S6060C1.s6060c1f6");
    check_field_offset(lv, s6060c1f7, ABISELECT(480,400), "S6060C1.s6060c1f7");
    check_field_offset(lv, s6060c1f8, ABISELECT(496,412), "S6060C1.s6060c1f8");
    check_field_offset(lv, s6060c1f9, ABISELECT(560,460), "S6060C1.s6060c1f9");
    check_field_offset(lv, s6060c1f10, ABISELECT(688,556), "S6060C1.s6060c1f10");
    check_field_offset(lv, s6060c1f11, ABISELECT(752,604), "S6060C1.s6060c1f11");
    check_field_offset(lv, s6060c1f12, ABISELECT(768,616), "S6060C1.s6060c1f12");
    check_field_offset(lv, s6060c1f13, ABISELECT(1184,936), "S6060C1.s6060c1f13");
    set_bf_and_test(lv, s6060c1f14, ABISELECT(1248,984), 0, 4, 1, "S6060C1");
    set_bf_and_test(lv, s6060c1f14, ABISELECT(1248,984), 0, 4, hide_sll(1LL<<3), "S6060C1");
    set_bf_and_test(lv, s6060c1f15, ABISELECT(1248,984), 4, 4, 1, "S6060C1");
    set_bf_and_test(lv, s6060c1f15, ABISELECT(1248,984), 4, 4, hide_sll(1LL<<3), "S6060C1");
    check_field_offset(lv, s6060c1f16, ABISELECT(1256,988), "S6060C1.s6060c1f16");
    check_field_offset(lv, s6060c1f17, ABISELECT(1272,1000), "S6060C1.s6060c1f17");
    check_field_offset(lv, s6060c1f18, ABISELECT(1336,1064), "S6060C1.s6060c1f18");
    check_field_offset(lv, s6060c1f19, ABISELECT(1400,1128), "S6060C1.s6060c1f19");
    check_field_offset(lv, s6060c1f20, ABISELECT(1428,1156), "S6060C1.s6060c1f20");
    check_field_offset(lv, s6060c1f21, ABISELECT(1432,1160), "S6060C1.s6060c1f21");
    check_field_offset(lv, s6060c1f22, ABISELECT(1456,1180), "S6060C1.s6060c1f22");
    check_field_offset(lv, s6060c1f23, ABISELECT(1472,1192), "S6060C1.s6060c1f23");
    check_field_offset(lv, s6060c1f24, ABISELECT(1480,1200), "S6060C1.s6060c1f24");
    check_field_offset(lv, s6060c1f25, ABISELECT(1536,1240), "S6060C1.s6060c1f25");
    test_class_info(&lv, &cd_S6060C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6060C1(Test_S6060C1, "S6060C1", ABISELECT(1592,1280));

#else // __cplusplus

extern Class_Descriptor cd_S6060C2;
static Base_Class bases_S6060C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6060C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6060C1 = {  "S6060C1", // class name
  bases_S6060C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(1592,1280), // 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  S3464C5  {
  void *s3464c5f0;
  int s3464c5f1;
  long double s3464c5f2;
  int s3464c5f3[2];
  char s3464c5f4;
  virtual void  v1(); // _ZN7S3464C52v1Ev
  virtual void  v2(); // _ZN7S3464C52v2Ev
  ~S3464C5(); // tgen
  S3464C5(); // tgen
};
//SIG(-1 S3464C5) C1{ v1 v2 Fp Fi FD Fi[2] Fc}


void  S3464C5 ::v1(){vfunc_called(this, "_ZN7S3464C52v1Ev");}
void  S3464C5 ::v2(){vfunc_called(this, "_ZN7S3464C52v2Ev");}
S3464C5 ::~S3464C5(){ note_dtor("S3464C5", this);} // tgen
S3464C5 ::S3464C5(){ note_ctor("S3464C5", this);} // tgen

static void Test_S3464C5()
{
  extern Class_Descriptor cd_S3464C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S3464C5, buf);
    S3464C5 *dp, &lv = *(dp=new (buf) S3464C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3464C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C5)");
    check_field_offset(lv, s3464c5f0, ABISELECT(8,4), "S3464C5.s3464c5f0");
    check_field_offset(lv, s3464c5f1, ABISELECT(16,8), "S3464C5.s3464c5f1");
    check_field_offset(lv, s3464c5f2, ABISELECT(32,12), "S3464C5.s3464c5f2");
    check_field_offset(lv, s3464c5f3, ABISELECT(48,24), "S3464C5.s3464c5f3");
    check_field_offset(lv, s3464c5f4, ABISELECT(56,32), "S3464C5.s3464c5f4");
    test_class_info(&lv, &cd_S3464C5);
    dp->~S3464C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C5(Test_S3464C5, "S3464C5", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3464C5C1Ev();
extern void _ZN7S3464C5D1Ev();
Name_Map name_map_S3464C5[] = {
  NSPAIR(_ZN7S3464C5C1Ev),
  NSPAIR(_ZN7S3464C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3464C5[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY vtc_S3464C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C5[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
Class_Descriptor cd_S3464C5 = {  "S3464C5", // class name
  0,0,//no base classes
  &(vtc_S3464C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3464C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3464C5),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  S3464C4  : S3464C5 {
  void *s3464c4f0;
  __tsi64 s3464c4f1;
  int s3464c4f2;
  char s3464c4f3:8;
  char s3464c4f4;
  void *s3464c4f5;
  short s3464c4f6;
  long double s3464c4f7;
  virtual  ~S3464C4(); // _ZN7S3464C4D1Ev
  S3464C4(); // tgen
};
//SIG(-1 S3464C4) C1{ BC2{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD}


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

static void Test_S3464C4()
{
  extern Class_Descriptor cd_S3464C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S3464C4, buf);
    S3464C4 *dp, &lv = *(dp=new (buf) S3464C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S3464C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C4)");
    check_base_class_offset(lv, (S3464C5*), 0, "S3464C4");
    check_field_offset(lv, s3464c4f0, ABISELECT(64,36), "S3464C4.s3464c4f0");
    check_field_offset(lv, s3464c4f1, ABISELECT(72,40), "S3464C4.s3464c4f1");
    check_field_offset(lv, s3464c4f2, ABISELECT(80,48), "S3464C4.s3464c4f2");
    set_bf_and_test(lv, s3464c4f3, ABISELECT(84,52), 0, 8, 1, "S3464C4");
    set_bf_and_test(lv, s3464c4f3, ABISELECT(84,52), 0, 8, hide_sll(1LL<<7), "S3464C4");
    check_field_offset(lv, s3464c4f4, ABISELECT(85,53), "S3464C4.s3464c4f4");
    check_field_offset(lv, s3464c4f5, ABISELECT(88,56), "S3464C4.s3464c4f5");
    check_field_offset(lv, s3464c4f6, ABISELECT(96,60), "S3464C4.s3464c4f6");
    check_field_offset(lv, s3464c4f7, ABISELECT(112,64), "S3464C4.s3464c4f7");
    test_class_info(&lv, &cd_S3464C4);
    dp->~S3464C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C4(Test_S3464C4, "S3464C4", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S3464C4C1Ev();
extern void _ZN7S3464C4D1Ev();
Name_Map name_map_S3464C4[] = {
  NSPAIR(_ZN7S3464C4C1Ev),
  NSPAIR(_ZN7S3464C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
static Base_Class bases_S3464C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3464C4[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C4D1Ev();
extern void _ZN7S3464C4D0Ev();
static  VTBL_ENTRY vtc_S3464C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C4[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
Class_Descriptor cd_S3464C4 = {  "S3464C4", // class name
  bases_S3464C4, 1,
  &(vtc_S3464C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S3464C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3464C4),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  S3464C3  : virtual S3464C4 , S3464C5 {
  int s3464c3f0;
  ::S3464C4 s3464c3f1;
  int s3464c3f2;
  virtual  ~S3464C3(); // _ZN7S3464C3D2Ev
  S3464C3(); // tgen
};
//SIG(-1 S3464C3) C1{ VBC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC3 vd Fi FC2 Fi}


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

static void Test_S3464C3()
{
  extern Class_Descriptor cd_S3464C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S3464C3, buf);
    S3464C3 *dp, &lv = *(dp=new (buf) S3464C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S3464C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C3)");
    check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(208,120), "S3464C3");
    check_base_class_offset(lv, (S3464C4*), ABISELECT(208,120), "S3464C3");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*), 0, "S3464C3");
    check_field_offset(lv, s3464c3f0, ABISELECT(60,36), "S3464C3.s3464c3f0");
    check_field_offset(lv, s3464c3f1, ABISELECT(64,40), "S3464C3.s3464c3f1");
    check_field_offset(lv, s3464c3f2, ABISELECT(192,116), "S3464C3.s3464c3f2");
    test_class_info(&lv, &cd_S3464C3);
    dp->~S3464C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C3(Test_S3464C3, "S3464C3", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S3464C3C1Ev();
extern void _ZN7S3464C3D2Ev();
Name_Map name_map_S3464C3[] = {
  NSPAIR(_ZN7S3464C3C1Ev),
  NSPAIR(_ZN7S3464C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
static Base_Class bases_S3464C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(208,120), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3464C3[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn208_N7S3464C3D1Ev,_ZThn120_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn208_N7S3464C3D0Ev,_ZThn120_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3464C3[] = {
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
  ABISELECT(-208,-120),
  0,
  0,
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S3464C3[];
static  VTT_ENTRY vtt_S3464C3[] = {
  {&(_ZTV7S3464C3[3]),  3,16},
  {&(_ZTV7S3464C3[12]),  12,16},
};
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S3464C3D0Ev,_ZThn120_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S3464C3D1Ev,_ZThn120_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C3 = {  "S3464C3", // class name
  bases_S3464C3, 3,
  &(vtc_S3464C3[0]), // expected_vtbl_contents
  &(vtt_S3464C3[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S3464C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3464C3),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3464C3),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C2  : S3464C3 {
  int s3464c2f0;
  void *s3464c2f1;
  int s3464c2f2[2];
  virtual  ~S3464C2(); // _ZN7S3464C2D2Ev
  S3464C2(); // tgen
};
//SIG(-1 S3464C2) C1{ BC2{ VBC3{ BC4{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC4 vd Fi FC3 Fi} vd Fi Fp Fi[2]}


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

static void Test_S3464C2()
{
  extern Class_Descriptor cd_S3464C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,54)];
    init_test(&cd_S3464C2, buf);
    S3464C2 *dp, &lv = *(dp=new (buf) S3464C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,212), "sizeof(S3464C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C2)");
    check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(224,136), "S3464C2");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(224,136), "S3464C2");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), 0, "S3464C2");
    check_base_class_offset(lv, (S3464C3*), 0, "S3464C2");
    check_field_offset(lv, s3464c2f0, ABISELECT(196,120), "S3464C2.s3464c2f0");
    check_field_offset(lv, s3464c2f1, ABISELECT(200,124), "S3464C2.s3464c2f1");
    check_field_offset(lv, s3464c2f2, ABISELECT(208,128), "S3464C2.s3464c2f2");
    test_class_info(&lv, &cd_S3464C2);
    dp->~S3464C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C2(Test_S3464C2, "S3464C2", ABISELECT(352,212));

#else // __cplusplus

extern void _ZN7S3464C2C1Ev();
extern void _ZN7S3464C2D2Ev();
Name_Map name_map_S3464C2[] = {
  NSPAIR(_ZN7S3464C2C1Ev),
  NSPAIR(_ZN7S3464C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
static Base_Class bases_S3464C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(224,136), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3464C2[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn136_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn136_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3464C2[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
  ABISELECT(-224,-136),
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S3464C2[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__7S3464C2[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn136_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn136_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__7S3464C2[] = {
  ABISELECT(-224,-136),
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
static  VTT_ENTRY vtt_S3464C2[] = {
  {&(_ZTV7S3464C2[3]),  3,16},
  {&(_tg__ZTV7S3464C3__7S3464C2[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__7S3464C2[5]),  5,9},
  {&(_ZTV7S3464C2[12]),  12,16},
};
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn136_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn136_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn136_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn136_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C2 = {  "S3464C2", // class name
  bases_S3464C2, 4,
  &(vtc_S3464C2[0]), // expected_vtbl_contents
  &(vtt_S3464C2[0]), // expected_vtt_contents
  ABISELECT(352,212), // object size
  NSPAIRA(_ZTI7S3464C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3464C2),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3464C2),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C8  : virtual S3464C4 {
  int s3464c8f0;
  ~S3464C8(); // tgen
  S3464C8(); // tgen
};
//SIG(-1 S3464C8) C1{ VBC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi}


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

static void Test_S3464C8()
{
  extern Class_Descriptor cd_S3464C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,22)];
    init_test(&cd_S3464C8, buf);
    S3464C8 *dp, &lv = *(dp=new (buf) S3464C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S3464C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C8)");
    check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(16,8), "S3464C8");
    check_base_class_offset(lv, (S3464C4*), ABISELECT(16,8), "S3464C8");
    check_field_offset(lv, s3464c8f0, ABISELECT(8,4), "S3464C8.s3464c8f0");
    test_class_info(&lv, &cd_S3464C8);
    dp->~S3464C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C8(Test_S3464C8, "S3464C8", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S3464C8C1Ev();
extern void _ZN7S3464C8D1Ev();
Name_Map name_map_S3464C8[] = {
  NSPAIR(_ZN7S3464C8C1Ev),
  NSPAIR(_ZN7S3464C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
static Base_Class bases_S3464C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3464C8[];
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3464C8D1Ev,_ZThn8_N7S3464C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S3464C8D0Ev,_ZThn8_N7S3464C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3464C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
  ABISELECT(-16,-8),
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S3464C8[];
static  VTT_ENTRY vtt_S3464C8[] = {
  {&(_ZTV7S3464C8[3]),  3,14},
  {&(_ZTV7S3464C8[10]),  10,14},
};
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3464C8D0Ev,_ZThn8_N7S3464C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3464C8D1Ev,_ZThn8_N7S3464C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C8 = {  "S3464C8", // class name
  bases_S3464C8, 2,
  &(vtc_S3464C8[0]), // expected_vtbl_contents
  &(vtt_S3464C8[0]), // expected_vtt_contents
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S3464C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3464C8),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3464C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C11  : virtual S3464C4 , virtual S3464C3 , S3464C2 , virtual S3464C5 {
  ::S19558C11 s3464c11f0;
  virtual  ~S3464C11(); // _ZN8S3464C11D2Ev
  virtual void  v3(); // _ZN8S3464C112v3Ev
  S3464C11(); // tgen
};
//SIG(-1 S3464C11) C1{ VBC2{ BC3{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC4{ VBC2 BC3 vd Fi FC2 Fi} BC5{ BC4 vd Fi Fp Fi[2]} VBC3 vd v1 FU6{ m Fi[2] FL}}


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

static void Test_S3464C11()
{
  extern Class_Descriptor cd_S3464C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,95)];
    init_test(&cd_S3464C11, buf);
    S3464C11 *dp, &lv = *(dp=new (buf) S3464C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,376), "sizeof(S3464C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C11)");
    check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(224,144), "S3464C11");
    check_base_class_offset(lv, (S3464C4*), ABISELECT(224,144), "S3464C11");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(224,144), "S3464C11");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*), ABISELECT(224,144), "S3464C11");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(352,220), "S3464C11");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*), ABISELECT(352,220), "S3464C11");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*), 0, "S3464C11");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*), 0, "S3464C11");
    check_base_class_offset(lv, (S3464C2*), 0, "S3464C11");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*), ABISELECT(560,340), "S3464C11");
    check_field_offset(lv, s3464c11f0, ABISELECT(216,136), "S3464C11.s3464c11f0");
    test_class_info(&lv, &cd_S3464C11);
    dp->~S3464C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C11(Test_S3464C11, "S3464C11", ABISELECT(624,376));

#else // __cplusplus

extern void _ZN8S3464C11C1Ev();
extern void _ZN8S3464C11D2Ev();
Name_Map name_map_S3464C11[] = {
  NSPAIR(_ZN8S3464C11C1Ev),
  NSPAIR(_ZN8S3464C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
static Base_Class bases_S3464C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(224,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3464C3,    ABISELECT(352,220), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3464C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(560,340), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3464C11[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn224_N8S3464C11D1Ev,_ZThn144_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn224_N8S3464C11D0Ev,_ZThn144_N8S3464C11D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C11D1Ev,_ZThn220_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn352_N8S3464C11D0Ev,_ZThn220_N8S3464C11D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY vtc_S3464C11[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S3464C11[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C2__8S3464C11[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C2__A1__8S3464C11[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C2__A1__8S3464C11[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C2__8S3464C11[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C11[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__8S3464C11[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
static  VTT_ENTRY vtt_S3464C11[] = {
  {&(_ZTV8S3464C11[5]),  5,35},
  {&(_tg__ZTV7S3464C2__8S3464C11[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C2__A1__8S3464C11[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C2__A1__8S3464C11[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C2__8S3464C11[5]),  5,9},
  {&(_ZTV8S3464C11[15]),  15,35},
  {&(_ZTV8S3464C11[25]),  25,35},
  {&(_ZTV8S3464C11[33]),  33,35},
  {&(_tg__ZTV7S3464C3__8S3464C11[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__8S3464C11[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C11D0Ev,_ZThn220_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C11D1Ev,_ZThn220_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C11D0Ev,_ZThn144_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C11D1Ev,_ZThn144_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C11 = {  "S3464C11", // class name
  bases_S3464C11, 8,
  &(vtc_S3464C11[0]), // expected_vtbl_contents
  &(vtt_S3464C11[0]), // expected_vtt_contents
  ABISELECT(624,376), // object size
  NSPAIRA(_ZTI8S3464C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3464C11),35, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3464C11),10, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C10  : virtual S3464C5 , S3464C11 , S3464C4 , virtual S3464C8 , S3464C3 {
  int s3464c10f0;
  int s3464c10f1;
  int s3464c10f2;
  virtual  ~S3464C10(); // _ZN8S3464C10D2Ev
  virtual void  v4(); // _ZN8S3464C102v4Ev
  S3464C10(); // tgen
};
//SIG(-1 S3464C10) C1{ VBC2{ v2 v3 Fp Fi FD Fi[2] Fc} BC3{ VBC4{ BC2 vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC4 BC2 vd Fi FC4 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC2 vd v4 FU7{ m Fi[2] FL}} BC4 VBC8{ VBC4 Fi} BC5 vd v1 Fi Fi Fi}


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

static void Test_S3464C10()
{
  extern Class_Descriptor cd_S3464C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(62,149)];
    init_test(&cd_S3464C10, buf);
    S3464C10 *dp, &lv = *(dp=new (buf) S3464C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(976,592), "sizeof(S3464C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C10)");
    /*is_ambiguous_... S3464C10::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*), ABISELECT(560,352), "S3464C10");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*), ABISELECT(560,352), "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(624,388), "S3464C10");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*), ABISELECT(624,388), "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(624,388), "S3464C10");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(624,388), "S3464C10");
    check_base_class_offset(lv, (S3464C4*)(S3464C8*), ABISELECT(624,388), "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(624,388), "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(752,464), "S3464C10");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*), ABISELECT(752,464), "S3464C10");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*), 0, "S3464C10");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*), 0, "S3464C10");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*), 0, "S3464C10");
    check_base_class_offset(lv, (S3464C11*), 0, "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(224,144), "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*), ABISELECT(224,144), "S3464C10");
    check_base_class_offset(lv, (S3464C8*), ABISELECT(952,584), "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(352,220), "S3464C10");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*), ABISELECT(352,220), "S3464C10");
    check_field_offset(lv, s3464c10f0, ABISELECT(548,340), "S3464C10.s3464c10f0");
    check_field_offset(lv, s3464c10f1, ABISELECT(552,344), "S3464C10.s3464c10f1");
    check_field_offset(lv, s3464c10f2, ABISELECT(556,348), "S3464C10.s3464c10f2");
    test_class_info(&lv, &cd_S3464C10);
    dp->~S3464C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C10(Test_S3464C10, "S3464C10", ABISELECT(976,592));

#else // __cplusplus

extern void _ZN8S3464C10C1Ev();
extern void _ZN8S3464C10D2Ev();
Name_Map name_map_S3464C10[] = {
  NSPAIR(_ZN8S3464C10C1Ev),
  NSPAIR(_ZN8S3464C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
static Base_Class bases_S3464C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(560,352), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(624,388), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(752,464), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3464C3,    ABISELECT(752,464), //bcp->offset
    40, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3464C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3464C11,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(224,144), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C8,    ABISELECT(952,584), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(352,220), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3464C10[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C10D1Ev();
extern void _ZN8S3464C10D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn224_N8S3464C10D1Ev,_ZThn144_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S3464C10D0Ev,_ZThn144_N8S3464C10D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn624_N8S3464C10D1Ev,_ZThn388_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn624_N8S3464C10D0Ev,_ZThn388_N8S3464C10D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn752_N8S3464C10D1Ev,_ZThn464_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn752_N8S3464C10D0Ev,_ZThn464_N8S3464C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn952_N8S3464C10D1Ev,_ZThn584_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn952_N8S3464C10D0Ev,_ZThn584_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3464C10[] = {
  ABISELECT(952,584),
  ABISELECT(560,352),
  ABISELECT(752,464),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S3464C10D1Ev,_ZThn144_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S3464C10D0Ev,_ZThn144_N8S3464C10D0Ev),
  ABISELECT(272,168),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev),
  0,
  0,
  ABISELECT(-560,-352),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev),
  ABISELECT(-752,-464),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-752,-464),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev),
  ABISELECT(-952,-584),
  ABISELECT(-328,-196),
  ABISELECT(-952,-584),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S3464C10[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C10[] = {
  ABISELECT(560,352),
  ABISELECT(752,464),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C11__8S3464C10[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C10[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn624_N7S3464C3D1Ev,_ZThn388_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn624_N7S3464C3D0Ev,_ZThn388_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C10[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn624_N7S3464C2D1Ev,_ZThn388_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn624_N7S3464C2D0Ev,_ZThn388_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C10[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn624_N8S3464C11D1Ev,_ZThn388_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn624_N8S3464C11D0Ev,_ZThn388_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C11__8S3464C10[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn752_N8S3464C11D1Ev,_ZThn464_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn752_N8S3464C11D0Ev,_ZThn464_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C11__8S3464C10[] = {
  ABISELECT(-752,-464),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-752,-464),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C11__8S3464C10[] = {
  0,
  0,
  ABISELECT(-560,-352),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__8S3464C10[] = {
  ABISELECT(272,168),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S3464C3D1Ev,_ZThn168_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn272_N7S3464C3D0Ev,_ZThn168_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__A__8S3464C10[] = {
  ABISELECT(-272,-168),
  0,
  0,
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C10[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__8S3464C10[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C8__8S3464C10[] = {
  ABISELECT(-328,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C8__8S3464C10[] = {
  ABISELECT(328,196),
  0,
  0,
  ABISELECT(328,196),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
static  VTT_ENTRY vtt_S3464C10[] = {
  {&(_ZTV8S3464C10[6]),  6,56},
  {&(_tg__ZTV8S3464C11__8S3464C10[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C11__8S3464C10[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C10[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C10[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C10[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C11__8S3464C10[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C11__8S3464C10[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C11__8S3464C10[4]),  4,6},
  {&(_tg__ZTV7S3464C3__A__8S3464C10[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__A__8S3464C10[5]),  5,9},
  {&(_ZTV8S3464C10[29]),  29,56},
  {&(_ZTV8S3464C10[36]),  36,56},
  {&(_ZTV8S3464C10[46]),  46,56},
  {&(_ZTV8S3464C10[54]),  54,56},
  {&(_ZTV8S3464C10[21]),  21,56},
  {&(_tg__ZTV7S3464C3__8S3464C10[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__8S3464C10[5]),  5,9},
  {&(_tg__ZTV7S3464C8__8S3464C10[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C8__8S3464C10[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3464C10[];
extern  VTBL_ENTRY _ZTV8S3464C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C10[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S3464C11D0Ev,_ZThn464_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S3464C11D1Ev,_ZThn464_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3464C11D0Ev,_ZThn388_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3464C11D1Ev,_ZThn388_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3464C2D0Ev,_ZThn388_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3464C2D1Ev,_ZThn388_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S3464C3D0Ev,_ZThn168_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3464C3D0Ev,_ZThn388_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S3464C3D1Ev,_ZThn168_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3464C3D1Ev,_ZThn388_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn952_N8S3464C10D0Ev,_ZThn584_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn952_N8S3464C10D1Ev,_ZThn584_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S3464C10D0Ev,_ZThn464_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S3464C10D1Ev,_ZThn464_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3464C10D0Ev,_ZThn388_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3464C10D1Ev,_ZThn388_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C10 = {  "S3464C10", // class name
  bases_S3464C10, 14,
  &(vtc_S3464C10[0]), // expected_vtbl_contents
  &(vtt_S3464C10[0]), // expected_vtt_contents
  ABISELECT(976,592), // object size
  NSPAIRA(_ZTI8S3464C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3464C10),56, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3464C10),20, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C9  : S3464C10 {
  int s3464c9f0;
  long s3464c9f1;
  int s3464c9f2;
  __tsi64 s3464c9f3;
  virtual  ~S3464C9(); // _ZN7S3464C9D2Ev
  virtual void  v5(); // _ZN7S3464C92v5Ev
  S3464C9(); // tgen
};
//SIG(-1 S3464C9) C1{ BC2{ VBC3{ v2 v3 Fp Fi FD Fi[2] Fc} BC4{ VBC5{ BC3 vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC6{ VBC5 BC3 vd Fi FC5 Fi} BC7{ BC6 vd Fi Fp Fi[2]} VBC3 vd v4 FU8{ m Fi[2] FL}} BC5 VBC9{ VBC5 Fi} BC6 vd v5 Fi Fi Fi} vd v1 Fi Fl Fi FL}


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

static void Test_S3464C9()
{
  extern Class_Descriptor cd_S3464C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(64,154)];
    init_test(&cd_S3464C9, buf);
    S3464C9 *dp, &lv = *(dp=new (buf) S3464C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1008,612), "sizeof(S3464C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C9)");
    /*is_ambiguous_... S3464C10::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C10*), ABISELECT(592,372), "S3464C9");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*)(S3464C10*), ABISELECT(592,372), "S3464C9");
    /*is_ambiguous_... S3464C9::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(656,408), "S3464C9");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*)(S3464C10*), ABISELECT(656,408), "S3464C9");
    /*is_ambiguous_... S3464C9::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(656,408), "S3464C9");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*), ABISELECT(656,408), "S3464C9");
    check_base_class_offset(lv, (S3464C4*)(S3464C8*), ABISELECT(656,408), "S3464C9");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C10*), ABISELECT(656,408), "S3464C9");
    /*is_ambiguous_... S3464C9::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(784,484), "S3464C9");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*)(S3464C10*), ABISELECT(784,484), "S3464C9");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*), 0, "S3464C9");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*), 0, "S3464C9");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*)(S3464C10*), 0, "S3464C9");
    check_base_class_offset(lv, (S3464C11*)(S3464C10*), 0, "S3464C9");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*)(S3464C10*), ABISELECT(224,144), "S3464C9");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C10*), ABISELECT(224,144), "S3464C9");
    check_base_class_offset(lv, (S3464C8*)(S3464C10*), ABISELECT(984,604), "S3464C9");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C10*), ABISELECT(352,220), "S3464C9");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C10*), ABISELECT(352,220), "S3464C9");
    check_base_class_offset(lv, (S3464C10*), 0, "S3464C9");
    check_field_offset(lv, s3464c9f0, ABISELECT(560,352), "S3464C9.s3464c9f0");
    check_field_offset(lv, s3464c9f1, ABISELECT(568,356), "S3464C9.s3464c9f1");
    check_field_offset(lv, s3464c9f2, ABISELECT(576,360), "S3464C9.s3464c9f2");
    check_field_offset(lv, s3464c9f3, ABISELECT(584,364), "S3464C9.s3464c9f3");
    test_class_info(&lv, &cd_S3464C9);
    dp->~S3464C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C9(Test_S3464C9, "S3464C9", ABISELECT(1008,612));

#else // __cplusplus

extern void _ZN7S3464C9C1Ev();
extern void _ZN7S3464C9D2Ev();
Name_Map name_map_S3464C9[] = {
  NSPAIR(_ZN7S3464C9C1Ev),
  NSPAIR(_ZN7S3464C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C10;
extern VTBL_ENTRY _ZTI8S3464C10[];
extern  VTBL_ENTRY _ZTV8S3464C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C10[];
static Base_Class bases_S3464C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(592,372), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(656,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(656,408), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(784,484), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3464C3,    ABISELECT(784,484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3464C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3464C11,    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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(224,144), //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3464C8,    ABISELECT(984,604), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(352,220), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3464C10,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S3464C9[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C9D1Ev();
extern void _ZN7S3464C9D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn224_N7S3464C9D1Ev,_ZThn144_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C9D0Ev,_ZThn144_N7S3464C9D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn656_N7S3464C9D1Ev,_ZThn408_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn656_N7S3464C9D0Ev,_ZThn408_N7S3464C9D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn784_N7S3464C9D1Ev,_ZThn484_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn784_N7S3464C9D0Ev,_ZThn484_N7S3464C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn984_N7S3464C9D1Ev,_ZThn604_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn984_N7S3464C9D0Ev,_ZThn604_N7S3464C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3464C9[] = {
  ABISELECT(984,604),
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C9D1Ev,_ZThn144_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C9D0Ev,_ZThn144_N7S3464C9D0Ev),
  ABISELECT(304,188),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev),
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev),
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev),
  ABISELECT(-984,-604),
  ABISELECT(-328,-196),
  ABISELECT(-984,-604),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S3464C9[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C10D1Ev();
extern void _ZN8S3464C10D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C10__7S3464C9[] = {
  ABISELECT(984,604),
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C118S3464C10__7S3464C9[] = {
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C118S3464C10__7S3464C9[] = {
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C118S3464C10__A1__7S3464C9[] = {
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn656_N7S3464C3D1Ev,_ZThn408_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn656_N7S3464C3D0Ev,_ZThn408_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C10__A1__7S3464C9[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn656_N7S3464C2D1Ev,_ZThn408_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn656_N7S3464C2D0Ev,_ZThn408_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C118S3464C10__7S3464C9[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn656_N8S3464C11D1Ev,_ZThn408_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn656_N8S3464C11D0Ev,_ZThn408_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C118S3464C10__7S3464C9[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn784_N8S3464C11D1Ev,_ZThn484_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn784_N8S3464C11D0Ev,_ZThn484_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C118S3464C10__7S3464C9[] = {
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C118S3464C10__7S3464C9[] = {
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C10__A2__7S3464C9[] = {
  ABISELECT(304,188),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S3464C3D1Ev,_ZThn188_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S3464C3D0Ev,_ZThn188_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C10__A2__7S3464C9[] = {
  ABISELECT(-304,-188),
  0,
  0,
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__8S3464C10__7S3464C9[] = {
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn656_N8S3464C10D1Ev,_ZThn408_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn656_N8S3464C10D0Ev,_ZThn408_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C10__7S3464C9[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn784_N8S3464C10D1Ev,_ZThn484_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn784_N8S3464C10D0Ev,_ZThn484_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C10__7S3464C9[] = {
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn984_N8S3464C10D1Ev,_ZThn604_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn984_N8S3464C10D0Ev,_ZThn604_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__8S3464C10__7S3464C9[] = {
  ABISELECT(-984,-604),
  ABISELECT(-328,-196),
  ABISELECT(-984,-604),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__8S3464C10__7S3464C9[] = {
  ABISELECT(304,188),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__7S3464C9[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__7S3464C9[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C8__7S3464C9[] = {
  ABISELECT(-328,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C8__7S3464C9[] = {
  ABISELECT(328,196),
  0,
  0,
  ABISELECT(328,196),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
static  VTT_ENTRY vtt_S3464C9[] = {
  {&(_ZTV7S3464C9[6]),  6,57},
  {&(_tg__ZTV8S3464C10__7S3464C9[6]),  6,12},
  {&(_tg__ZTV8S3464C118S3464C10__7S3464C9[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C118S3464C10__7S3464C9[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C118S3464C10__A1__7S3464C9[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C10__A1__7S3464C9[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C118S3464C10__7S3464C9[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C118S3464C10__7S3464C9[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C118S3464C10__7S3464C9[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C118S3464C10__7S3464C9[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C10__A2__7S3464C9[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C10__A2__7S3464C9[5]),  5,9},
  {&(_tg__ZTV7S3464C5__8S3464C10__7S3464C9[4]),  4,6},
  {&(_tg__ZTV7S3464C4__8S3464C10__7S3464C9[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C10__7S3464C9[6]),  6,10},
  {&(_tg__ZTV7S3464C8__8S3464C10__7S3464C9[4]),  4,6},
  {&(_tg__ZTV7S3464C3__A__8S3464C10__7S3464C9[3]),  3,7},
  {&(_ZTV7S3464C9[30]),  30,57},
  {&(_ZTV7S3464C9[37]),  37,57},
  {&(_ZTV7S3464C9[47]),  47,57},
  {&(_ZTV7S3464C9[55]),  55,57},
  {&(_ZTV7S3464C9[22]),  22,57},
  {&(_tg__ZTV7S3464C3__7S3464C9[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__7S3464C9[5]),  5,9},
  {&(_tg__ZTV7S3464C8__7S3464C9[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C8__7S3464C9[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S3464C9[];
extern  VTBL_ENTRY _ZTV7S3464C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C9[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S3464C10D0Ev,_ZThn604_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S3464C10D1Ev,_ZThn604_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C10D0Ev,_ZThn484_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C10D1Ev,_ZThn484_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3464C10D0Ev,_ZThn408_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3464C10D1Ev,_ZThn408_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C11D0Ev,_ZThn484_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C11D1Ev,_ZThn484_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3464C11D0Ev,_ZThn408_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3464C11D1Ev,_ZThn408_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3464C2D0Ev,_ZThn408_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3464C2D1Ev,_ZThn408_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3464C3D0Ev,_ZThn188_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3464C3D0Ev,_ZThn408_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3464C3D1Ev,_ZThn188_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3464C3D1Ev,_ZThn408_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N7S3464C9D0Ev,_ZThn604_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N7S3464C9D1Ev,_ZThn604_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3464C9D0Ev,_ZThn484_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3464C9D1Ev,_ZThn484_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3464C9D0Ev,_ZThn408_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3464C9D1Ev,_ZThn408_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C9 = {  "S3464C9", // class name
  bases_S3464C9, 15,
  &(vtc_S3464C9[0]), // expected_vtbl_contents
  &(vtt_S3464C9[0]), // expected_vtt_contents
  ABISELECT(1008,612), // object size
  NSPAIRA(_ZTI7S3464C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3464C9),57, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3464C9),26, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C7  : S3464C8 , S3464C3 , S3464C9 {
  ::S3464C2 s3464c7f0;
  ~S3464C7(); // tgen
  S3464C7(); // tgen
};
//SIG(-1 S3464C7) C1{ BC2{ VBC3{ BC4{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC7{ VBC4 BC8{ VBC3 VBC5 BC9{ BC5 vd Fi Fp Fi[2]} VBC4 vd v3 FU10{ m Fi[2] FL}} BC3 VBC2 BC5 vd v4 Fi Fi Fi} vd v5 Fi Fl Fi FL} FC9}


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

static void Test_S3464C7()
{
  extern Class_Descriptor cd_S3464C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(100,239)];
    init_test(&cd_S3464C7, buf);
    S3464C7 *dp, &lv = *(dp=new (buf) S3464C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1584,952), "sizeof(S3464C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C7)");
    /*is_ambiguous_... S3464C7::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(1168,712), "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C8*), ABISELECT(1168,712), "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(1168,712), "S3464C7");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(1168,712), "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(1168,712), "S3464C7");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(1168,712), "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C8*), ABISELECT(1168,712), "S3464C7");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C10*)(S3464C9*), ABISELECT(1168,712), "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C8*), 0, "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(16,8), "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*), ABISELECT(16,8), "S3464C7");
    /*is_ambiguous_... S3464C10::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C10*)(S3464C9*), ABISELECT(1296,788), "S3464C7");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(1296,788), "S3464C7");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(1360,824), "S3464C7");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(1360,824), "S3464C7");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(224,128), "S3464C7");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(224,128), "S3464C7");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(224,128), "S3464C7");
    check_base_class_offset(lv, (S3464C11*)(S3464C10*)(S3464C9*), ABISELECT(224,128), "S3464C7");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*)(S3464C10*)(S3464C9*), ABISELECT(448,272), "S3464C7");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C10*)(S3464C9*), ABISELECT(448,272), "S3464C7");
    check_base_class_offset(lv, (S3464C8*)(S3464C10*)(S3464C9*), ABISELECT(1560,944), "S3464C7");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C10*)(S3464C9*), ABISELECT(576,348), "S3464C7");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C10*)(S3464C9*), ABISELECT(576,348), "S3464C7");
    check_base_class_offset(lv, (S3464C10*)(S3464C9*), ABISELECT(224,128), "S3464C7");
    check_base_class_offset(lv, (S3464C9*), ABISELECT(224,128), "S3464C7");
    check_field_offset(lv, s3464c7f0, ABISELECT(816,500), "S3464C7.s3464c7f0");
    test_class_info(&lv, &cd_S3464C7);
    dp->~S3464C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C7(Test_S3464C7, "S3464C7", ABISELECT(1584,952));

#else // __cplusplus

extern void _ZN7S3464C7C1Ev();
extern void _ZN7S3464C7D1Ev();
Name_Map name_map_S3464C7[] = {
  NSPAIR(_ZN7S3464C7C1Ev),
  NSPAIR(_ZN7S3464C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C10;
extern VTBL_ENTRY _ZTI8S3464C10[];
extern  VTBL_ENTRY _ZTV8S3464C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C10[];
extern Class_Descriptor cd_S3464C9;
extern VTBL_ENTRY _ZTI7S3464C9[];
extern  VTBL_ENTRY _ZTV7S3464C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C9[];
static Base_Class bases_S3464C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(1168,712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(1168,712), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3464C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(1296,788), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(1360,824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(1360,824), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3464C11,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(448,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
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(448,272), //bcp->offset
    28, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S3464C8,    ABISELECT(1560,944), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(576,348), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3464C10,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3464C9,    ABISELECT(224,128), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3464C7[];
extern void _ZN7S3464C7D1Ev();
extern void _ZN7S3464C7D0Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn16_N7S3464C7D1Ev,_ZThn8_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3464C7D0Ev,_ZThn8_N7S3464C7D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn224_N7S3464C7D1Ev,_ZThn128_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C7D0Ev,_ZThn128_N7S3464C7D0Ev)();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn448_N7S3464C7D1Ev,_ZThn272_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn448_N7S3464C7D0Ev,_ZThn272_N7S3464C7D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn576_N7S3464C7D1Ev,_ZThn348_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn576_N7S3464C7D0Ev,_ZThn348_N7S3464C7D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C7D1Ev,_ZTv0_n20_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn1168_N7S3464C7D1Ev,_ZThn712_N7S3464C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C7D0Ev,_ZTv0_n20_N7S3464C7D0Ev)();
extern void ABISELECT(_ZThn1168_N7S3464C7D0Ev,_ZThn712_N7S3464C7D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C7D1Ev,_ZTv0_n24_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn1360_N7S3464C7D1Ev,_ZThn824_N7S3464C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3464C7D0Ev,_ZTv0_n24_N7S3464C7D0Ev)();
extern void ABISELECT(_ZThn1360_N7S3464C7D0Ev,_ZThn824_N7S3464C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn1560_N7S3464C7D1Ev,_ZThn944_N7S3464C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev)();
extern void ABISELECT(_ZThn1560_N7S3464C7D0Ev,_ZThn944_N7S3464C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3464C7[] = {
  ABISELECT(1560,944),
  ABISELECT(1360,824),
  ABISELECT(1296,788),
  ABISELECT(1168,712),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C7D0Ev,
  ABISELECT(1152,704),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3464C7D1Ev,_ZThn8_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3464C7D0Ev,_ZThn8_N7S3464C7D0Ev),
  ABISELECT(1336,816),
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C7D1Ev,_ZThn128_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C7D0Ev,_ZThn128_N7S3464C7D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
  ABISELECT(-448,-272),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S3464C7D1Ev,_ZThn272_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S3464C7D0Ev,_ZThn272_N7S3464C7D0Ev),
  ABISELECT(592,364),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S3464C7D1Ev,_ZThn348_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S3464C7D0Ev,_ZThn348_N7S3464C7D0Ev),
  ABISELECT(-1168,-712),
  0,
  0,
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C7D1Ev,_ZTv0_n20_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C7D0Ev,_ZTv0_n20_N7S3464C7D0Ev),
  0,
  0,
  ABISELECT(-1296,-788),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  ABISELECT(-1360,-824),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1360,-824),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C7D1Ev,_ZTv0_n24_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C7D0Ev,_ZTv0_n24_N7S3464C7D0Ev),
  ABISELECT(-1560,-944),
  ABISELECT(-392,-232),
  ABISELECT(-1560,-944),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S3464C7[];
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C8__A__7S3464C7[] = {
  ABISELECT(1168,712),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZThn1168_N7S3464C8D1Ev,_ZThn712_N7S3464C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
extern void ABISELECT(_ZThn1168_N7S3464C8D0Ev,_ZThn712_N7S3464C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C8__A__7S3464C7[] = {
  ABISELECT(-1168,-712),
  0,
  0,
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__7S3464C7[] = {
  ABISELECT(1152,704),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn1152_N7S3464C3D1Ev,_ZThn704_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn1152_N7S3464C3D0Ev,_ZThn704_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__A__7S3464C7[] = {
  ABISELECT(-1152,-704),
  0,
  0,
  ABISELECT(-1152,-704),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C9D1Ev();
extern void _ZN7S3464C9D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C9__7S3464C7[] = {
  ABISELECT(1336,816),
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C10D1Ev();
extern void _ZN8S3464C10D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(1336,816),
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C118S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(1072,660),
  ABISELECT(1136,696),
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C118S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C118S3464C107S3464C9__A2__7S3464C7[] = {
  ABISELECT(944,584),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn944_N7S3464C3D1Ev,_ZThn584_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn944_N7S3464C3D0Ev,_ZThn584_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C107S3464C9__A2__7S3464C7[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn944_N7S3464C2D1Ev,_ZThn584_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn944_N7S3464C2D0Ev,_ZThn584_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C118S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn944_N8S3464C11D1Ev,_ZThn584_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn944_N8S3464C11D0Ev,_ZThn584_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C118S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn1136_N8S3464C11D1Ev,_ZThn696_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn1136_N8S3464C11D0Ev,_ZThn696_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C118S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(-1136,-696),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C118S3464C107S3464C9__7S3464C7[] = {
  0,
  0,
  ABISELECT(-1072,-660),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C107S3464C9__A3__7S3464C7[] = {
  ABISELECT(592,364),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn592_N7S3464C3D1Ev,_ZThn364_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn592_N7S3464C3D0Ev,_ZThn364_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C107S3464C9__A3__7S3464C7[] = {
  ABISELECT(-592,-364),
  0,
  0,
  ABISELECT(-592,-364),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__8S3464C107S3464C9__7S3464C7[] = {
  0,
  0,
  ABISELECT(-1072,-660),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn944_N8S3464C10D1Ev,_ZThn584_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn944_N8S3464C10D0Ev,_ZThn584_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn1136_N8S3464C10D1Ev,_ZThn696_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn1136_N8S3464C10D0Ev,_ZThn696_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(-1136,-696),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn1336_N8S3464C10D1Ev,_ZThn816_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn1336_N8S3464C10D0Ev,_ZThn816_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__8S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(-1336,-816),
  ABISELECT(-392,-232),
  ABISELECT(-1336,-816),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__8S3464C107S3464C9__7S3464C7[] = {
  ABISELECT(592,364),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__7S3464C9__7S3464C7[] = {
  0,
  0,
  ABISELECT(-1072,-660),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn944_N7S3464C9D1Ev,_ZThn584_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn944_N7S3464C9D0Ev,_ZThn584_N7S3464C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C9__7S3464C7[] = {
  ABISELECT(-944,-584),
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn1136_N7S3464C9D1Ev,_ZThn696_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn1136_N7S3464C9D0Ev,_ZThn696_N7S3464C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__7S3464C9__7S3464C7[] = {
  ABISELECT(-1136,-696),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn1336_N7S3464C9D1Ev,_ZThn816_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn1336_N7S3464C9D0Ev,_ZThn816_N7S3464C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__7S3464C9__7S3464C7[] = {
  ABISELECT(-1336,-816),
  ABISELECT(-392,-232),
  ABISELECT(-1336,-816),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C10__A2__7S3464C9__7S3464C7[] = {
  ABISELECT(592,364),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A1__7S3464C7[] = {
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__A1__7S3464C7[] = {
  ABISELECT(192,112),
  0,
  0,
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C8__A1__7S3464C7[] = {
  ABISELECT(-392,-232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C8__A1__7S3464C7[] = {
  ABISELECT(392,232),
  0,
  0,
  ABISELECT(392,232),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
static  VTT_ENTRY vtt_S3464C7[] = {
  {&(_ZTV7S3464C7[6]),  6,72},
  {&(_tg__ZTV7S3464C8__A__7S3464C7[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C8__A__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C3__A__7S3464C7[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__A__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C9__7S3464C7[6]),  6,13},
  {&(_tg__ZTV8S3464C107S3464C9__7S3464C7[6]),  6,12},
  {&(_tg__ZTV8S3464C118S3464C107S3464C9__7S3464C7[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C118S3464C107S3464C9__7S3464C7[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C118S3464C107S3464C9__A2__7S3464C7[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C107S3464C9__A2__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C118S3464C107S3464C9__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C118S3464C107S3464C9__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C118S3464C107S3464C9__7S3464C7[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C118S3464C107S3464C9__7S3464C7[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C107S3464C9__A3__7S3464C7[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C107S3464C9__A3__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C5__8S3464C107S3464C9__7S3464C7[4]),  4,6},
  {&(_tg__ZTV7S3464C4__8S3464C107S3464C9__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C107S3464C9__7S3464C7[6]),  6,10},
  {&(_tg__ZTV7S3464C8__8S3464C107S3464C9__7S3464C7[4]),  4,6},
  {&(_tg__ZTV7S3464C3__A__8S3464C107S3464C9__7S3464C7[3]),  3,7},
  {&(_tg__ZTV7S3464C5__7S3464C9__7S3464C7[4]),  4,6},
  {&(_tg__ZTV7S3464C4__7S3464C9__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C3__7S3464C9__7S3464C7[6]),  6,10},
  {&(_tg__ZTV7S3464C8__7S3464C9__7S3464C7[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C10__A2__7S3464C9__7S3464C7[3]),  3,7},
  {&(_ZTV7S3464C7[46]),  46,72},
  {&(_ZTV7S3464C7[11]),  11,72},
  {&(_ZTV7S3464C7[21]),  21,72},
  {&(_ZTV7S3464C7[54]),  54,72},
  {&(_ZTV7S3464C7[62]),  62,72},
  {&(_ZTV7S3464C7[70]),  70,72},
  {&(_ZTV7S3464C7[37]),  37,72},
  {&(_tg__ZTV7S3464C3__A1__7S3464C7[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__A1__7S3464C7[5]),  5,9},
  {&(_tg__ZTV7S3464C8__A1__7S3464C7[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C8__A1__7S3464C7[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S3464C7[];
extern  VTBL_ENTRY _ZTV7S3464C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C7[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N7S3464C9D0Ev,_ZThn816_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N7S3464C9D1Ev,_ZThn816_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S3464C9D0Ev,_ZThn696_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N7S3464C9D1Ev,_ZThn696_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C9D0Ev,_ZThn584_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C9D1Ev,_ZThn584_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N8S3464C10D0Ev,_ZThn816_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1336_N8S3464C10D1Ev,_ZThn816_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S3464C10D0Ev,_ZThn696_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S3464C10D1Ev,_ZThn696_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S3464C10D0Ev,_ZThn584_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S3464C10D1Ev,_ZThn584_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S3464C11D0Ev,_ZThn696_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1136_N8S3464C11D1Ev,_ZThn696_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S3464C11D0Ev,_ZThn584_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S3464C11D1Ev,_ZThn584_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C2D0Ev,_ZThn584_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C2D1Ev,_ZThn584_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S3464C3D0Ev,_ZThn364_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C3D0Ev,_ZThn584_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N7S3464C3D0Ev,_ZThn704_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S3464C3D1Ev,_ZThn364_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C3D1Ev,_ZThn584_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1152_N7S3464C3D1Ev,_ZThn704_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S3464C8D0Ev,_ZThn712_N7S3464C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S3464C8D1Ev,_ZThn712_N7S3464C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1560_N7S3464C7D0Ev,_ZThn944_N7S3464C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1560_N7S3464C7D1Ev,_ZThn944_N7S3464C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C7D0Ev,_ZTv0_n24_N7S3464C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N7S3464C7D0Ev,_ZThn824_N7S3464C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C7D1Ev,_ZTv0_n24_N7S3464C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N7S3464C7D1Ev,_ZThn824_N7S3464C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C7D0Ev,_ZTv0_n20_N7S3464C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S3464C7D0Ev,_ZThn712_N7S3464C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C7D1Ev,_ZTv0_n20_N7S3464C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S3464C7D1Ev,_ZThn712_N7S3464C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C7 = {  "S3464C7", // class name
  bases_S3464C7, 19,
  &(vtc_S3464C7[0]), // expected_vtbl_contents
  &(vtt_S3464C7[0]), // expected_vtt_contents
  ABISELECT(1584,952), // object size
  NSPAIRA(_ZTI7S3464C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3464C7),72, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3464C7),38, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C13  : virtual S3464C11 , S3464C3 {
  char s3464c13f0;
  ::S3464C3 s3464c13f1;
  char s3464c13f2;
  virtual  ~S3464C13(); // _ZN8S3464C13D2Ev
  virtual void  v6(); // _ZN8S3464C132v6Ev
  virtual void  v7(); // _ZN8S3464C132v7Ev
  S3464C13(); // tgen
};
//SIG(-1 S3464C13) C1{ VBC2{ VBC3{ BC4{ v3 v4 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC4 vd v5 FU7{ m Fi[2] FL}} BC5 vd v1 v2 Fc FC5 Fc}


 S3464C13 ::~S3464C13(){ note_dtor("S3464C13", this);}
void  S3464C13 ::v6(){vfunc_called(this, "_ZN8S3464C132v6Ev");}
void  S3464C13 ::v7(){vfunc_called(this, "_ZN8S3464C132v7Ev");}
S3464C13 ::S3464C13(){ note_ctor("S3464C13", this);} // tgen

static void Test_S3464C13()
{
  extern Class_Descriptor cd_S3464C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,176)];
    init_test(&cd_S3464C13, buf);
    S3464C13 *dp, &lv = *(dp=new (buf) S3464C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,700), "sizeof(S3464C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C13)");
    check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(784,468), "S3464C13");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*), ABISELECT(784,468), "S3464C13");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(784,468), "S3464C13");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(784,468), "S3464C13");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(784,468), "S3464C13");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(912,544), "S3464C13");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*), ABISELECT(912,544), "S3464C13");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(560,324), "S3464C13");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(560,324), "S3464C13");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*), ABISELECT(560,324), "S3464C13");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*), ABISELECT(1120,664), "S3464C13");
    check_base_class_offset(lv, (S3464C11*), ABISELECT(560,324), "S3464C13");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), 0, "S3464C13");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*), 0, "S3464C13");
    check_field_offset(lv, s3464c13f0, ABISELECT(196,120), "S3464C13.s3464c13f0");
    check_field_offset(lv, s3464c13f1, ABISELECT(208,124), "S3464C13.s3464c13f1");
    check_field_offset(lv, s3464c13f2, ABISELECT(544,320), "S3464C13.s3464c13f2");
    test_class_info(&lv, &cd_S3464C13);
    dp->~S3464C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C13(Test_S3464C13, "S3464C13", ABISELECT(1184,700));

#else // __cplusplus

extern void _ZN8S3464C13C1Ev();
extern void _ZN8S3464C13D2Ev();
Name_Map name_map_S3464C13[] = {
  NSPAIR(_ZN8S3464C13C1Ev),
  NSPAIR(_ZN8S3464C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
static Base_Class bases_S3464C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(784,468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(784,468), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(912,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(912,544), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(560,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
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(1120,664), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3464C11,    ABISELECT(560,324), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3464C13[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C13D1Ev();
extern void _ZN8S3464C13D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn560_N8S3464C13D1Ev,_ZThn324_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn560_N8S3464C13D0Ev,_ZThn324_N8S3464C13D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn784_N8S3464C13D1Ev,_ZThn468_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn784_N8S3464C13D0Ev,_ZThn468_N8S3464C13D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn912_N8S3464C13D1Ev,_ZThn544_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn912_N8S3464C13D0Ev,_ZThn544_N8S3464C13D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY vtc_S3464C13[] = {
  ABISELECT(1120,664),
  ABISELECT(912,544),
  ABISELECT(560,324),
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
  0,
  ABISELECT(-560,-324),
  0,
  0,
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev),
  ABISELECT(-912,-544),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-912,-544),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev),
  0,
  0,
  ABISELECT(-1120,-664),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S3464C13[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__8S3464C13[] = {
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn784_N7S3464C3D1Ev,_ZThn468_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn784_N7S3464C3D0Ev,_ZThn468_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__A__8S3464C13[] = {
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C13[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C11__8S3464C13[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C13[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C13[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C13[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn224_N8S3464C11D1Ev,_ZThn144_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn224_N8S3464C11D0Ev,_ZThn144_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C11__8S3464C13[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C11D1Ev,_ZThn220_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn352_N8S3464C11D0Ev,_ZThn220_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C11__8S3464C13[] = {
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C11__8S3464C13[] = {
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C13[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__8S3464C13[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
static  VTT_ENTRY vtt_S3464C13[] = {
  {&(_ZTV8S3464C13[6]),  6,51},
  {&(_tg__ZTV7S3464C3__A__8S3464C13[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__A__8S3464C13[5]),  5,9},
  {&(_ZTV8S3464C13[21]),  21,51},
  {&(_ZTV8S3464C13[31]),  31,51},
  {&(_ZTV8S3464C13[41]),  41,51},
  {&(_ZTV8S3464C13[49]),  49,51},
  {&(_tg__ZTV8S3464C11__8S3464C13[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C11__8S3464C13[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C13[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C13[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C13[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C11__8S3464C13[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C11__8S3464C13[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C11__8S3464C13[4]),  4,6},
  {&(_tg__ZTV7S3464C3__8S3464C13[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__8S3464C13[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3464C13[];
extern  VTBL_ENTRY _ZTV8S3464C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C13[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C11D0Ev,_ZThn220_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C11D1Ev,_ZThn220_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C11D0Ev,_ZThn144_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C11D1Ev,_ZThn144_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3464C3D0Ev,_ZThn468_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3464C3D1Ev,_ZThn468_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S3464C13D0Ev,_ZThn544_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S3464C13D1Ev,_ZThn544_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C13D0Ev,_ZThn468_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C13D1Ev,_ZThn468_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3464C13D0Ev,_ZThn324_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3464C13D1Ev,_ZThn324_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C13 = {  "S3464C13", // class name
  bases_S3464C13, 11,
  &(vtc_S3464C13[0]), // expected_vtbl_contents
  &(vtt_S3464C13[0]), // expected_vtt_contents
  ABISELECT(1184,700), // object size
  NSPAIRA(_ZTI8S3464C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3464C13),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3464C13),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C15  : S3464C2 , virtual S3464C3 {
  int s3464c15f0;
  int s3464c15f1;
  virtual  ~S3464C15(); // _ZN8S3464C15D2Ev
  S3464C15(); // tgen
};
//SIG(-1 S3464C15) C1{ BC2{ BC3{ VBC4{ BC5{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC5 vd Fi FC4 Fi} vd Fi Fp Fi[2]} VBC3 vd Fi[2]}


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

static void Test_S3464C15()
{
  extern Class_Descriptor cd_S3464C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,86)];
    init_test(&cd_S3464C15, buf);
    S3464C15 *dp, &lv = *(dp=new (buf) S3464C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,340), "sizeof(S3464C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C15)");
    check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(224,144), "S3464C15");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*), ABISELECT(224,144), "S3464C15");
    /*is_ambiguous_... S3464C15::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(224,144), "S3464C15");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*), 0, "S3464C15");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*), 0, "S3464C15");
    check_base_class_offset(lv, (S3464C2*), 0, "S3464C15");
    /*is_ambiguous_... S3464C15::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(352,220), "S3464C15");
    /*is_ambiguous_... S3464C15::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*), ABISELECT(352,220), "S3464C15");
    check_field_offset(lv, s3464c15f0, ABISELECT(216,136), "S3464C15.s3464c15f0");
    check_field_offset(lv, s3464c15f1, ABISELECT(220,140), "S3464C15.s3464c15f1");
    test_class_info(&lv, &cd_S3464C15);
    dp->~S3464C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C15(Test_S3464C15, "S3464C15", ABISELECT(560,340));

#else // __cplusplus

extern void _ZN8S3464C15C1Ev();
extern void _ZN8S3464C15D2Ev();
Name_Map name_map_S3464C15[] = {
  NSPAIR(_ZN8S3464C15C1Ev),
  NSPAIR(_ZN8S3464C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
static Base_Class bases_S3464C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(224,144), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3464C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(352,220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3464C15[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C15D1Ev();
extern void _ZN8S3464C15D0Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn224_N8S3464C15D1Ev,_ZThn144_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn224_N8S3464C15D0Ev,_ZThn144_N8S3464C15D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C15D1Ev,_ZThn220_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn352_N8S3464C15D0Ev,_ZThn220_N8S3464C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3464C15[] = {
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D0Ev,
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev),
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev),
};
extern VTBL_ENTRY _ZTV8S3464C15[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C2__8S3464C15[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C2__8S3464C15[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C2__8S3464C15[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C2__8S3464C15[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A1__8S3464C15[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__A1__8S3464C15[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
static  VTT_ENTRY vtt_S3464C15[] = {
  {&(_ZTV8S3464C15[4]),  4,27},
  {&(_tg__ZTV7S3464C2__8S3464C15[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C2__8S3464C15[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C2__8S3464C15[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C2__8S3464C15[5]),  5,9},
  {&(_ZTV8S3464C15[13]),  13,27},
  {&(_ZTV8S3464C15[23]),  23,27},
  {&(_tg__ZTV7S3464C3__A1__8S3464C15[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__A1__8S3464C15[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3464C15[];
extern  VTBL_ENTRY _ZTV8S3464C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C15[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C15D0Ev,_ZThn220_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C15D1Ev,_ZThn220_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C15D0Ev,_ZThn144_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C15D1Ev,_ZThn144_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C15 = {  "S3464C15", // class name
  bases_S3464C15, 7,
  &(vtc_S3464C15[0]), // expected_vtbl_contents
  &(vtt_S3464C15[0]), // expected_vtt_contents
  ABISELECT(560,340), // object size
  NSPAIRA(_ZTI8S3464C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3464C15),27, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3464C15),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C14  : S3464C4 , virtual S3464C13 , S3464C15 {
  int s3464c14f0;
  int s3464c14f1[9];
  ::S19558C20 s3464c14f2;
  ~S3464C14(); // tgen
  S3464C14(); // tgen
};
//SIG(-1 S3464C14) C1{ BC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC4{ VBC5{ VBC2 VBC6{ VBC2 BC3 vd Fi FC2 Fi} BC7{ BC6 vd Fi Fp Fi[2]} VBC3 vd v3 FU8{ m Fi[2] FL}} BC6 vd v4 v5 Fc FC6 Fc} BC9{ BC7 VBC6 vd Fi Fi} Fi Fi[9] FU10{ m Fi FD Fi:32 Fp Fp}}


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

static void Test_S3464C14()
{
  extern Class_Descriptor cd_S3464C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(101,244)];
    init_test(&cd_S3464C14, buf);
    S3464C14 *dp, &lv = *(dp=new (buf) S3464C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1600,972), "sizeof(S3464C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C14)");
    /*is_ambiguous_... S3464C14::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), 0, "S3464C14");
    /*is_ambiguous_... S3464C14::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*), 0, "S3464C14");
    /*is_ambiguous_... S3464C14::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(1200,740), "S3464C14");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*), ABISELECT(1200,740), "S3464C14");
    /*is_ambiguous_... S3464C14::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(1200,740), "S3464C14");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(1200,740), "S3464C14");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C13*), ABISELECT(1200,740), "S3464C14");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C15*), ABISELECT(1200,740), "S3464C14");
    /*is_ambiguous_... S3464C14::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(1328,816), "S3464C14");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*), ABISELECT(1328,816), "S3464C14");
    /*is_ambiguous_... S3464C15::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C15*), ABISELECT(1328,816), "S3464C14");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(976,596), "S3464C14");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(976,596), "S3464C14");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*), ABISELECT(976,596), "S3464C14");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*), ABISELECT(1536,936), "S3464C14");
    check_base_class_offset(lv, (S3464C11*)(S3464C13*), ABISELECT(976,596), "S3464C14");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C13*), ABISELECT(416,272), "S3464C14");
    /*is_ambiguous_... S3464C13::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C13*), ABISELECT(416,272), "S3464C14");
    check_base_class_offset(lv, (S3464C13*), ABISELECT(416,272), "S3464C14");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C15*), ABISELECT(128,76), "S3464C14");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C15*), ABISELECT(128,76), "S3464C14");
    check_base_class_offset(lv, (S3464C2*)(S3464C15*), ABISELECT(128,76), "S3464C14");
    check_base_class_offset(lv, (S3464C15*), ABISELECT(128,76), "S3464C14");
    check_field_offset(lv, s3464c14f0, ABISELECT(352,220), "S3464C14.s3464c14f0");
    check_field_offset(lv, s3464c14f1, ABISELECT(356,224), "S3464C14.s3464c14f1");
    check_field_offset(lv, s3464c14f2, ABISELECT(400,260), "S3464C14.s3464c14f2");
    test_class_info(&lv, &cd_S3464C14);
    dp->~S3464C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C14(Test_S3464C14, "S3464C14", ABISELECT(1600,972));

#else // __cplusplus

extern void _ZN8S3464C14C1Ev();
extern void _ZN8S3464C14D1Ev();
Name_Map name_map_S3464C14[] = {
  NSPAIR(_ZN8S3464C14C1Ev),
  NSPAIR(_ZN8S3464C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C13;
extern VTBL_ENTRY _ZTI8S3464C13[];
extern  VTBL_ENTRY _ZTV8S3464C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C13[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C15;
extern VTBL_ENTRY _ZTI8S3464C15[];
extern  VTBL_ENTRY _ZTV8S3464C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C15[];
static Base_Class bases_S3464C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S3464C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3464C5,    ABISELECT(1200,740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3464C4,    ABISELECT(1200,740), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3464C3,    ABISELECT(1328,816), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(976,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(1536,936), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3464C11,    ABISELECT(976,596), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(416,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(416,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3464C13,    ABISELECT(416,272), //bcp->offset
    19, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    ABISELECT(128,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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3464C15,    ABISELECT(128,76), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3464C14[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C14D1Ev();
extern void _ZN8S3464C14D0Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn128_N8S3464C14D1Ev,_ZThn76_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn128_N8S3464C14D0Ev,_ZThn76_N8S3464C14D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn416_N8S3464C14D1Ev,_ZThn272_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn416_N8S3464C14D0Ev,_ZThn272_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn976_N8S3464C14D1Ev,_ZThn596_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn976_N8S3464C14D0Ev,_ZThn596_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C14D1Ev,_ZThn740_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C14D0Ev,_ZThn740_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn1328_N8S3464C14D1Ev,_ZThn816_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn1328_N8S3464C14D0Ev,_ZThn816_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY vtc_S3464C14[] = {
  ABISELECT(1536,936),
  ABISELECT(1328,816),
  ABISELECT(1200,740),
  ABISELECT(976,596),
  ABISELECT(416,272),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C14D0Ev,
  ABISELECT(1200,740),
  ABISELECT(1072,664),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S3464C14D1Ev,_ZThn76_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S3464C14D0Ev,_ZThn76_N8S3464C14D0Ev),
  0,
  0,
  ABISELECT(-416,-272),
  0,
  0,
  ABISELECT(1120,664),
  ABISELECT(912,544),
  ABISELECT(560,324),
  ABISELECT(784,468),
  ABISELECT(-416,-272),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
  0,
  ABISELECT(-976,-596),
  0,
  0,
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  ABISELECT(-976,-596),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  ABISELECT(-1200,-740),
  0,
  0,
  ABISELECT(-1200,-740),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev),
  ABISELECT(-1328,-816),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-1328,-816),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev),
  0,
  0,
  ABISELECT(-1536,-936),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S3464C14[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C15D1Ev();
extern void _ZN8S3464C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C15__8S3464C14[] = {
  ABISELECT(1200,740),
  ABISELECT(1072,664),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C15__A1__8S3464C14[] = {
  ABISELECT(1072,664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C15__A3__8S3464C14[] = {
  ABISELECT(1072,664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn1072_N7S3464C3D1Ev,_ZThn664_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn1072_N7S3464C3D0Ev,_ZThn664_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C15__A3__8S3464C14[] = {
  ABISELECT(-1072,-664),
  0,
  0,
  ABISELECT(-1072,-664),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn1072_N7S3464C2D1Ev,_ZThn664_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn1072_N7S3464C2D0Ev,_ZThn664_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C15__A1__8S3464C14[] = {
  ABISELECT(-1072,-664),
  0,
  0,
  ABISELECT(-1072,-664),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn1072_N8S3464C15D1Ev,_ZThn664_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn1072_N8S3464C15D0Ev,_ZThn664_N8S3464C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C15__8S3464C14[] = {
  ABISELECT(-1072,-664),
  0,
  0,
  ABISELECT(-1072,-664),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C15D1Ev,_ZThn740_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C15D0Ev,_ZThn740_N8S3464C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__A1__8S3464C15__8S3464C14[] = {
  ABISELECT(-1200,-740),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-1200,-740),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C13D1Ev();
extern void _ZN8S3464C13D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C13__8S3464C14[] = {
  ABISELECT(1120,664),
  ABISELECT(912,544),
  ABISELECT(560,324),
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C13__A2__8S3464C14[] = {
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn784_N7S3464C3D1Ev,_ZThn468_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn784_N7S3464C3D0Ev,_ZThn468_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C13__A2__8S3464C14[] = {
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn560_N8S3464C13D1Ev,_ZThn324_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn560_N8S3464C13D0Ev,_ZThn324_N8S3464C13D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C13__8S3464C14[] = {
  0,
  ABISELECT(-560,-324),
  0,
  0,
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn784_N8S3464C13D1Ev,_ZThn468_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn784_N8S3464C13D0Ev,_ZThn468_N8S3464C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C13__8S3464C14[] = {
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn912_N8S3464C13D1Ev,_ZThn544_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn912_N8S3464C13D0Ev,_ZThn544_N8S3464C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C13__8S3464C14[] = {
  ABISELECT(-912,-544),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-912,-544),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C13__8S3464C14[] = {
  0,
  0,
  ABISELECT(-1120,-664),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C14[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C11__8S3464C14[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C14[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C14[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C14[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn224_N8S3464C11D1Ev,_ZThn144_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn224_N8S3464C11D0Ev,_ZThn144_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C11__8S3464C14[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C11D1Ev,_ZThn220_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn352_N8S3464C11D0Ev,_ZThn220_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C11__8S3464C14[] = {
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C11__8S3464C14[] = {
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C14[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__8S3464C14[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
static  VTT_ENTRY vtt_S3464C14[] = {
  {&(_ZTV8S3464C14[7]),  7,75},
  {&(_tg__ZTV8S3464C15__8S3464C14[4]),  4,8},
  {&(_tg__ZTV7S3464C28S3464C15__A1__8S3464C14[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C15__A3__8S3464C14[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C15__A3__8S3464C14[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C15__A1__8S3464C14[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C15__8S3464C14[5]),  5,9},
  {&(_tg__ZTV7S3464C3__A1__8S3464C15__8S3464C14[6]),  6,10},
  {&(_ZTV8S3464C14[30]),  30,75},
  {&(_ZTV8S3464C14[45]),  45,75},
  {&(_ZTV8S3464C14[55]),  55,75},
  {&(_ZTV8S3464C14[65]),  65,75},
  {&(_ZTV8S3464C14[73]),  73,75},
  {&(_ZTV8S3464C14[15]),  15,75},
  {&(_tg__ZTV8S3464C13__8S3464C14[6]),  6,12},
  {&(_tg__ZTV7S3464C38S3464C13__A2__8S3464C14[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C13__A2__8S3464C14[5]),  5,9},
  {&(_tg__ZTV8S3464C11__8S3464C13__8S3464C14[9]),  9,14},
  {&(_tg__ZTV7S3464C4__8S3464C13__8S3464C14[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C13__8S3464C14[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C13__8S3464C14[4]),  4,6},
  {&(_tg__ZTV8S3464C11__8S3464C14[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C11__8S3464C14[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C14[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C14[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C14[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C11__8S3464C14[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C11__8S3464C14[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C11__8S3464C14[4]),  4,6},
  {&(_tg__ZTV7S3464C3__8S3464C14[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__8S3464C14[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3464C14[];
extern  VTBL_ENTRY _ZTV8S3464C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C14[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C11D0Ev,_ZThn220_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S3464C11D1Ev,_ZThn220_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C11D0Ev,_ZThn144_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3464C11D1Ev,_ZThn144_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S3464C13D0Ev,_ZThn544_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S3464C13D1Ev,_ZThn544_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C13D0Ev,_ZThn468_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3464C13D1Ev,_ZThn468_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3464C13D0Ev,_ZThn324_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3464C13D1Ev,_ZThn324_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C15D0Ev,_ZThn740_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C15D1Ev,_ZThn740_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S3464C15D0Ev,_ZThn664_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N8S3464C15D1Ev,_ZThn664_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D0Ev,_ZThn144_N7S3464C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N7S3464C2D0Ev,_ZThn664_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C2D1Ev,_ZThn144_N7S3464C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N7S3464C2D1Ev,_ZThn664_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D0Ev,_ZThn144_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3464C3D0Ev,_ZThn468_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N7S3464C3D0Ev,_ZThn664_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3464C3D1Ev,_ZThn144_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3464C3D1Ev,_ZThn468_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072_N7S3464C3D1Ev,_ZThn664_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N8S3464C14D0Ev,_ZThn816_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N8S3464C14D1Ev,_ZThn816_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C14D0Ev,_ZThn740_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C14D1Ev,_ZThn740_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S3464C14D0Ev,_ZThn596_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S3464C14D1Ev,_ZThn596_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S3464C14D0Ev,_ZThn272_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S3464C14D1Ev,_ZThn272_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C14 = {  "S3464C14", // class name
  bases_S3464C14, 18,
  &(vtc_S3464C14[0]), // expected_vtbl_contents
  &(vtt_S3464C14[0]), // expected_vtt_contents
  ABISELECT(1600,972), // object size
  NSPAIRA(_ZTI8S3464C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3464C14),75, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3464C14),31, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C17  : S3464C11 {
  long double s3464c17f0[3];
  int s3464c17f1;
  char s3464c17f2;
  ::S3464C3 s3464c17f3;
  int s3464c17f4:9;
  char s3464c17f5[5];
  int s3464c17f6;
  void *s3464c17f7[9];
  virtual  ~S3464C17(); // _ZN8S3464C17D2Ev
  virtual void  v8(); // _ZN8S3464C172v8Ev
  S3464C17(); // tgen
};
//SIG(-1 S3464C17) C1{ BC2{ VBC3{ BC4{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC4 vd v4 FU7{ m Fi[2] FL}} vd v1 FD[3] Fi Fc FC5 Fi:9 Fc[5] Fi Fp[9]}


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

static void Test_S3464C17()
{
  extern Class_Descriptor cd_S3464C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(71,167)];
    init_test(&cd_S3464C17, buf);
    S3464C17 *dp, &lv = *(dp=new (buf) S3464C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,664), "sizeof(S3464C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C17)");
    check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(720,432), "S3464C17");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*), ABISELECT(720,432), "S3464C17");
    /*is_ambiguous_... S3464C17::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(720,432), "S3464C17");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(720,432), "S3464C17");
    /*is_ambiguous_... S3464C17::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(848,508), "S3464C17");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*), ABISELECT(848,508), "S3464C17");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*), 0, "S3464C17");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*), 0, "S3464C17");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*), 0, "S3464C17");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*), ABISELECT(1056,628), "S3464C17");
    check_base_class_offset(lv, (S3464C11*), 0, "S3464C17");
    check_field_offset(lv, s3464c17f0, ABISELECT(224,144), "S3464C17.s3464c17f0");
    check_field_offset(lv, s3464c17f1, ABISELECT(272,180), "S3464C17.s3464c17f1");
    check_field_offset(lv, s3464c17f2, ABISELECT(276,184), "S3464C17.s3464c17f2");
    check_field_offset(lv, s3464c17f3, ABISELECT(288,188), "S3464C17.s3464c17f3");
    set_bf_and_test(lv, s3464c17f4, ABISELECT(624,384), 0, 9, 1, "S3464C17");
    set_bf_and_test(lv, s3464c17f4, ABISELECT(624,384), 0, 9, hide_sll(1LL<<8), "S3464C17");
    check_field_offset(lv, s3464c17f5, ABISELECT(626,386), "S3464C17.s3464c17f5");
    check_field_offset(lv, s3464c17f6, ABISELECT(632,392), "S3464C17.s3464c17f6");
    check_field_offset(lv, s3464c17f7, ABISELECT(640,396), "S3464C17.s3464c17f7");
    test_class_info(&lv, &cd_S3464C17);
    dp->~S3464C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C17(Test_S3464C17, "S3464C17", ABISELECT(1120,664));

#else // __cplusplus

extern void _ZN8S3464C17C1Ev();
extern void _ZN8S3464C17D2Ev();
Name_Map name_map_S3464C17[] = {
  NSPAIR(_ZN8S3464C17C1Ev),
  NSPAIR(_ZN8S3464C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
static Base_Class bases_S3464C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(720,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(720,432), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(848,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(848,508), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3464C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(1056,628), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3464C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3464C17[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C17D1Ev();
extern void _ZN8S3464C17D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C172v8Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C17D1Ev,_ZTv0_n20_N8S3464C17D1Ev)();
extern void ABISELECT(_ZThn720_N8S3464C17D1Ev,_ZThn432_N8S3464C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C17D0Ev,_ZTv0_n20_N8S3464C17D0Ev)();
extern void ABISELECT(_ZThn720_N8S3464C17D0Ev,_ZThn432_N8S3464C17D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C17D1Ev,_ZTv0_n24_N8S3464C17D1Ev)();
extern void ABISELECT(_ZThn848_N8S3464C17D1Ev,_ZThn508_N8S3464C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C17D0Ev,_ZTv0_n24_N8S3464C17D0Ev)();
extern void ABISELECT(_ZThn848_N8S3464C17D0Ev,_ZThn508_N8S3464C17D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY vtc_S3464C17[] = {
  ABISELECT(1056,628),
  ABISELECT(848,508),
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C17D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C172v8Ev,
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C17D1Ev,_ZTv0_n20_N8S3464C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C17D0Ev,_ZTv0_n20_N8S3464C17D0Ev),
  ABISELECT(-848,-508),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-848,-508),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C17D1Ev,_ZTv0_n24_N8S3464C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C17D0Ev,_ZTv0_n24_N8S3464C17D0Ev),
  0,
  0,
  ABISELECT(-1056,-628),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S3464C17[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C17[] = {
  ABISELECT(1056,628),
  ABISELECT(848,508),
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C11__8S3464C17[] = {
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C17[] = {
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn720_N7S3464C3D1Ev,_ZThn432_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn720_N7S3464C3D0Ev,_ZThn432_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C17[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn720_N7S3464C2D1Ev,_ZThn432_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn720_N7S3464C2D0Ev,_ZThn432_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C17[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn720_N8S3464C11D1Ev,_ZThn432_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn720_N8S3464C11D0Ev,_ZThn432_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C11__8S3464C17[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZThn848_N8S3464C11D1Ev,_ZThn508_N8S3464C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
extern void ABISELECT(_ZThn848_N8S3464C11D0Ev,_ZThn508_N8S3464C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C11__8S3464C17[] = {
  ABISELECT(-848,-508),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-848,-508),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C11__8S3464C17[] = {
  0,
  0,
  ABISELECT(-1056,-628),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C17[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__8S3464C17[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
static  VTT_ENTRY vtt_S3464C17[] = {
  {&(_ZTV8S3464C17[5]),  5,36},
  {&(_tg__ZTV8S3464C11__8S3464C17[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C11__8S3464C17[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C11__A1__8S3464C17[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A1__8S3464C17[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C11__8S3464C17[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C11__8S3464C17[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C11__8S3464C17[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C11__8S3464C17[4]),  4,6},
  {&(_ZTV8S3464C17[16]),  16,36},
  {&(_ZTV8S3464C17[26]),  26,36},
  {&(_ZTV8S3464C17[34]),  34,36},
  {&(_tg__ZTV7S3464C3__8S3464C17[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__8S3464C17[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3464C17[];
extern  VTBL_ENTRY _ZTV8S3464C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C17[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S3464C11D0Ev,_ZThn508_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S3464C11D1Ev,_ZThn508_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S3464C11D0Ev,_ZThn432_N8S3464C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S3464C11D1Ev,_ZThn432_N8S3464C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3464C2D0Ev,_ZThn432_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3464C2D1Ev,_ZThn432_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3464C3D0Ev,_ZThn432_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3464C3D1Ev,_ZThn432_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C17D0Ev,_ZTv0_n24_N8S3464C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S3464C17D0Ev,_ZThn508_N8S3464C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C17D1Ev,_ZTv0_n24_N8S3464C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S3464C17D1Ev,_ZThn508_N8S3464C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C17D0Ev,_ZTv0_n20_N8S3464C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S3464C17D0Ev,_ZThn432_N8S3464C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C17D1Ev,_ZTv0_n20_N8S3464C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S3464C17D1Ev,_ZThn432_N8S3464C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C17 = {  "S3464C17", // class name
  bases_S3464C17, 9,
  &(vtc_S3464C17[0]), // expected_vtbl_contents
  &(vtt_S3464C17[0]), // expected_vtt_contents
  ABISELECT(1120,664), // object size
  NSPAIRA(_ZTI8S3464C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3464C17),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3464C17),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C6  : virtual S3464C3 , virtual S3464C7 , S3464C13 , S3464C14 , virtual S3464C17 {
  int s3464c6f0:4;
  int s3464c6f1:12;
  int s3464c6f2;
  char s3464c6f3;
  virtual  ~S3464C6(); // _ZN7S3464C6D2Ev
  virtual void  v9(); // _ZN7S3464C62v9Ev
  S3464C6(); // tgen
};
//SIG(-1 S3464C6) C1{ VBC2{ VBC3{ BC4{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC4 vd Fi FC3 Fi} VBC5{ BC6{ VBC3 Fi} BC2 BC7{ BC8{ VBC4 BC9{ VBC3 VBC2 BC10{ BC2 vd Fi Fp Fi[2]} VBC4 vd v4 FU11{ m Fi[2] FL}} BC3 VBC6 BC2 vd v5 Fi Fi Fi} vd v6 Fi Fl Fi FL} FC10} BC12{ VBC9 BC2 vd v7 v8 Fc FC2 Fc} BC13{ BC3 VBC12 BC14{ BC10 VBC2 vd Fi Fi} Fi Fi[9] FU15{ m Fi FD Fi:32 Fp Fp}} VBC16{ BC9 vd v9 FD[3] Fi Fc FC2 Fi:9 Fc[5] Fi Fp[9]} vd v1 Fi:4 Fi:12 Fi Fc}


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

static void Test_S3464C6()
{
  extern Class_Descriptor cd_S3464C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(256,616)];
    init_test(&cd_S3464C6, buf);
    S3464C6 *dp, &lv = *(dp=new (buf) S3464C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4080,2460), "sizeof(S3464C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C6)");
    /*is_ambiguous_... S3464C6::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C7::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C8*)(S3464C7*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C7*), ABISELECT(1200,728), "S3464C6");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1200,728), "S3464C6");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C8*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C11*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C13*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C13*), ABISELECT(1200,728), "S3464C6");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C15*)(S3464C14*), ABISELECT(1200,728), "S3464C6");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*)(S3464C17*), ABISELECT(1200,728), "S3464C6");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(1200,728), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(992,608), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*), ABISELECT(992,608), "S3464C6");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(992,608), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*), ABISELECT(992,608), "S3464C6");
    /*is_ambiguous_... S3464C15::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C15*)(S3464C14*), ABISELECT(992,608), "S3464C6");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*)(S3464C17*), ABISELECT(992,608), "S3464C6");
    /*is_ambiguous_... S3464C7::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C8*)(S3464C7*), ABISELECT(1328,804), "S3464C6");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C7*), ABISELECT(1344,812), "S3464C6");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C7*), ABISELECT(1344,812), "S3464C6");
    /*is_ambiguous_... S3464C10::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2496,1516), "S3464C6");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2496,1516), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*), ABISELECT(2496,1516), "S3464C6");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*)(S3464C17*), ABISELECT(2496,1516), "S3464C6");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1552,932), "S3464C6");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1552,932), "S3464C6");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1552,932), "S3464C6");
    check_base_class_offset(lv, (S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1552,932), "S3464C6");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1776,1076), "S3464C6");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1776,1076), "S3464C6");
    check_base_class_offset(lv, (S3464C8*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2560,1552), "S3464C6");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1904,1152), "S3464C6");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1904,1152), "S3464C6");
    check_base_class_offset(lv, (S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1552,932), "S3464C6");
    check_base_class_offset(lv, (S3464C9*)(S3464C7*), ABISELECT(1552,932), "S3464C6");
    check_base_class_offset(lv, (S3464C7*), ABISELECT(1328,804), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(2576,1560), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(2576,1560), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C2*)(S3464C11*), ABISELECT(2576,1560), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C11*)(S3464C13*), ABISELECT(2576,1560), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C11*)(S3464C13*), ABISELECT(2576,1560), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C13*), 0, "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C13*), 0, "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C13*), 0, "S3464C6");
    /*is_ambiguous_... S3464C14::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*)(S3464C14*), ABISELECT(560,324), "S3464C6");
    /*is_ambiguous_... S3464C14::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C14*), ABISELECT(560,324), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C13*), ABISELECT(2800,1704), "S3464C6");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C13*), ABISELECT(2800,1704), "S3464C6");
    check_base_class_offset(lv, (S3464C13*)(S3464C14*), ABISELECT(2800,1704), "S3464C6");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C15*)(S3464C14*), ABISELECT(688,400), "S3464C6");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C15*)(S3464C14*), ABISELECT(688,400), "S3464C6");
    check_base_class_offset(lv, (S3464C2*)(S3464C15*)(S3464C14*), ABISELECT(688,400), "S3464C6");
    check_base_class_offset(lv, (S3464C15*)(S3464C14*), ABISELECT(688,400), "S3464C6");
    check_base_class_offset(lv, (S3464C14*), ABISELECT(560,324), "S3464C6");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(3360,2028), "S3464C6");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(3360,2028), "S3464C6");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(3360,2028), "S3464C6");
    check_base_class_offset(lv, (S3464C11*)(S3464C17*), ABISELECT(3360,2028), "S3464C6");
    check_base_class_offset(lv, (S3464C17*), ABISELECT(3360,2028), "S3464C6");
    set_bf_and_test(lv, s3464c6f0, ABISELECT(976,596), 0, 4, 1, "S3464C6");
    set_bf_and_test(lv, s3464c6f0, ABISELECT(976,596), 0, 4, hide_sll(1LL<<3), "S3464C6");
    set_bf_and_test(lv, s3464c6f1, ABISELECT(976,596), 4, 12, 1, "S3464C6");
    set_bf_and_test(lv, s3464c6f1, ABISELECT(976,596), 4, 12, hide_sll(1LL<<11), "S3464C6");
    check_field_offset(lv, s3464c6f2, ABISELECT(980,600), "S3464C6.s3464c6f2");
    check_field_offset(lv, s3464c6f3, ABISELECT(984,604), "S3464C6.s3464c6f3");
    test_class_info(&lv, &cd_S3464C6);
    dp->~S3464C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C6(Test_S3464C6, "S3464C6", ABISELECT(4080,2460));

#else // __cplusplus

extern void _ZN7S3464C6C1Ev();
extern void _ZN7S3464C6D2Ev();
Name_Map name_map_S3464C6[] = {
  NSPAIR(_ZN7S3464C6C1Ev),
  NSPAIR(_ZN7S3464C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C10;
extern VTBL_ENTRY _ZTI8S3464C10[];
extern  VTBL_ENTRY _ZTV8S3464C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C10[];
extern Class_Descriptor cd_S3464C9;
extern VTBL_ENTRY _ZTI7S3464C9[];
extern  VTBL_ENTRY _ZTV7S3464C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C9[];
extern Class_Descriptor cd_S3464C7;
extern VTBL_ENTRY _ZTI7S3464C7[];
extern  VTBL_ENTRY _ZTV7S3464C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C7[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C13;
extern VTBL_ENTRY _ZTI8S3464C13[];
extern  VTBL_ENTRY _ZTV8S3464C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C13[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C13;
extern VTBL_ENTRY _ZTI8S3464C13[];
extern  VTBL_ENTRY _ZTV8S3464C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C13[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C15;
extern VTBL_ENTRY _ZTI8S3464C15[];
extern  VTBL_ENTRY _ZTV8S3464C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C15[];
extern Class_Descriptor cd_S3464C14;
extern VTBL_ENTRY _ZTI8S3464C14[];
extern  VTBL_ENTRY _ZTV8S3464C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C14[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C17;
extern VTBL_ENTRY _ZTI8S3464C17[];
extern  VTBL_ENTRY _ZTV8S3464C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C17[];
static Base_Class bases_S3464C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(1200,728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(1200,728), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(992,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3464C3,    ABISELECT(992,608), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C8,    ABISELECT(1328,804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(1344,812), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(1344,812), //bcp->offset
    69, //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
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(2496,1516), //bcp->offset
    102, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3464C11,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(1776,1076), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(1776,1076), //bcp->offset
    89, //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
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3464C8,    ABISELECT(2560,1552), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(1904,1152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(1904,1152), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3464C10,    ABISELECT(1552,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3464C9,    ABISELECT(1552,932), //bcp->offset
    76, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3464C7,    ABISELECT(1328,804), //bcp->offset
    55, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    ABISELECT(2576,1560), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(2576,1560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(2576,1560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3464C11,    ABISELECT(2576,1560), //bcp->offset
    114, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3464C13,    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
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(560,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
    36, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(560,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
    37, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(2800,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(2800,1704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3464C13,    ABISELECT(2800,1704), //bcp->offset
    128, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(688,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(688,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(688,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3464C15,    ABISELECT(688,400), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3464C14,    ABISELECT(560,324), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3464C11,    ABISELECT(3360,2028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3464C17,    ABISELECT(3360,2028), //bcp->offset
    145, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3464C6[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C6D1Ev();
extern void _ZN7S3464C6D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
extern void _ZN7S3464C62v9Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn560_N7S3464C6D1Ev,_ZThn324_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn560_N7S3464C6D0Ev,_ZThn324_N7S3464C6D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn688_N7S3464C6D1Ev,_ZThn400_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn688_N7S3464C6D0Ev,_ZThn400_N7S3464C6D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C6D1Ev,_ZTv0_n24_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn992_N7S3464C6D1Ev,_ZThn608_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3464C6D0Ev,_ZTv0_n24_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn992_N7S3464C6D0Ev,_ZThn608_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C6D1Ev,_ZTv0_n20_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn1200_N7S3464C6D1Ev,_ZThn728_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C6D0Ev,_ZTv0_n20_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn1200_N7S3464C6D0Ev,_ZThn728_N7S3464C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3464C6D1Ev,_ZTv0_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn1328_N7S3464C6D1Ev,_ZThn804_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3464C6D0Ev,_ZTv0_n28_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn1328_N7S3464C6D0Ev,_ZThn804_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn16_n56_N7S3464C6D1Ev,_ZTvn8_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3464C6D0Ev,_ZTvn8_n28_N7S3464C6D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn224_n56_N7S3464C6D1Ev,_ZTvn128_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N7S3464C6D0Ev,_ZTvn128_n28_N7S3464C6D0Ev)();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn448_n56_N7S3464C6D1Ev,_ZTvn272_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N7S3464C6D0Ev,_ZTvn272_n28_N7S3464C6D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn576_n56_N7S3464C6D1Ev,_ZTvn348_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N7S3464C6D0Ev,_ZTvn348_n28_N7S3464C6D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S3464C6D1Ev,_ZTv0_n16_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn2560_N7S3464C6D1Ev,_ZThn1552_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C6D0Ev,_ZTv0_n16_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn2560_N7S3464C6D0Ev,_ZThn1552_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn2576_N7S3464C6D1Ev,_ZThn1560_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn2576_N7S3464C6D0Ev,_ZThn1560_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S3464C6D1Ev,_ZTv0_n36_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn2800_N7S3464C6D1Ev,_ZThn1704_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3464C6D0Ev,_ZTv0_n36_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn2800_N7S3464C6D0Ev,_ZThn1704_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn3360_N7S3464C6D1Ev,_ZThn2028_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn3360_N7S3464C6D0Ev,_ZThn2028_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C172v8Ev();
static  VTBL_ENTRY vtc_S3464C6[] = {
  ABISELECT(3360,2028),
  ABISELECT(2800,1704),
  ABISELECT(2560,1552),
  ABISELECT(1328,804),
  ABISELECT(2496,1516),
  ABISELECT(992,608),
  ABISELECT(2576,1560),
  ABISELECT(1200,728),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C6D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
  (VTBL_ENTRY)&_ZN7S3464C62v9Ev,
  ABISELECT(1936,1192),
  ABISELECT(432,284),
  ABISELECT(640,404),
  ABISELECT(2016,1236),
  ABISELECT(2240,1380),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N7S3464C6D1Ev,_ZThn324_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N7S3464C6D0Ev,_ZThn324_N7S3464C6D0Ev),
  ABISELECT(304,208),
  ABISELECT(512,328),
  ABISELECT(-688,-400),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N7S3464C6D1Ev,_ZThn400_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N7S3464C6D0Ev,_ZThn400_N7S3464C6D0Ev),
  ABISELECT(-992,-608),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-992,-608),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C6D1Ev,_ZTv0_n24_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C6D0Ev,_ZTv0_n24_N7S3464C6D0Ev),
  ABISELECT(-1200,-728),
  0,
  0,
  ABISELECT(-1200,-728),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C6D1Ev,_ZTv0_n20_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C6D0Ev,_ZTv0_n20_N7S3464C6D0Ev),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-1328,-804),
  ABISELECT(1232,748),
  ABISELECT(-336,-196),
  ABISELECT(1168,712),
  ABISELECT(-128,-76),
  ABISELECT(-1328,-804),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3464C6D1Ev,_ZTv0_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3464C6D0Ev,_ZTv0_n28_N7S3464C6D0Ev),
  ABISELECT(-144,-84),
  ABISELECT(-1344,-812),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3464C6D1Ev,_ZTvn8_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3464C6D0Ev,_ZTvn8_n28_N7S3464C6D0Ev),
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  ABISELECT(-1552,-932),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N7S3464C6D1Ev,_ZTvn128_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N7S3464C6D0Ev,_ZTvn128_n28_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
  ABISELECT(-1776,-1076),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N7S3464C6D1Ev,_ZTvn272_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N7S3464C6D0Ev,_ZTvn272_n28_N7S3464C6D0Ev),
  ABISELECT(-704,-424),
  ABISELECT(-1904,-1152),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N7S3464C6D1Ev,_ZTvn348_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N7S3464C6D0Ev,_ZTvn348_n28_N7S3464C6D0Ev),
  0,
  0,
  ABISELECT(-2496,-1516),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  ABISELECT(-2560,-1552),
  ABISELECT(-1360,-824),
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C6D1Ev,_ZTv0_n16_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C6D0Ev,_ZTv0_n16_N7S3464C6D0Ev),
  0,
  ABISELECT(-2576,-1560),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(-2576,-1560),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  0,
  0,
  ABISELECT(-2800,-1704),
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-1808,-1096),
  ABISELECT(-224,-144),
  ABISELECT(-1600,-976),
  ABISELECT(-2800,-1704),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3464C6D1Ev,_ZTv0_n36_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3464C6D0Ev,_ZTv0_n36_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
  0,
  0,
  ABISELECT(-3360,-2028),
  0,
  0,
  ABISELECT(-864,-512),
  ABISELECT(-2368,-1420),
  ABISELECT(-2160,-1300),
  ABISELECT(-3360,-2028),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C172v8Ev,
};
extern VTBL_ENTRY _ZTV7S3464C6[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C13D1Ev();
extern void _ZN8S3464C13D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C13__A__7S3464C6[] = {
  ABISELECT(2496,1516),
  ABISELECT(992,608),
  ABISELECT(2576,1560),
  ABISELECT(1200,728),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C13__A5__7S3464C6[] = {
  ABISELECT(1200,728),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn1200_N7S3464C3D1Ev,_ZThn728_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn1200_N7S3464C3D0Ev,_ZThn728_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C13__A5__7S3464C6[] = {
  ABISELECT(-1200,-728),
  0,
  0,
  ABISELECT(-1200,-728),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn2576_N8S3464C13D1Ev,_ZThn1560_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn2576_N8S3464C13D0Ev,_ZThn1560_N8S3464C13D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C13__A__7S3464C6[] = {
  0,
  ABISELECT(-2576,-1560),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(-2576,-1560),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C13D1Ev,_ZThn728_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C13D0Ev,_ZThn728_N8S3464C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C13__A__7S3464C6[] = {
  ABISELECT(-1200,-728),
  0,
  0,
  ABISELECT(-1200,-728),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn992_N8S3464C13D1Ev,_ZThn608_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn992_N8S3464C13D0Ev,_ZThn608_N8S3464C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C13__A__7S3464C6[] = {
  ABISELECT(-992,-608),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-992,-608),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C13__A__7S3464C6[] = {
  0,
  0,
  ABISELECT(-2496,-1516),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C14D1Ev();
extern void _ZN8S3464C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C14__7S3464C6[] = {
  ABISELECT(1936,1192),
  ABISELECT(432,284),
  ABISELECT(640,404),
  ABISELECT(2016,1236),
  ABISELECT(2240,1380),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C14D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C15D1Ev();
extern void _ZN8S3464C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C158S3464C14__7S3464C6[] = {
  ABISELECT(304,208),
  ABISELECT(512,328),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C158S3464C14__A2__7S3464C6[] = {
  ABISELECT(512,328),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C158S3464C14__A7__7S3464C6[] = {
  ABISELECT(512,328),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn512_N7S3464C3D1Ev,_ZThn328_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn512_N7S3464C3D0Ev,_ZThn328_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C158S3464C14__A7__7S3464C6[] = {
  ABISELECT(-512,-328),
  0,
  0,
  ABISELECT(-512,-328),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn512_N7S3464C2D1Ev,_ZThn328_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn512_N7S3464C2D0Ev,_ZThn328_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C158S3464C14__A2__7S3464C6[] = {
  ABISELECT(-512,-328),
  0,
  0,
  ABISELECT(-512,-328),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn512_N8S3464C15D1Ev,_ZThn328_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn512_N8S3464C15D0Ev,_ZThn328_N8S3464C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C158S3464C14__7S3464C6[] = {
  ABISELECT(-512,-328),
  0,
  0,
  ABISELECT(-512,-328),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn304_N8S3464C15D1Ev,_ZThn208_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn304_N8S3464C15D0Ev,_ZThn208_N8S3464C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__A1__8S3464C158S3464C14__7S3464C6[] = {
  ABISELECT(-304,-208),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-304,-208),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn2240_N8S3464C14D1Ev,_ZThn1380_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn2240_N8S3464C14D0Ev,_ZThn1380_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C13__8S3464C14__7S3464C6[] = {
  0,
  0,
  ABISELECT(-2240,-1380),
  0,
  0,
  ABISELECT(-304,-188),
  ABISELECT(-1808,-1096),
  ABISELECT(-224,-144),
  ABISELECT(-1600,-976),
  ABISELECT(-2240,-1380),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn2016_N8S3464C14D1Ev,_ZThn1236_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn2016_N8S3464C14D0Ev,_ZThn1236_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C14__7S3464C6[] = {
  0,
  ABISELECT(-2016,-1236),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(-2016,-1236),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn640_N8S3464C14D1Ev,_ZThn404_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn640_N8S3464C14D0Ev,_ZThn404_N8S3464C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__A1__8S3464C14__7S3464C6[] = {
  ABISELECT(-640,-404),
  0,
  0,
  ABISELECT(-640,-404),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn432_N8S3464C14D1Ev,_ZThn284_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn432_N8S3464C14D0Ev,_ZThn284_N8S3464C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C14__7S3464C6[] = {
  ABISELECT(-432,-284),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(-432,-284),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A4__8S3464C14__7S3464C6[] = {
  0,
  0,
  ABISELECT(-1936,-1192),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn128_N8S3464C14D1Ev,_ZThn76_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn128_N8S3464C14D0Ev,_ZThn76_N8S3464C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3464C15__8S3464C14__7S3464C6[] = {
  ABISELECT(304,208),
  ABISELECT(512,328),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S3464C14D1Ev,_ZThn76_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S3464C14D0Ev,_ZThn76_N8S3464C14D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__7S3464C6[] = {
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn208_N7S3464C3D1Ev,_ZThn120_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn208_N7S3464C3D0Ev,_ZThn120_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__7S3464C6[] = {
  ABISELECT(-208,-120),
  0,
  0,
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C7D1Ev();
extern void _ZN7S3464C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C7__7S3464C6[] = {
  ABISELECT(1232,748),
  ABISELECT(-336,-196),
  ABISELECT(1168,712),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C7D0Ev,
};
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C87S3464C7__7S3464C6[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C87S3464C7__7S3464C6[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C7__A1__7S3464C6[] = {
  ABISELECT(-144,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C7__A1__7S3464C6[] = {
  ABISELECT(144,84),
  0,
  0,
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C9D1Ev();
extern void _ZN7S3464C9D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C10D1Ev();
extern void _ZN8S3464C10D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C118S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C118S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A2__7S3464C6[] = {
  ABISELECT(-352,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A2__7S3464C6[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C118S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C118S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C118S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(560,324),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(560,324),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C118S3464C107S3464C97S3464C7__7S3464C6[] = {
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C107S3464C97S3464C7__A3__7S3464C6[] = {
  ABISELECT(-704,-424),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C107S3464C97S3464C7__A3__7S3464C6[] = {
  ABISELECT(704,424),
  0,
  0,
  ABISELECT(704,424),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__8S3464C107S3464C97S3464C7__7S3464C6[] = {
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(560,324),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(560,324),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn1008_N8S3464C10D1Ev,_ZThn620_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn1008_N8S3464C10D0Ev,_ZThn620_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__8S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(-1008,-620),
  ABISELECT(-1360,-824),
  ABISELECT(-1008,-620),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__8S3464C107S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(-704,-424),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__7S3464C97S3464C7__7S3464C6[] = {
  0,
  0,
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(352,204),
  0,
  0,
  ABISELECT(352,204),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__7S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(560,324),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(560,324),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn1008_N7S3464C9D1Ev,_ZThn620_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn1008_N7S3464C9D0Ev,_ZThn620_N7S3464C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__7S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(-1008,-620),
  ABISELECT(-1360,-824),
  ABISELECT(-1008,-620),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C10__A2__7S3464C97S3464C7__7S3464C6[] = {
  ABISELECT(-704,-424),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C7D1Ev,_ZTv0_n20_N7S3464C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C7D0Ev,_ZTv0_n20_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C7__7S3464C6[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C7D1Ev,_ZTv0_n20_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C7D0Ev,_ZTv0_n20_N7S3464C7D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn16_N7S3464C7D1Ev,_ZThn8_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3464C7D0Ev,_ZThn8_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__7S3464C7__7S3464C6[] = {
  ABISELECT(-144,-84),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3464C7D1Ev,_ZThn8_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3464C7D0Ev,_ZThn8_N7S3464C7D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn224_N7S3464C7D1Ev,_ZThn128_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C7D0Ev,_ZThn128_N7S3464C7D0Ev)();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C9__7S3464C7__7S3464C6[] = {
  ABISELECT(1008,620),
  ABISELECT(944,584),
  ABISELECT(-560,-324),
  ABISELECT(-352,-204),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C7D1Ev,_ZThn128_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C7D0Ev,_ZThn128_N7S3464C7D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A2__7S3464C7__7S3464C6[] = {
  0,
  0,
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C7D1Ev,_ZTv0_n24_N7S3464C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3464C7D0Ev,_ZTv0_n24_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A1__7S3464C7__7S3464C6[] = {
  ABISELECT(336,196),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(336,196),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C7D1Ev,_ZTv0_n24_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C7D0Ev,_ZTv0_n24_N7S3464C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn1232_N7S3464C7D1Ev,_ZThn748_N7S3464C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev)();
extern void ABISELECT(_ZThn1232_N7S3464C7D0Ev,_ZThn748_N7S3464C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__A1__7S3464C7__7S3464C6[] = {
  ABISELECT(-1232,-748),
  ABISELECT(-1360,-824),
  ABISELECT(-1232,-748),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn576_N7S3464C7D1Ev,_ZThn348_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn576_N7S3464C7D0Ev,_ZThn348_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C107S3464C9__A3__7S3464C7__7S3464C6[] = {
  ABISELECT(-704,-424),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S3464C7D1Ev,_ZThn348_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S3464C7D0Ev,_ZThn348_N7S3464C7D0Ev),
};
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C8__A1__7S3464C6[] = {
  ABISELECT(-1360,-824),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C8__A1__7S3464C6[] = {
  ABISELECT(1360,824),
  0,
  0,
  ABISELECT(1360,824),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__A1__7S3464C6[] = {
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C11__A1__7S3464C6[] = {
  ABISELECT(-1376,-832),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C11__A4__7S3464C6[] = {
  ABISELECT(-1376,-832),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A4__7S3464C6[] = {
  ABISELECT(1376,832),
  0,
  0,
  ABISELECT(1376,832),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C11__A1__7S3464C6[] = {
  ABISELECT(1376,832),
  0,
  0,
  ABISELECT(1376,832),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C11__A1__7S3464C6[] = {
  ABISELECT(1376,832),
  0,
  0,
  ABISELECT(1376,832),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C11__A1__7S3464C6[] = {
  ABISELECT(1584,952),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(1584,952),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C11__A1__7S3464C6[] = {
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C13D1Ev();
extern void _ZN8S3464C13D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C13__A1__7S3464C6[] = {
  ABISELECT(-304,-188),
  ABISELECT(-1808,-1096),
  ABISELECT(-224,-144),
  ABISELECT(-1600,-976),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C13__A6__7S3464C6[] = {
  ABISELECT(-1600,-976),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C13__A6__7S3464C6[] = {
  ABISELECT(1600,976),
  0,
  0,
  ABISELECT(1600,976),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev)();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C13__A1__7S3464C6[] = {
  0,
  ABISELECT(224,144),
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-1584,-952),
  ABISELECT(-1376,-832),
  ABISELECT(224,144),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C13__A1__7S3464C6[] = {
  ABISELECT(1600,976),
  0,
  0,
  ABISELECT(1600,976),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C13__A1__7S3464C6[] = {
  ABISELECT(1808,1096),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(1808,1096),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C13__A1__7S3464C6[] = {
  0,
  0,
  ABISELECT(304,188),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C17D1Ev();
extern void _ZN8S3464C17D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C172v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C17__7S3464C6[] = {
  ABISELECT(-864,-512),
  ABISELECT(-2368,-1420),
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C17D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C172v8Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C118S3464C17__A2__7S3464C6[] = {
  ABISELECT(-864,-512),
  ABISELECT(-2368,-1420),
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C118S3464C17__A3__7S3464C6[] = {
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C118S3464C17__A8__7S3464C6[] = {
  ABISELECT(-2160,-1300),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C17__A8__7S3464C6[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C118S3464C17__A3__7S3464C6[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C118S3464C17__A2__7S3464C6[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C118S3464C17__A2__7S3464C6[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C118S3464C17__A2__7S3464C6[] = {
  0,
  0,
  ABISELECT(864,512),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C17D1Ev,_ZTv0_n20_N8S3464C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C17D0Ev,_ZTv0_n20_N8S3464C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C17__7S3464C6[] = {
  ABISELECT(2160,1300),
  0,
  0,
  ABISELECT(2160,1300),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C17D1Ev,_ZTv0_n20_N8S3464C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C17D0Ev,_ZTv0_n20_N8S3464C17D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C17D1Ev,_ZTv0_n24_N8S3464C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C17D0Ev,_ZTv0_n24_N8S3464C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C17__7S3464C6[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(208,120),
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C17D1Ev,_ZTv0_n24_N8S3464C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C17D0Ev,_ZTv0_n24_N8S3464C17D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C17__7S3464C6[] = {
  0,
  0,
  ABISELECT(864,512),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
static  VTT_ENTRY vtt_S3464C6[] = {
  {&(_ZTV7S3464C6[10]),  10,161},
  {&(_tg__ZTV8S3464C13__A__7S3464C6[6]),  6,12},
  {&(_tg__ZTV7S3464C38S3464C13__A5__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C13__A5__7S3464C6[5]),  5,9},
  {&(_tg__ZTV8S3464C11__8S3464C13__A__7S3464C6[9]),  9,14},
  {&(_tg__ZTV7S3464C4__8S3464C13__A__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C13__A__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C13__A__7S3464C6[4]),  4,6},
  {&(_tg__ZTV8S3464C14__7S3464C6[7]),  7,11},
  {&(_tg__ZTV8S3464C158S3464C14__7S3464C6[4]),  4,8},
  {&(_tg__ZTV7S3464C28S3464C158S3464C14__A2__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C158S3464C14__A7__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C158S3464C14__A7__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C158S3464C14__A2__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C158S3464C14__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__A1__8S3464C158S3464C14__7S3464C6[6]),  6,10},
  {&(_tg__ZTV8S3464C13__8S3464C14__7S3464C6[11]),  11,17},
  {&(_tg__ZTV8S3464C11__8S3464C14__7S3464C6[9]),  9,14},
  {&(_tg__ZTV7S3464C4__A1__8S3464C14__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C14__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A4__8S3464C14__7S3464C6[4]),  4,6},
  {&(_tg__ZTV8S3464C15__8S3464C14__7S3464C6[4]),  4,8},
  {&(_ZTV7S3464C6[42]),  42,161},
  {&(_ZTV7S3464C6[51]),  51,161},
  {&(_ZTV7S3464C6[67]),  67,161},
  {&(_ZTV7S3464C6[72]),  72,161},
  {&(_ZTV7S3464C6[82]),  82,161},
  {&(_ZTV7S3464C6[106]),  106,161},
  {&(_ZTV7S3464C6[91]),  91,161},
  {&(_ZTV7S3464C6[112]),  112,161},
  {&(_ZTV7S3464C6[98]),  98,161},
  {&(_ZTV7S3464C6[123]),  123,161},
  {&(_ZTV7S3464C6[24]),  24,161},
  {&(_ZTV7S3464C6[139]),  139,161},
  {&(_ZTV7S3464C6[32]),  32,161},
  {&(_ZTV7S3464C6[155]),  155,161},
  {&(_tg__ZTV7S3464C3__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C7__7S3464C6[6]),  6,8},
  {&(_tg__ZTV7S3464C87S3464C7__7S3464C6[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C87S3464C7__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C37S3464C7__A1__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C7__A1__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C97S3464C7__7S3464C6[6]),  6,13},
  {&(_tg__ZTV8S3464C107S3464C97S3464C7__7S3464C6[6]),  6,12},
  {&(_tg__ZTV8S3464C118S3464C107S3464C97S3464C7__7S3464C6[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C118S3464C107S3464C97S3464C7__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A2__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A2__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C118S3464C107S3464C97S3464C7__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C118S3464C107S3464C97S3464C7__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C118S3464C107S3464C97S3464C7__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C118S3464C107S3464C97S3464C7__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C107S3464C97S3464C7__A3__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C107S3464C97S3464C7__A3__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C5__8S3464C107S3464C97S3464C7__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C4__8S3464C107S3464C97S3464C7__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C107S3464C97S3464C7__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C8__8S3464C107S3464C97S3464C7__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C3__A__8S3464C107S3464C97S3464C7__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C5__7S3464C97S3464C7__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C4__7S3464C97S3464C7__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__7S3464C97S3464C7__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C8__7S3464C97S3464C7__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C10__A2__7S3464C97S3464C7__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C7__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__A__7S3464C7__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C9__7S3464C7__7S3464C6[6]),  6,13},
  {&(_tg__ZTV7S3464C5__A2__7S3464C7__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C3__A1__7S3464C7__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C8__A1__7S3464C7__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C107S3464C9__A3__7S3464C7__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C8__A1__7S3464C6[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C8__A1__7S3464C6[5]),  5,9},
  {&(_tg__ZTV8S3464C11__A1__7S3464C6[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C11__A1__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C11__A4__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A4__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C11__A1__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C11__A1__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C11__A1__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C11__A1__7S3464C6[4]),  4,6},
  {&(_tg__ZTV8S3464C13__A1__7S3464C6[6]),  6,12},
  {&(_tg__ZTV7S3464C38S3464C13__A6__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C13__A6__7S3464C6[5]),  5,9},
  {&(_tg__ZTV8S3464C11__8S3464C13__A1__7S3464C6[9]),  9,14},
  {&(_tg__ZTV7S3464C4__8S3464C13__A1__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C13__A1__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C13__A1__7S3464C6[4]),  4,6},
  {&(_tg__ZTV8S3464C17__7S3464C6[5]),  5,11},
  {&(_tg__ZTV8S3464C118S3464C17__A2__7S3464C6[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C118S3464C17__A3__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C118S3464C17__A8__7S3464C6[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C17__A8__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C118S3464C17__A3__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C118S3464C17__A2__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C118S3464C17__A2__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C118S3464C17__A2__7S3464C6[4]),  4,6},
  {&(_tg__ZTV7S3464C4__8S3464C17__7S3464C6[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C17__7S3464C6[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C17__7S3464C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3464C6[];
extern  VTBL_ENTRY _ZTV7S3464C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C6[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N7S3464C7D0Ev,_ZThn748_N7S3464C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N7S3464C7D1Ev,_ZThn748_N7S3464C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N7S3464C9D0Ev,_ZThn620_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N7S3464C9D1Ev,_ZThn620_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N8S3464C10D0Ev,_ZThn620_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N8S3464C10D1Ev,_ZThn620_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S3464C14D0Ev,_ZThn284_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S3464C14D1Ev,_ZThn284_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S3464C14D0Ev,_ZThn404_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S3464C14D1Ev,_ZThn404_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S3464C14D0Ev,_ZThn1236_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S3464C14D1Ev,_ZThn1236_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S3464C14D0Ev,_ZThn1380_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S3464C14D1Ev,_ZThn1380_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S3464C15D0Ev,_ZThn208_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S3464C15D1Ev,_ZThn208_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S3464C15D0Ev,_ZThn328_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S3464C15D1Ev,_ZThn328_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N7S3464C2D0Ev,_ZThn328_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N7S3464C2D1Ev,_ZThn328_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N8S3464C13D0Ev,_ZThn608_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N8S3464C13D1Ev,_ZThn608_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C13D0Ev,_ZThn728_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C13D1Ev,_ZThn728_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N8S3464C13D0Ev,_ZThn1560_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N8S3464C13D1Ev,_ZThn1560_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S3464C3D0Ev,_ZThn120_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N7S3464C3D0Ev,_ZThn328_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S3464C3D0Ev,_ZThn728_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S3464C3D1Ev,_ZThn120_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn512_N7S3464C3D1Ev,_ZThn328_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S3464C3D1Ev,_ZThn728_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3464C6D0Ev,_ZTv0_n36_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N7S3464C6D0Ev,_ZThn1704_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3464C6D1Ev,_ZTv0_n36_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2800_N7S3464C6D1Ev,_ZThn1704_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N7S3464C6D0Ev,_ZThn2028_N7S3464C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N7S3464C6D0Ev,_ZThn1560_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3360_N7S3464C6D1Ev,_ZThn2028_N7S3464C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N7S3464C6D1Ev,_ZThn1560_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C6D0Ev,_ZTv0_n16_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N7S3464C6D0Ev,_ZThn1552_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C6D1Ev,_ZTv0_n16_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N7S3464C6D1Ev,_ZThn1552_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3464C6D0Ev,_ZTv0_n28_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N7S3464C6D0Ev,_ZThn804_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3464C6D1Ev,_ZTv0_n28_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1328_N7S3464C6D1Ev,_ZThn804_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C6D0Ev,_ZTv0_n20_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S3464C6D0Ev,_ZThn728_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C6D1Ev,_ZTv0_n20_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S3464C6D1Ev,_ZThn728_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C6D0Ev,_ZTv0_n24_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N7S3464C6D0Ev,_ZThn608_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C6D1Ev,_ZTv0_n24_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N7S3464C6D1Ev,_ZThn608_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C6 = {  "S3464C6", // class name
  bases_S3464C6, 42,
  &(vtc_S3464C6[0]), // expected_vtbl_contents
  &(vtt_S3464C6[0]), // expected_vtt_contents
  ABISELECT(4080,2460), // object size
  NSPAIRA(_ZTI7S3464C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3464C6),161, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3464C6),101, //virtual table table var
  42, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3464C1  : S3464C2 , virtual S3464C5 , S3464C3 , S3464C6 {
  int s3464c1f0:32;
  int s3464c1f1;
  int s3464c1f2;
  virtual  ~S3464C1(); // _ZN7S3464C1D2Ev
  S3464C1(); // tgen
};
//SIG(1 S3464C1) C1{ BC2{ BC3{ VBC4{ BC5{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC5 vd Fi FC4 Fi} vd Fi Fp Fi[2]} VBC5 BC3 BC6{ VBC3 VBC7{ BC8{ VBC4 Fi} BC3 BC9{ BC10{ VBC5 BC11{ VBC4 VBC3 BC2 VBC5 vd v3 FU12{ m Fi[2] FL}} BC4 VBC8 BC3 vd v4 Fi Fi Fi} vd v5 Fi Fl Fi FL} FC2} BC13{ VBC11 BC3 vd v6 v7 Fc FC3 Fc} BC14{ BC4 VBC13 BC15{ BC2 VBC3 vd Fi Fi} Fi Fi[9] FU16{ m Fi FD Fi:32 Fp Fp}} VBC17{ BC11 vd v8 FD[3] Fi Fc FC3 Fi:9 Fc[5] Fi Fp[9]} vd v9 Fi:4 Fi:12 Fi Fc} vd Fi:32 Fi Fi}


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

static void Test_S3464C1()
{
  extern Class_Descriptor cd_S3464C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(284,683)];
    init_test(&cd_S3464C1, buf);
    S3464C1 *dp, &lv = *(dp=new (buf) S3464C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4528,2728), "sizeof(S3464C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3464C1)");
    /*is_ambiguous_... S3464C1::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C2 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C7::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C8*)(S3464C7*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C7*), ABISELECT(1440,876), "S3464C1");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1440,876), "S3464C1");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C8*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C11*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C13*)(S3464C6*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C13*), ABISELECT(1440,876), "S3464C1");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C15*)(S3464C14*)(S3464C6*), ABISELECT(1440,876), "S3464C1");
    check_base_class_offset(lv, (S3464C4*)(S3464C11*)(S3464C17*), ABISELECT(1440,876), "S3464C1");
    check_base_class_offset(lv, (S3464C4*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(1440,876), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C2 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*), 0, "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C2 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C2*), 0, "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C2 */ AMB_check_base_class_offset(lv, (S3464C2*), 0, "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*), ABISELECT(1568,952), "S3464C1");
    /*is_ambiguous_... S3464C10::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1568,952), "S3464C1");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1568,952), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*), ABISELECT(1568,952), "S3464C1");
    /*is_ambiguous_... S3464C11::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C11*)(S3464C17*), ABISELECT(1568,952), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(224,136), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*), ABISELECT(224,136), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*), ABISELECT(1632,988), "S3464C1");
    /*is_ambiguous_... S3464C6::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C6*), ABISELECT(1632,988), "S3464C1");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(1632,988), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*), ABISELECT(1632,988), "S3464C1");
    /*is_ambiguous_... S3464C15::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C15*)(S3464C14*)(S3464C6*), ABISELECT(1632,988), "S3464C1");
    /*is_ambiguous_... S3464C11::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C11*)(S3464C17*), ABISELECT(1632,988), "S3464C1");
    /*is_ambiguous_... S3464C7::S3464C8 */ AMB_check_base_class_offset(lv, (S3464C8*)(S3464C7*), ABISELECT(1840,1108), "S3464C1");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C7*), ABISELECT(1856,1116), "S3464C1");
    /*is_ambiguous_... S3464C7::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C7*), ABISELECT(1856,1116), "S3464C1");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2064,1236), "S3464C1");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2064,1236), "S3464C1");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2064,1236), "S3464C1");
    check_base_class_offset(lv, (S3464C11*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2064,1236), "S3464C1");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2288,1380), "S3464C1");
    /*is_ambiguous_... S3464C10::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2288,1380), "S3464C1");
    check_base_class_offset(lv, (S3464C8*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(3008,1820), "S3464C1");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2416,1456), "S3464C1");
    /*is_ambiguous_... S3464C10::S3464C3 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2416,1456), "S3464C1");
    check_base_class_offset(lv, (S3464C10*)(S3464C9*)(S3464C7*), ABISELECT(2064,1236), "S3464C1");
    check_base_class_offset(lv, (S3464C9*)(S3464C7*), ABISELECT(2064,1236), "S3464C1");
    check_base_class_offset(lv, (S3464C7*)(S3464C6*), ABISELECT(1840,1108), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(3024,1828), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*), ABISELECT(3024,1828), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C11 */ AMB_check_base_class_offset(lv, (S3464C2*)(S3464C11*), ABISELECT(3024,1828), "S3464C1");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C11*)(S3464C13*)(S3464C6*), ABISELECT(3024,1828), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C11*)(S3464C13*), ABISELECT(3024,1828), "S3464C1");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C13*)(S3464C6*), ABISELECT(432,256), "S3464C1");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C13*)(S3464C6*), ABISELECT(432,256), "S3464C1");
    /*is_ambiguous_... S3464C6::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C13*)(S3464C6*), ABISELECT(432,256), "S3464C1");
    /*is_ambiguous_... S3464C14::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C4*)(S3464C14*)(S3464C6*), ABISELECT(992,580), "S3464C1");
    /*is_ambiguous_... S3464C14::S3464C4 */ AMB_check_base_class_offset(lv, (S3464C4*)(S3464C14*)(S3464C6*), ABISELECT(992,580), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C13*), ABISELECT(3248,1972), "S3464C1");
    /*is_ambiguous_... S3464C1::S3464C13 */ AMB_check_base_class_offset(lv, (S3464C3*)(S3464C13*), ABISELECT(3248,1972), "S3464C1");
    check_base_class_offset(lv, (S3464C13*)(S3464C14*)(S3464C6*), ABISELECT(3248,1972), "S3464C1");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C15*)(S3464C14*)(S3464C6*), ABISELECT(1120,656), "S3464C1");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C15*)(S3464C14*)(S3464C6*), ABISELECT(1120,656), "S3464C1");
    check_base_class_offset(lv, (S3464C2*)(S3464C15*)(S3464C14*)(S3464C6*), ABISELECT(1120,656), "S3464C1");
    check_base_class_offset(lv, (S3464C15*)(S3464C14*)(S3464C6*), ABISELECT(1120,656), "S3464C1");
    check_base_class_offset(lv, (S3464C14*)(S3464C6*), ABISELECT(992,580), "S3464C1");
    /*is_ambiguous_... S3464C3::S3464C5 */ AMB_check_base_class_offset(lv, (S3464C5*)(S3464C3*)(S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(3808,2296), "S3464C1");
    check_base_class_offset(lv, (S3464C3*)(S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(3808,2296), "S3464C1");
    check_base_class_offset(lv, (S3464C2*)(S3464C11*)(S3464C17*), ABISELECT(3808,2296), "S3464C1");
    check_base_class_offset(lv, (S3464C11*)(S3464C17*), ABISELECT(3808,2296), "S3464C1");
    check_base_class_offset(lv, (S3464C17*)(S3464C6*), ABISELECT(3808,2296), "S3464C1");
    check_base_class_offset(lv, (S3464C6*), ABISELECT(432,256), "S3464C1");
    set_bf_and_test(lv, s3464c1f0, ABISELECT(1420,864), 0, 32, 1, "S3464C1");
    set_bf_and_test(lv, s3464c1f0, ABISELECT(1420,864), 0, 32, hide_sll(1LL<<31), "S3464C1");
    check_field_offset(lv, s3464c1f1, ABISELECT(1424,868), "S3464C1.s3464c1f1");
    check_field_offset(lv, s3464c1f2, ABISELECT(1428,872), "S3464C1.s3464c1f2");
    test_class_info(&lv, &cd_S3464C1);
    dp->~S3464C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3464C1(Test_S3464C1, "S3464C1", ABISELECT(4528,2728));

#else // __cplusplus

extern void _ZN7S3464C1C1Ev();
extern void _ZN7S3464C1D2Ev();
Name_Map name_map_S3464C1[] = {
  NSPAIR(_ZN7S3464C1C1Ev),
  NSPAIR(_ZN7S3464C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C8;
extern VTBL_ENTRY _ZTI7S3464C8[];
extern  VTBL_ENTRY _ZTV7S3464C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C8[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C10;
extern VTBL_ENTRY _ZTI8S3464C10[];
extern  VTBL_ENTRY _ZTV8S3464C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C10[];
extern Class_Descriptor cd_S3464C9;
extern VTBL_ENTRY _ZTI7S3464C9[];
extern  VTBL_ENTRY _ZTV7S3464C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C9[];
extern Class_Descriptor cd_S3464C7;
extern VTBL_ENTRY _ZTI7S3464C7[];
extern  VTBL_ENTRY _ZTV7S3464C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C7[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C13;
extern VTBL_ENTRY _ZTI8S3464C13[];
extern  VTBL_ENTRY _ZTV8S3464C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C13[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C4;
extern VTBL_ENTRY _ZTI7S3464C4[];
extern  VTBL_ENTRY _ZTV7S3464C4[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C13;
extern VTBL_ENTRY _ZTI8S3464C13[];
extern  VTBL_ENTRY _ZTV8S3464C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C13[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C15;
extern VTBL_ENTRY _ZTI8S3464C15[];
extern  VTBL_ENTRY _ZTV8S3464C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C15[];
extern Class_Descriptor cd_S3464C14;
extern VTBL_ENTRY _ZTI8S3464C14[];
extern  VTBL_ENTRY _ZTV8S3464C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C14[];
extern Class_Descriptor cd_S3464C5;
extern VTBL_ENTRY _ZTI7S3464C5[];
extern  VTBL_ENTRY _ZTV7S3464C5[];
extern Class_Descriptor cd_S3464C3;
extern VTBL_ENTRY _ZTI7S3464C3[];
extern  VTBL_ENTRY _ZTV7S3464C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C3[];
extern Class_Descriptor cd_S3464C2;
extern VTBL_ENTRY _ZTI7S3464C2[];
extern  VTBL_ENTRY _ZTV7S3464C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C2[];
extern Class_Descriptor cd_S3464C11;
extern VTBL_ENTRY _ZTI8S3464C11[];
extern  VTBL_ENTRY _ZTV8S3464C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C11[];
extern Class_Descriptor cd_S3464C17;
extern VTBL_ENTRY _ZTI8S3464C17[];
extern  VTBL_ENTRY _ZTV8S3464C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3464C17[];
extern Class_Descriptor cd_S3464C6;
extern VTBL_ENTRY _ZTI7S3464C6[];
extern  VTBL_ENTRY _ZTV7S3464C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C6[];
static Base_Class bases_S3464C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3464C5,    ABISELECT(1440,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(1440,876), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3464C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3464C2,    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
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(1568,952), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3464C5,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(224,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3464C5,    ABISELECT(1632,988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(1632,988), //bcp->offset
    72, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3464C8,    ABISELECT(1840,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(1856,1116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(1856,1116), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(2064,1236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(2064,1236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    15, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(2064,1236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3464C11,    ABISELECT(2064,1236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(2288,1380), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3464C4,    ABISELECT(2288,1380), //bcp->offset
    116, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3464C8,    ABISELECT(3008,1820), //bcp->offset
    129, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(2416,1456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(2416,1456), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3464C10,    ABISELECT(2064,1236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3464C9,    ABISELECT(2064,1236), //bcp->offset
    103, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3464C7,    ABISELECT(1840,1108), //bcp->offset
    82, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    47, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(3024,1828), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(3024,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(3024,1828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3464C11,    ABISELECT(3024,1828), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    98, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(432,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(432,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3464C13,    ABISELECT(432,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(992,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3464C4,    ABISELECT(992,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(3248,1972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(3248,1972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    107, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3464C13,    ABISELECT(3248,1972), //bcp->offset
    149, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S3464C5,    ABISELECT(1120,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(1120,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(1120,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3464C15,    ABISELECT(1120,656), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3464C14,    ABISELECT(992,580), //bcp->offset
    38, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S3464C5,    ABISELECT(3808,2296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3464C3,    ABISELECT(3808,2296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S3464C2,    ABISELECT(3808,2296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S3464C11,    ABISELECT(3808,2296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S3464C17,    ABISELECT(3808,2296), //bcp->offset
    166, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    47, //immediately_derived
  0, 1},
  {&cd_S3464C6,    ABISELECT(432,256), //bcp->offset
    21, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3464C1[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C1D1Ev();
extern void _ZN7S3464C1D0Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn224_N7S3464C1D1Ev,_ZThn136_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C1D0Ev,_ZThn136_N7S3464C1D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn432_N7S3464C1D1Ev,_ZThn256_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn432_N7S3464C1D0Ev,_ZThn256_N7S3464C1D0Ev)();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
extern void _ZN7S3464C62v9Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn992_N7S3464C1D1Ev,_ZThn580_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn992_N7S3464C1D0Ev,_ZThn580_N7S3464C1D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn1120_N7S3464C1D1Ev,_ZThn656_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn1120_N7S3464C1D0Ev,_ZThn656_N7S3464C1D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C1D1Ev,_ZTv0_n20_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn1440_N7S3464C1D1Ev,_ZThn876_N7S3464C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C1D0Ev,_ZTv0_n20_N7S3464C1D0Ev)();
extern void ABISELECT(_ZThn1440_N7S3464C1D0Ev,_ZThn876_N7S3464C1D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C1D1Ev,_ZTv0_n24_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn1632_N7S3464C1D1Ev,_ZThn988_N7S3464C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3464C1D0Ev,_ZTv0_n24_N7S3464C1D0Ev)();
extern void ABISELECT(_ZThn1632_N7S3464C1D0Ev,_ZThn988_N7S3464C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3464C1D1Ev,_ZTv0_n28_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn1840_N7S3464C1D1Ev,_ZThn1108_N7S3464C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3464C1D0Ev,_ZTv0_n28_N7S3464C1D0Ev)();
extern void ABISELECT(_ZThn1840_N7S3464C1D0Ev,_ZThn1108_N7S3464C1D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn16_n56_N7S3464C1D1Ev,_ZTvn8_n28_N7S3464C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3464C1D0Ev,_ZTvn8_n28_N7S3464C1D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn224_n56_N7S3464C1D1Ev,_ZTvn128_n28_N7S3464C1D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N7S3464C1D0Ev,_ZTvn128_n28_N7S3464C1D0Ev)();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn448_n56_N7S3464C1D1Ev,_ZTvn272_n28_N7S3464C1D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N7S3464C1D0Ev,_ZTvn272_n28_N7S3464C1D0Ev)();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn576_n56_N7S3464C1D1Ev,_ZTvn348_n28_N7S3464C1D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N7S3464C1D0Ev,_ZTvn348_n28_N7S3464C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3464C1D1Ev,_ZTv0_n16_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn3008_N7S3464C1D1Ev,_ZThn1820_N7S3464C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C1D0Ev,_ZTv0_n16_N7S3464C1D0Ev)();
extern void ABISELECT(_ZThn3008_N7S3464C1D0Ev,_ZThn1820_N7S3464C1D0Ev)() __attribute__((weak));
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S3464C1D1Ev,_ZTv0_n32_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn3024_N7S3464C1D1Ev,_ZThn1828_N7S3464C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3464C1D0Ev,_ZTv0_n32_N7S3464C1D0Ev)();
extern void ABISELECT(_ZThn3024_N7S3464C1D0Ev,_ZThn1828_N7S3464C1D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S3464C1D1Ev,_ZTv0_n36_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn3248_N7S3464C1D1Ev,_ZThn1972_N7S3464C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3464C1D0Ev,_ZTv0_n36_N7S3464C1D0Ev)();
extern void ABISELECT(_ZThn3248_N7S3464C1D0Ev,_ZThn1972_N7S3464C1D0Ev)() __attribute__((weak));
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S3464C1D1Ev,_ZTv0_n32_N7S3464C1D1Ev)();
extern void ABISELECT(_ZThn3808_N7S3464C1D1Ev,_ZThn2296_N7S3464C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3464C1D0Ev,_ZTv0_n32_N7S3464C1D0Ev)();
extern void ABISELECT(_ZThn3808_N7S3464C1D0Ev,_ZThn2296_N7S3464C1D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C172v8Ev();
static  VTBL_ENTRY vtc_S3464C1[] = {
  ABISELECT(3808,2296),
  ABISELECT(3248,1972),
  ABISELECT(3024,1828),
  ABISELECT(3008,1820),
  ABISELECT(1840,1108),
  ABISELECT(1632,988),
  ABISELECT(1568,952),
  ABISELECT(1440,876),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C1D0Ev,
  ABISELECT(1216,740),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C1D1Ev,_ZThn136_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C1D0Ev,_ZThn136_N7S3464C1D0Ev),
  ABISELECT(3376,2040),
  ABISELECT(2816,1716),
  ABISELECT(2576,1564),
  ABISELECT(1408,852),
  ABISELECT(1136,696),
  ABISELECT(1200,732),
  ABISELECT(2592,1572),
  ABISELECT(1008,620),
  ABISELECT(-432,-256),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3464C1D1Ev,_ZThn256_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3464C1D0Ev,_ZThn256_N7S3464C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
  (VTBL_ENTRY)&_ZN7S3464C62v9Ev,
  ABISELECT(576,372),
  ABISELECT(640,408),
  ABISELECT(448,296),
  ABISELECT(2032,1248),
  ABISELECT(2256,1392),
  ABISELECT(-992,-580),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N7S3464C1D1Ev,_ZThn580_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N7S3464C1D0Ev,_ZThn580_N7S3464C1D0Ev),
  ABISELECT(512,332),
  ABISELECT(320,220),
  ABISELECT(-1120,-656),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1120_N7S3464C1D1Ev,_ZThn656_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1120_N7S3464C1D0Ev,_ZThn656_N7S3464C1D0Ev),
  ABISELECT(-1440,-876),
  0,
  0,
  ABISELECT(-1440,-876),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C1D1Ev,_ZTv0_n20_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C1D0Ev,_ZTv0_n20_N7S3464C1D0Ev),
  0,
  0,
  ABISELECT(-1568,-952),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  ABISELECT(-1632,-988),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1632,-988),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C1D1Ev,_ZTv0_n24_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C1D0Ev,_ZTv0_n24_N7S3464C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-1840,-1108),
  ABISELECT(1168,712),
  ABISELECT(-208,-120),
  ABISELECT(-272,-156),
  ABISELECT(-400,-232),
  ABISELECT(-1840,-1108),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3464C1D1Ev,_ZTv0_n28_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3464C1D0Ev,_ZTv0_n28_N7S3464C1D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-1856,-1116),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3464C1D1Ev,_ZTvn8_n28_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3464C1D0Ev,_ZTvn8_n28_N7S3464C1D0Ev),
  ABISELECT(944,584),
  ABISELECT(-496,-284),
  ABISELECT(-432,-248),
  ABISELECT(-624,-360),
  ABISELECT(-2064,-1236),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N7S3464C1D1Ev,_ZTvn128_n28_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N7S3464C1D0Ev,_ZTvn128_n28_N7S3464C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
  ABISELECT(-2288,-1380),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N7S3464C1D1Ev,_ZTvn272_n28_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N7S3464C1D0Ev,_ZTvn272_n28_N7S3464C1D0Ev),
  ABISELECT(-976,-580),
  ABISELECT(-2416,-1456),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N7S3464C1D1Ev,_ZTvn348_n28_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N7S3464C1D0Ev,_ZTvn348_n28_N7S3464C1D0Ev),
  ABISELECT(-3008,-1820),
  ABISELECT(-1568,-944),
  ABISELECT(-3008,-1820),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C1D1Ev,_ZTv0_n16_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C1D0Ev,_ZTv0_n16_N7S3464C1D0Ev),
  0,
  ABISELECT(-3024,-1828),
  0,
  0,
  ABISELECT(-1456,-876),
  ABISELECT(-1392,-840),
  ABISELECT(-1584,-952),
  ABISELECT(-3024,-1828),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C1D1Ev,_ZTv0_n32_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C1D0Ev,_ZTv0_n32_N7S3464C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  0,
  0,
  ABISELECT(-3248,-1972),
  0,
  0,
  ABISELECT(-1680,-1020),
  ABISELECT(-1616,-984),
  ABISELECT(-224,-144),
  ABISELECT(-1808,-1096),
  ABISELECT(-3248,-1972),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3464C1D1Ev,_ZTv0_n36_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3464C1D0Ev,_ZTv0_n36_N7S3464C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
  0,
  0,
  ABISELECT(-3808,-2296),
  0,
  0,
  ABISELECT(-2240,-1344),
  ABISELECT(-2176,-1308),
  ABISELECT(-2368,-1420),
  ABISELECT(-3808,-2296),
  (VTBL_ENTRY)&(_ZTI7S3464C1[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C1D1Ev,_ZTv0_n32_N7S3464C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C1D0Ev,_ZTv0_n32_N7S3464C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C172v8Ev,
};
extern VTBL_ENTRY _ZTV7S3464C1[];
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C2__7S3464C1[] = {
  ABISELECT(1440,876),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C2__7S3464C1[] = {
  ABISELECT(1440,876),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn1440_N7S3464C3D1Ev,_ZThn876_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn1440_N7S3464C3D0Ev,_ZThn876_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C2__7S3464C1[] = {
  ABISELECT(-1440,-876),
  0,
  0,
  ABISELECT(-1440,-876),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn1440_N7S3464C2D1Ev,_ZThn876_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn1440_N7S3464C2D0Ev,_ZThn876_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C2__7S3464C1[] = {
  ABISELECT(-1440,-876),
  0,
  0,
  ABISELECT(-1440,-876),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__7S3464C1[] = {
  ABISELECT(1216,740),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn1216_N7S3464C3D1Ev,_ZThn740_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn1216_N7S3464C3D0Ev,_ZThn740_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__A__7S3464C1[] = {
  ABISELECT(-1216,-740),
  0,
  0,
  ABISELECT(-1216,-740),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C6D1Ev();
extern void _ZN7S3464C6D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
extern void _ZN7S3464C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C6__7S3464C1[] = {
  ABISELECT(3376,2040),
  ABISELECT(2816,1716),
  ABISELECT(2576,1564),
  ABISELECT(1408,852),
  ABISELECT(1136,696),
  ABISELECT(1200,732),
  ABISELECT(2592,1572),
  ABISELECT(1008,620),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C6D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
  (VTBL_ENTRY)&_ZN7S3464C62v9Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C13D1Ev();
extern void _ZN8S3464C13D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C137S3464C6__7S3464C1[] = {
  ABISELECT(1136,696),
  ABISELECT(1200,732),
  ABISELECT(2592,1572),
  ABISELECT(1008,620),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C137S3464C6__A7__7S3464C1[] = {
  ABISELECT(1008,620),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn1008_N7S3464C3D1Ev,_ZThn620_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn1008_N7S3464C3D0Ev,_ZThn620_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C137S3464C6__A7__7S3464C1[] = {
  ABISELECT(-1008,-620),
  0,
  0,
  ABISELECT(-1008,-620),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn2592_N8S3464C13D1Ev,_ZThn1572_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn2592_N8S3464C13D0Ev,_ZThn1572_N8S3464C13D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C137S3464C6__7S3464C1[] = {
  0,
  ABISELECT(-2592,-1572),
  0,
  0,
  ABISELECT(-1456,-876),
  ABISELECT(-1392,-840),
  ABISELECT(-1584,-952),
  ABISELECT(-2592,-1572),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn1008_N8S3464C13D1Ev,_ZThn620_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn1008_N8S3464C13D0Ev,_ZThn620_N8S3464C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C137S3464C6__7S3464C1[] = {
  ABISELECT(-1008,-620),
  0,
  0,
  ABISELECT(-1008,-620),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C13D1Ev,_ZThn732_N8S3464C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev)();
extern void ABISELECT(_ZThn1200_N8S3464C13D0Ev,_ZThn732_N8S3464C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C137S3464C6__7S3464C1[] = {
  ABISELECT(-1200,-732),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1200,-732),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C137S3464C6__7S3464C1[] = {
  0,
  0,
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C14D1Ev();
extern void _ZN8S3464C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C147S3464C6__7S3464C1[] = {
  ABISELECT(576,372),
  ABISELECT(640,408),
  ABISELECT(448,296),
  ABISELECT(2032,1248),
  ABISELECT(2256,1392),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C14D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C15D1Ev();
extern void _ZN8S3464C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C158S3464C147S3464C6__7S3464C1[] = {
  ABISELECT(512,332),
  ABISELECT(320,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C15D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C158S3464C147S3464C6__A3__7S3464C1[] = {
  ABISELECT(320,220),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C158S3464C147S3464C6__A9__7S3464C1[] = {
  ABISELECT(320,220),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZThn320_N7S3464C3D1Ev,_ZThn220_N7S3464C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
extern void ABISELECT(_ZThn320_N7S3464C3D0Ev,_ZThn220_N7S3464C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C158S3464C147S3464C6__A9__7S3464C1[] = {
  ABISELECT(-320,-220),
  0,
  0,
  ABISELECT(-320,-220),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZThn320_N7S3464C2D1Ev,_ZThn220_N7S3464C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
extern void ABISELECT(_ZThn320_N7S3464C2D0Ev,_ZThn220_N7S3464C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C158S3464C147S3464C6__A3__7S3464C1[] = {
  ABISELECT(-320,-220),
  0,
  0,
  ABISELECT(-320,-220),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn320_N8S3464C15D1Ev,_ZThn220_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn320_N8S3464C15D0Ev,_ZThn220_N8S3464C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C158S3464C147S3464C6__7S3464C1[] = {
  ABISELECT(-320,-220),
  0,
  0,
  ABISELECT(-320,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev)();
extern void ABISELECT(_ZThn512_N8S3464C15D1Ev,_ZThn332_N8S3464C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev)();
extern void ABISELECT(_ZThn512_N8S3464C15D0Ev,_ZThn332_N8S3464C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__A1__8S3464C158S3464C147S3464C6__7S3464C1[] = {
  ABISELECT(-512,-332),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-512,-332),
  (VTBL_ENTRY)&(_ZTI8S3464C15[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn2256_N8S3464C14D1Ev,_ZThn1392_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn2256_N8S3464C14D0Ev,_ZThn1392_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C13__8S3464C147S3464C6__7S3464C1[] = {
  0,
  0,
  ABISELECT(-2256,-1392),
  0,
  0,
  ABISELECT(-1680,-1020),
  ABISELECT(-1616,-984),
  ABISELECT(-224,-144),
  ABISELECT(-1808,-1096),
  ABISELECT(-2256,-1392),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn2032_N8S3464C14D1Ev,_ZThn1248_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn2032_N8S3464C14D0Ev,_ZThn1248_N8S3464C14D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C147S3464C6__7S3464C1[] = {
  0,
  ABISELECT(-2032,-1248),
  0,
  0,
  ABISELECT(-1456,-876),
  ABISELECT(-1392,-840),
  ABISELECT(-1584,-952),
  ABISELECT(-2032,-1248),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn448_N8S3464C14D1Ev,_ZThn296_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn448_N8S3464C14D0Ev,_ZThn296_N8S3464C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__A1__8S3464C147S3464C6__7S3464C1[] = {
  ABISELECT(-448,-296),
  0,
  0,
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn640_N8S3464C14D1Ev,_ZThn408_N8S3464C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev)();
extern void ABISELECT(_ZThn640_N8S3464C14D0Ev,_ZThn408_N8S3464C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C147S3464C6__7S3464C1[] = {
  ABISELECT(-640,-408),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-640,-408),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A4__8S3464C147S3464C6__7S3464C1[] = {
  0,
  0,
  ABISELECT(-576,-372),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn128_N8S3464C14D1Ev,_ZThn76_N8S3464C14D1Ev)();
extern void ABISELECT(_ZThn128_N8S3464C14D0Ev,_ZThn76_N8S3464C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3464C15__8S3464C147S3464C6__7S3464C1[] = {
  ABISELECT(512,332),
  ABISELECT(320,220),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S3464C14[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S3464C14D1Ev,_ZThn76_N8S3464C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N8S3464C14D0Ev,_ZThn76_N8S3464C14D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C6D1Ev,_ZTv0_n24_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn1200_N7S3464C6D1Ev,_ZThn732_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3464C6D0Ev,_ZTv0_n24_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn1200_N7S3464C6D0Ev,_ZThn732_N7S3464C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C3__7S3464C6__7S3464C1[] = {
  ABISELECT(-1200,-732),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(-1200,-732),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C6D1Ev,_ZTv0_n24_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C6D0Ev,_ZTv0_n24_N7S3464C6D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C6D1Ev,_ZTv0_n20_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn1008_N7S3464C6D1Ev,_ZThn620_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3464C6D0Ev,_ZTv0_n20_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn1008_N7S3464C6D0Ev,_ZThn620_N7S3464C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C6__7S3464C1[] = {
  ABISELECT(-1008,-620),
  0,
  0,
  ABISELECT(-1008,-620),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C6D1Ev,_ZTv0_n20_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C6D0Ev,_ZTv0_n20_N7S3464C6D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N7S3464C6D1Ev,_ZTv0_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn1408_N7S3464C6D1Ev,_ZThn852_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3464C6D0Ev,_ZTv0_n28_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn1408_N7S3464C6D0Ev,_ZThn852_N7S3464C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C7__7S3464C6__7S3464C1[] = {
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(224,128),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-1408,-852),
  ABISELECT(1168,712),
  ABISELECT(-208,-120),
  ABISELECT(-272,-156),
  ABISELECT(-400,-232),
  ABISELECT(-1408,-852),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3464C6D1Ev,_ZTv0_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3464C6D0Ev,_ZTv0_n28_N7S3464C6D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn16_n56_N7S3464C6D1Ev,_ZTvn8_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3464C6D0Ev,_ZTvn8_n28_N7S3464C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C7__A1__7S3464C6__7S3464C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-1424,-860),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3464C6D1Ev,_ZTvn8_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3464C6D0Ev,_ZTvn8_n28_N7S3464C6D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn224_n56_N7S3464C6D1Ev,_ZTvn128_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn224_n56_N7S3464C6D0Ev,_ZTvn128_n28_N7S3464C6D0Ev)();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C97S3464C7__7S3464C6__7S3464C1[] = {
  ABISELECT(944,584),
  ABISELECT(-496,-284),
  ABISELECT(-432,-248),
  ABISELECT(-624,-360),
  ABISELECT(-1632,-980),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N7S3464C6D1Ev,_ZTvn128_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n56_N7S3464C6D0Ev,_ZTvn128_n28_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__7S3464C6__7S3464C1[] = {
  0,
  0,
  ABISELECT(-1136,-696),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn448_n56_N7S3464C6D1Ev,_ZTvn272_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N7S3464C6D0Ev,_ZTvn272_n28_N7S3464C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C48S3464C107S3464C97S3464C7__A1__7S3464C6__7S3464C1[] = {
  ABISELECT(-1856,-1124),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N7S3464C6D1Ev,_ZTvn272_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N7S3464C6D0Ev,_ZTvn272_n28_N7S3464C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3464C6D1Ev,_ZTv0_n16_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn2576_N7S3464C6D1Ev,_ZThn1564_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C6D0Ev,_ZTv0_n16_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn2576_N7S3464C6D0Ev,_ZThn1564_N7S3464C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__A1__7S3464C6__7S3464C1[] = {
  ABISELECT(-2576,-1564),
  ABISELECT(-1568,-944),
  ABISELECT(-2576,-1564),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C6D1Ev,_ZTv0_n16_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C6D0Ev,_ZTv0_n16_N7S3464C6D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTvn576_n56_N7S3464C6D1Ev,_ZTvn348_n28_N7S3464C6D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N7S3464C6D0Ev,_ZTvn348_n28_N7S3464C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C107S3464C97S3464C7__A3__7S3464C6__7S3464C1[] = {
  ABISELECT(-976,-580),
  ABISELECT(-1984,-1200),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N7S3464C6D1Ev,_ZTvn348_n28_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N7S3464C6D0Ev,_ZTvn348_n28_N7S3464C6D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn2592_N7S3464C6D1Ev,_ZThn1572_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn2592_N7S3464C6D0Ev,_ZThn1572_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__A1__7S3464C6__7S3464C1[] = {
  0,
  ABISELECT(-2592,-1572),
  0,
  0,
  ABISELECT(-1456,-876),
  ABISELECT(-1392,-840),
  ABISELECT(-1584,-952),
  ABISELECT(-2592,-1572),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn560_N7S3464C6D1Ev,_ZThn324_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn560_N7S3464C6D0Ev,_ZThn324_N7S3464C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3464C14__7S3464C6__7S3464C1[] = {
  ABISELECT(576,372),
  ABISELECT(640,408),
  ABISELECT(448,296),
  ABISELECT(2032,1248),
  ABISELECT(2256,1392),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N7S3464C6D1Ev,_ZThn324_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn560_N7S3464C6D0Ev,_ZThn324_N7S3464C6D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S3464C6D1Ev,_ZTv0_n36_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn2816_N7S3464C6D1Ev,_ZThn1716_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3464C6D0Ev,_ZTv0_n36_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn2816_N7S3464C6D0Ev,_ZThn1716_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C13__A1__7S3464C6__7S3464C1[] = {
  0,
  0,
  ABISELECT(-2816,-1716),
  0,
  0,
  ABISELECT(-1680,-1020),
  ABISELECT(-1616,-984),
  ABISELECT(-224,-144),
  ABISELECT(-1808,-1096),
  ABISELECT(-2816,-1716),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3464C6D1Ev,_ZTv0_n36_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3464C6D0Ev,_ZTv0_n36_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn688_N7S3464C6D1Ev,_ZThn400_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn688_N7S3464C6D0Ev,_ZThn400_N7S3464C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3464C158S3464C14__7S3464C6__7S3464C1[] = {
  ABISELECT(512,332),
  ABISELECT(320,220),
  ABISELECT(-688,-400),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N7S3464C6D1Ev,_ZThn400_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn688_N7S3464C6D0Ev,_ZThn400_N7S3464C6D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev)();
extern void ABISELECT(_ZThn3376_N7S3464C6D1Ev,_ZThn2040_N7S3464C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev)();
extern void ABISELECT(_ZThn3376_N7S3464C6D0Ev,_ZThn2040_N7S3464C6D0Ev)() __attribute__((weak));
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C172v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C17__7S3464C6__7S3464C1[] = {
  0,
  0,
  ABISELECT(-3376,-2040),
  0,
  0,
  ABISELECT(-2240,-1344),
  ABISELECT(-2176,-1308),
  ABISELECT(-2368,-1420),
  ABISELECT(-3376,-2040),
  (VTBL_ENTRY)&(_ZTI7S3464C6[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C172v8Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A2__7S3464C1[] = {
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C3__A2__7S3464C1[] = {
  ABISELECT(192,112),
  0,
  0,
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C7D1Ev();
extern void _ZN7S3464C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C7__7S3464C1[] = {
  ABISELECT(1168,712),
  ABISELECT(-208,-120),
  ABISELECT(-272,-156),
  ABISELECT(-400,-232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C7D0Ev,
};
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C87S3464C7__7S3464C1[] = {
  ABISELECT(-400,-232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C87S3464C7__7S3464C1[] = {
  ABISELECT(400,232),
  0,
  0,
  ABISELECT(400,232),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C7__A3__7S3464C1[] = {
  ABISELECT(-416,-240),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C7__A3__7S3464C1[] = {
  ABISELECT(416,240),
  0,
  0,
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C9D1Ev();
extern void _ZN7S3464C9D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(944,584),
  ABISELECT(-496,-284),
  ABISELECT(-432,-248),
  ABISELECT(-624,-360),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C9D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C10D1Ev();
extern void _ZN8S3464C10D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(944,584),
  ABISELECT(-496,-284),
  ABISELECT(-432,-248),
  ABISELECT(-624,-360),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C118S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(-496,-284),
  ABISELECT(-432,-248),
  ABISELECT(-624,-360),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C118S3464C107S3464C97S3464C7__A1__7S3464C1[] = {
  ABISELECT(-624,-360),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A4__7S3464C1[] = {
  ABISELECT(-624,-360),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A4__7S3464C1[] = {
  ABISELECT(624,360),
  0,
  0,
  ABISELECT(624,360),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C118S3464C107S3464C97S3464C7__A1__7S3464C1[] = {
  ABISELECT(624,360),
  0,
  0,
  ABISELECT(624,360),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C118S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(624,360),
  0,
  0,
  ABISELECT(624,360),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C118S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(432,248),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(432,248),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C118S3464C107S3464C97S3464C7__7S3464C1[] = {
  0,
  0,
  ABISELECT(496,284),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C107S3464C97S3464C7__A5__7S3464C1[] = {
  ABISELECT(-976,-580),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C107S3464C97S3464C7__A5__7S3464C1[] = {
  ABISELECT(976,580),
  0,
  0,
  ABISELECT(976,580),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__8S3464C107S3464C97S3464C7__7S3464C1[] = {
  0,
  0,
  ABISELECT(496,284),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(624,360),
  0,
  0,
  ABISELECT(624,360),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D1Ev,_ZTv0_n20_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C10D0Ev,_ZTv0_n20_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(432,248),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(432,248),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D1Ev,_ZTv0_n24_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C10D0Ev,_ZTv0_n24_N8S3464C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn944_N8S3464C10D1Ev,_ZThn584_N8S3464C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev)();
extern void ABISELECT(_ZThn944_N8S3464C10D0Ev,_ZThn584_N8S3464C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__8S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(-944,-584),
  ABISELECT(-1568,-944),
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev)();
extern void ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__8S3464C107S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(-976,-580),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3464C10[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D1Ev,_ZThn220_N8S3464C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3464C10D0Ev,_ZThn220_N8S3464C10D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__7S3464C97S3464C7__7S3464C1[] = {
  0,
  0,
  ABISELECT(496,284),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(624,360),
  0,
  0,
  ABISELECT(624,360),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D1Ev,_ZTv0_n20_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C9D0Ev,_ZTv0_n20_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__7S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(432,248),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(432,248),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D1Ev,_ZTv0_n24_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C9D0Ev,_ZTv0_n24_N7S3464C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn944_N7S3464C9D1Ev,_ZThn584_N7S3464C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev)();
extern void ABISELECT(_ZThn944_N7S3464C9D0Ev,_ZThn584_N7S3464C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__7S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(-944,-584),
  ABISELECT(-1568,-944),
  ABISELECT(-944,-584),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev)();
extern void ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C10__A2__7S3464C97S3464C7__7S3464C1[] = {
  ABISELECT(-976,-580),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI7S3464C9[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D1Ev,_ZThn220_N7S3464C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S3464C9D0Ev,_ZThn220_N7S3464C9D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C7D1Ev,_ZTv0_n20_N7S3464C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C7D0Ev,_ZTv0_n20_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C7__7S3464C1[] = {
  ABISELECT(400,232),
  0,
  0,
  ABISELECT(400,232),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C7D1Ev,_ZTv0_n20_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C7D0Ev,_ZTv0_n20_N7S3464C7D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn16_N7S3464C7D1Ev,_ZThn8_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3464C7D0Ev,_ZThn8_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A__7S3464C7__7S3464C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3464C7D1Ev,_ZThn8_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3464C7D0Ev,_ZThn8_N7S3464C7D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn224_N7S3464C7D1Ev,_ZThn128_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn224_N7S3464C7D0Ev,_ZThn128_N7S3464C7D0Ev)();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C102v4Ev();
extern void _ZN7S3464C92v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C9__7S3464C7__7S3464C1[] = {
  ABISELECT(944,584),
  ABISELECT(-496,-284),
  ABISELECT(-432,-248),
  ABISELECT(-624,-360),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C7D1Ev,_ZThn128_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S3464C7D0Ev,_ZThn128_N7S3464C7D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C102v4Ev,
  (VTBL_ENTRY)&_ZN7S3464C92v5Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A2__7S3464C7__7S3464C1[] = {
  0,
  0,
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S3464C7D1Ev,_ZTv0_n24_N7S3464C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3464C7D0Ev,_ZTv0_n24_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__A1__7S3464C7__7S3464C1[] = {
  ABISELECT(208,120),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(208,120),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C7D1Ev,_ZTv0_n24_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3464C7D0Ev,_ZTv0_n24_N7S3464C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn1168_N7S3464C7D1Ev,_ZThn712_N7S3464C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev)();
extern void ABISELECT(_ZThn1168_N7S3464C7D0Ev,_ZThn712_N7S3464C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3464C8__A1__7S3464C7__7S3464C1[] = {
  ABISELECT(-1168,-712),
  ABISELECT(-1568,-944),
  ABISELECT(-1168,-712),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZThn576_N7S3464C7D1Ev,_ZThn348_N7S3464C7D1Ev)();
extern void ABISELECT(_ZThn576_N7S3464C7D0Ev,_ZThn348_N7S3464C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C107S3464C9__A3__7S3464C7__7S3464C1[] = {
  ABISELECT(-976,-580),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI7S3464C7[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S3464C7D1Ev,_ZThn348_N7S3464C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S3464C7D0Ev,_ZThn348_N7S3464C7D0Ev),
};
extern void _ZN7S3464C8D1Ev();
extern void _ZN7S3464C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C8__A1__7S3464C1[] = {
  ABISELECT(-1568,-944),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C8D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C8__A1__7S3464C1[] = {
  ABISELECT(1568,944),
  0,
  0,
  ABISELECT(1568,944),
  (VTBL_ENTRY)&(_ZTI7S3464C8[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D1Ev,_ZTv0_n20_N7S3464C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C8D0Ev,_ZTv0_n20_N7S3464C8D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__A1__7S3464C1[] = {
  ABISELECT(-1456,-876),
  ABISELECT(-1392,-840),
  ABISELECT(-1584,-952),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C11__A2__7S3464C1[] = {
  ABISELECT(-1584,-952),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C11__A6__7S3464C1[] = {
  ABISELECT(-1584,-952),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A6__7S3464C1[] = {
  ABISELECT(1584,952),
  0,
  0,
  ABISELECT(1584,952),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C11__A2__7S3464C1[] = {
  ABISELECT(1584,952),
  0,
  0,
  ABISELECT(1584,952),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C11__A1__7S3464C1[] = {
  ABISELECT(1584,952),
  0,
  0,
  ABISELECT(1584,952),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C11__A1__7S3464C1[] = {
  ABISELECT(1392,840),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(1392,840),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C11__A1__7S3464C1[] = {
  0,
  0,
  ABISELECT(1456,876),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C13D1Ev();
extern void _ZN8S3464C13D0Ev();
extern void _ZN8S3464C132v6Ev();
extern void _ZN8S3464C132v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C13__A1__7S3464C1[] = {
  ABISELECT(-1680,-1020),
  ABISELECT(-1616,-984),
  ABISELECT(-224,-144),
  ABISELECT(-1808,-1096),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C13D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v6Ev,
  (VTBL_ENTRY)&_ZN8S3464C132v7Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C38S3464C13__A8__7S3464C1[] = {
  ABISELECT(-1808,-1096),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C38S3464C13__A8__7S3464C1[] = {
  ABISELECT(1808,1096),
  0,
  0,
  ABISELECT(1808,1096),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev)();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C11__8S3464C13__A1__7S3464C1[] = {
  0,
  ABISELECT(224,144),
  0,
  0,
  ABISELECT(-1456,-876),
  ABISELECT(-1392,-840),
  ABISELECT(-1584,-952),
  ABISELECT(224,144),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev),
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C13__A1__7S3464C1[] = {
  ABISELECT(1808,1096),
  0,
  0,
  ABISELECT(1808,1096),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C13__A1__7S3464C1[] = {
  ABISELECT(1616,984),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(1616,984),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C13__A1__7S3464C1[] = {
  0,
  0,
  ABISELECT(1680,1020),
  (VTBL_ENTRY)&(_ZTI8S3464C13[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C17D1Ev();
extern void _ZN8S3464C17D0Ev();
extern void _ZN8S3464C112v3Ev();
extern void _ZN8S3464C172v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C17__7S3464C1[] = {
  ABISELECT(-2240,-1344),
  ABISELECT(-2176,-1308),
  ABISELECT(-2368,-1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C17D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
  (VTBL_ENTRY)&_ZN8S3464C172v8Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN8S3464C11D1Ev();
extern void _ZN8S3464C11D0Ev();
extern void _ZN8S3464C112v3Ev();
static  VTBL_ENTRY _tg__ZTV8S3464C118S3464C17__A2__7S3464C1[] = {
  ABISELECT(-2240,-1344),
  ABISELECT(-2176,-1308),
  ABISELECT(-2368,-1420),
  0,
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3464C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3464C112v3Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C2D1Ev();
extern void _ZN7S3464C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C28S3464C118S3464C17__A4__7S3464C1[] = {
  ABISELECT(-2368,-1420),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C2D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void _ZN7S3464C3D1Ev();
extern void _ZN7S3464C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C37S3464C28S3464C118S3464C17__A10__7S3464C1[] = {
  ABISELECT(-2368,-1420),
  0,
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3464C3D0Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C17__A10__7S3464C1[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI7S3464C3[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__7S3464C28S3464C118S3464C17__A4__7S3464C1[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI7S3464C2[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C118S3464C17__A2__7S3464C1[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D1Ev,_ZTv0_n20_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C11D0Ev,_ZTv0_n20_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C118S3464C17__A2__7S3464C1[] = {
  ABISELECT(2176,1308),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(2176,1308),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D1Ev,_ZTv0_n24_N8S3464C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C11D0Ev,_ZTv0_n24_N8S3464C11D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C118S3464C17__A2__7S3464C1[] = {
  0,
  0,
  ABISELECT(2240,1344),
  (VTBL_ENTRY)&(_ZTI8S3464C11[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S3464C17D1Ev,_ZTv0_n20_N8S3464C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3464C17D0Ev,_ZTv0_n20_N8S3464C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C4__8S3464C17__7S3464C1[] = {
  ABISELECT(2368,1420),
  0,
  0,
  ABISELECT(2368,1420),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C17D1Ev,_ZTv0_n20_N8S3464C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3464C17D0Ev,_ZTv0_n20_N8S3464C17D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S3464C17D1Ev,_ZTv0_n24_N8S3464C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S3464C17D0Ev,_ZTv0_n24_N8S3464C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3464C3__8S3464C17__7S3464C1[] = {
  ABISELECT(2176,1308),
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(2176,1308),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C17D1Ev,_ZTv0_n24_N8S3464C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3464C17D0Ev,_ZTv0_n24_N8S3464C17D0Ev),
};
extern void _ZN7S3464C52v1Ev();
extern void _ZN7S3464C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3464C5__A3__8S3464C17__7S3464C1[] = {
  0,
  0,
  ABISELECT(2240,1344),
  (VTBL_ENTRY)&(_ZTI8S3464C17[0]),
  (VTBL_ENTRY)&_ZN7S3464C52v1Ev,
  (VTBL_ENTRY)&_ZN7S3464C52v2Ev,
};
static  VTT_ENTRY vtt_S3464C1[] = {
  {&(_ZTV7S3464C1[10]),  10,182},
  {&(_tg__ZTV7S3464C2__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C2__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C2__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C2__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__A__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__A__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C6__7S3464C1[10]),  10,17},
  {&(_tg__ZTV8S3464C137S3464C6__7S3464C1[6]),  6,12},
  {&(_tg__ZTV7S3464C38S3464C137S3464C6__A7__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C137S3464C6__A7__7S3464C1[5]),  5,9},
  {&(_tg__ZTV8S3464C11__8S3464C137S3464C6__7S3464C1[9]),  9,14},
  {&(_tg__ZTV7S3464C4__8S3464C137S3464C6__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C137S3464C6__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C137S3464C6__7S3464C1[4]),  4,6},
  {&(_tg__ZTV8S3464C147S3464C6__7S3464C1[7]),  7,11},
  {&(_tg__ZTV8S3464C158S3464C147S3464C6__7S3464C1[4]),  4,8},
  {&(_tg__ZTV7S3464C28S3464C158S3464C147S3464C6__A3__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C158S3464C147S3464C6__A9__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C158S3464C147S3464C6__A9__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C158S3464C147S3464C6__A3__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C158S3464C147S3464C6__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__A1__8S3464C158S3464C147S3464C6__7S3464C1[6]),  6,10},
  {&(_tg__ZTV8S3464C13__8S3464C147S3464C6__7S3464C1[11]),  11,17},
  {&(_tg__ZTV8S3464C11__8S3464C147S3464C6__7S3464C1[9]),  9,14},
  {&(_tg__ZTV7S3464C4__A1__8S3464C147S3464C6__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C147S3464C6__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A4__8S3464C147S3464C6__7S3464C1[4]),  4,6},
  {&(_tg__ZTV8S3464C15__8S3464C147S3464C6__7S3464C1[4]),  4,8},
  {&(_tg__ZTV7S3464C3__7S3464C6__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C4__7S3464C6__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C7__7S3464C6__7S3464C1[12]),  12,14},
  {&(_tg__ZTV7S3464C37S3464C7__A1__7S3464C6__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C97S3464C7__7S3464C6__7S3464C1[6]),  6,13},
  {&(_tg__ZTV7S3464C5__A3__7S3464C6__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C48S3464C107S3464C97S3464C7__A1__7S3464C6__7S3464C1[2]),  2,6},
  {&(_tg__ZTV7S3464C8__A1__7S3464C6__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C107S3464C97S3464C7__A3__7S3464C6__7S3464C1[3]),  3,7},
  {&(_tg__ZTV8S3464C11__A1__7S3464C6__7S3464C1[9]),  9,14},
  {&(_tg__ZTV8S3464C14__7S3464C6__7S3464C1[7]),  7,11},
  {&(_tg__ZTV8S3464C13__A1__7S3464C6__7S3464C1[11]),  11,17},
  {&(_tg__ZTV8S3464C158S3464C14__7S3464C6__7S3464C1[4]),  4,8},
  {&(_tg__ZTV8S3464C17__7S3464C6__7S3464C1[10]),  10,16},
  {&(_ZTV7S3464C1[62]),  62,182},
  {&(_ZTV7S3464C1[70]),  70,182},
  {&(_ZTV7S3464C1[17]),  17,182},
  {&(_ZTV7S3464C1[31]),  31,182},
  {&(_ZTV7S3464C1[78]),  78,182},
  {&(_ZTV7S3464C1[94]),  94,182},
  {&(_ZTV7S3464C1[99]),  99,182},
  {&(_ZTV7S3464C1[109]),  109,182},
  {&(_ZTV7S3464C1[118]),  118,182},
  {&(_ZTV7S3464C1[133]),  133,182},
  {&(_ZTV7S3464C1[125]),  125,182},
  {&(_ZTV7S3464C1[144]),  144,182},
  {&(_ZTV7S3464C1[45]),  45,182},
  {&(_ZTV7S3464C1[160]),  160,182},
  {&(_ZTV7S3464C1[53]),  53,182},
  {&(_ZTV7S3464C1[176]),  176,182},
  {&(_tg__ZTV7S3464C3__A2__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C3__A2__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C7__7S3464C1[6]),  6,8},
  {&(_tg__ZTV7S3464C87S3464C7__7S3464C1[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C87S3464C7__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C37S3464C7__A3__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C7__A3__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C97S3464C7__7S3464C1[6]),  6,13},
  {&(_tg__ZTV8S3464C107S3464C97S3464C7__7S3464C1[6]),  6,12},
  {&(_tg__ZTV8S3464C118S3464C107S3464C97S3464C7__7S3464C1[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C118S3464C107S3464C97S3464C7__A1__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A4__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C107S3464C97S3464C7__A4__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C118S3464C107S3464C97S3464C7__A1__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C118S3464C107S3464C97S3464C7__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C118S3464C107S3464C97S3464C7__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C118S3464C107S3464C97S3464C7__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C107S3464C97S3464C7__A5__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C107S3464C97S3464C7__A5__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C5__8S3464C107S3464C97S3464C7__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C4__8S3464C107S3464C97S3464C7__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C107S3464C97S3464C7__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C8__8S3464C107S3464C97S3464C7__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C3__A__8S3464C107S3464C97S3464C7__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C5__7S3464C97S3464C7__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C4__7S3464C97S3464C7__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__7S3464C97S3464C7__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C8__7S3464C97S3464C7__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C10__A2__7S3464C97S3464C7__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C7__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__A__7S3464C7__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C9__7S3464C7__7S3464C1[6]),  6,13},
  {&(_tg__ZTV7S3464C5__A2__7S3464C7__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C3__A1__7S3464C7__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C8__A1__7S3464C7__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C38S3464C107S3464C9__A3__7S3464C7__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C8__A1__7S3464C1[3]),  3,5},
  {&(_tg__ZTV7S3464C4__7S3464C8__A1__7S3464C1[5]),  5,9},
  {&(_tg__ZTV8S3464C11__A1__7S3464C1[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C11__A2__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C11__A6__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C11__A6__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C11__A2__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C11__A1__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C11__A1__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C11__A1__7S3464C1[4]),  4,6},
  {&(_tg__ZTV8S3464C13__A1__7S3464C1[6]),  6,12},
  {&(_tg__ZTV7S3464C38S3464C13__A8__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C38S3464C13__A8__7S3464C1[5]),  5,9},
  {&(_tg__ZTV8S3464C11__8S3464C13__A1__7S3464C1[9]),  9,14},
  {&(_tg__ZTV7S3464C4__8S3464C13__A1__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C13__A1__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C13__A1__7S3464C1[4]),  4,6},
  {&(_tg__ZTV8S3464C17__7S3464C1[5]),  5,11},
  {&(_tg__ZTV8S3464C118S3464C17__A2__7S3464C1[5]),  5,10},
  {&(_tg__ZTV7S3464C28S3464C118S3464C17__A4__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C37S3464C28S3464C118S3464C17__A10__7S3464C1[3]),  3,7},
  {&(_tg__ZTV7S3464C4__7S3464C37S3464C28S3464C118S3464C17__A10__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__7S3464C28S3464C118S3464C17__A4__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C4__8S3464C118S3464C17__A2__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C118S3464C17__A2__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C118S3464C17__A2__7S3464C1[4]),  4,6},
  {&(_tg__ZTV7S3464C4__8S3464C17__7S3464C1[5]),  5,9},
  {&(_tg__ZTV7S3464C3__8S3464C17__7S3464C1[6]),  6,10},
  {&(_tg__ZTV7S3464C5__A3__8S3464C17__7S3464C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3464C1[];
extern  VTBL_ENTRY _ZTV7S3464C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3464C1[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C7D0Ev,_ZTv0_n16_N7S3464C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S3464C7D0Ev,_ZThn712_N7S3464C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C7D1Ev,_ZTv0_n16_N7S3464C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N7S3464C7D1Ev,_ZThn712_N7S3464C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D0Ev,_ZTv0_n16_N7S3464C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C9D0Ev,_ZThn584_N7S3464C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C9D1Ev,_ZTv0_n16_N7S3464C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S3464C9D1Ev,_ZThn584_N7S3464C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D0Ev,_ZTv0_n16_N8S3464C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S3464C10D0Ev,_ZThn584_N8S3464C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3464C10D1Ev,_ZTv0_n16_N8S3464C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N8S3464C10D1Ev,_ZThn584_N8S3464C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3464C6D0Ev,_ZTv0_n36_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S3464C6D0Ev,_ZThn1716_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3464C6D1Ev,_ZTv0_n36_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S3464C6D1Ev,_ZThn1716_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3464C6D0Ev,_ZTv0_n32_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3376_N7S3464C6D0Ev,_ZThn2040_N7S3464C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N7S3464C6D0Ev,_ZThn1572_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3464C6D1Ev,_ZTv0_n32_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3376_N7S3464C6D1Ev,_ZThn2040_N7S3464C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N7S3464C6D1Ev,_ZThn1572_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C6D0Ev,_ZTv0_n16_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N7S3464C6D0Ev,_ZThn1564_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C6D1Ev,_ZTv0_n16_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2576_N7S3464C6D1Ev,_ZThn1564_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3464C6D0Ev,_ZTv0_n28_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N7S3464C6D0Ev,_ZThn852_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3464C6D1Ev,_ZTv0_n28_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1408_N7S3464C6D1Ev,_ZThn852_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C6D0Ev,_ZTv0_n20_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N7S3464C6D0Ev,_ZThn620_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C6D1Ev,_ZTv0_n20_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N7S3464C6D1Ev,_ZThn620_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C6D0Ev,_ZTv0_n24_N7S3464C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S3464C6D0Ev,_ZThn732_N7S3464C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C6D1Ev,_ZTv0_n24_N7S3464C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N7S3464C6D1Ev,_ZThn732_N7S3464C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C14D0Ev,_ZTv0_n24_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S3464C14D0Ev,_ZThn408_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C14D1Ev,_ZTv0_n24_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn640_N8S3464C14D1Ev,_ZThn408_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C14D0Ev,_ZTv0_n20_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S3464C14D0Ev,_ZThn296_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C14D1Ev,_ZTv0_n20_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S3464C14D1Ev,_ZThn296_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C14D0Ev,_ZTv0_n32_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S3464C14D0Ev,_ZThn1248_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C14D1Ev,_ZTv0_n32_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S3464C14D1Ev,_ZThn1248_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3464C14D0Ev,_ZTv0_n36_N8S3464C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S3464C14D0Ev,_ZThn1392_N8S3464C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3464C14D1Ev,_ZTv0_n36_N8S3464C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S3464C14D1Ev,_ZThn1392_N8S3464C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D0Ev,_ZTv0_n24_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S3464C15D0Ev,_ZThn332_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C15D1Ev,_ZTv0_n24_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S3464C15D1Ev,_ZThn332_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D0Ev,_ZTv0_n20_N8S3464C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S3464C15D0Ev,_ZThn220_N8S3464C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C15D1Ev,_ZTv0_n20_N8S3464C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S3464C15D1Ev,_ZThn220_N8S3464C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D0Ev,_ZTv0_n24_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C13D0Ev,_ZThn732_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3464C13D1Ev,_ZTv0_n24_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1200_N8S3464C13D1Ev,_ZThn732_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D0Ev,_ZTv0_n20_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N8S3464C13D0Ev,_ZThn620_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3464C13D1Ev,_ZTv0_n20_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N8S3464C13D1Ev,_ZThn620_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D0Ev,_ZTv0_n32_N8S3464C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S3464C13D0Ev,_ZThn1572_N8S3464C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3464C13D1Ev,_ZTv0_n32_N8S3464C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2592_N8S3464C13D1Ev,_ZThn1572_N8S3464C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D0Ev,_ZTv0_n20_N7S3464C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3464C2D0Ev,_ZThn220_N7S3464C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3464C2D0Ev,_ZThn876_N7S3464C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C2D1Ev,_ZTv0_n20_N7S3464C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3464C2D1Ev,_ZThn220_N7S3464C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3464C2D1Ev,_ZThn876_N7S3464C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D0Ev,_ZTv0_n20_N7S3464C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3464C3D0Ev,_ZThn220_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N7S3464C3D0Ev,_ZThn620_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N7S3464C3D0Ev,_ZThn740_N7S3464C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3464C3D0Ev,_ZThn876_N7S3464C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C3D1Ev,_ZTv0_n20_N7S3464C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3464C3D1Ev,_ZThn220_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1008_N7S3464C3D1Ev,_ZThn620_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N7S3464C3D1Ev,_ZThn740_N7S3464C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3464C3D1Ev,_ZThn876_N7S3464C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3464C1D0Ev,_ZTv0_n36_N7S3464C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3248_N7S3464C1D0Ev,_ZThn1972_N7S3464C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3464C1D1Ev,_ZTv0_n36_N7S3464C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3248_N7S3464C1D1Ev,_ZThn1972_N7S3464C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3464C1D0Ev,_ZTv0_n32_N7S3464C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S3464C1D0Ev,_ZThn2296_N7S3464C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3024_N7S3464C1D0Ev,_ZThn1828_N7S3464C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3464C1D1Ev,_ZTv0_n32_N7S3464C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3808_N7S3464C1D1Ev,_ZThn2296_N7S3464C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3024_N7S3464C1D1Ev,_ZThn1828_N7S3464C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C1D0Ev,_ZTv0_n16_N7S3464C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N7S3464C1D0Ev,_ZThn1820_N7S3464C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3464C1D1Ev,_ZTv0_n16_N7S3464C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N7S3464C1D1Ev,_ZThn1820_N7S3464C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3464C1D0Ev,_ZTv0_n28_N7S3464C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N7S3464C1D0Ev,_ZThn1108_N7S3464C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3464C1D1Ev,_ZTv0_n28_N7S3464C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1840_N7S3464C1D1Ev,_ZThn1108_N7S3464C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C1D0Ev,_ZTv0_n24_N7S3464C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N7S3464C1D0Ev,_ZThn988_N7S3464C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3464C1D1Ev,_ZTv0_n24_N7S3464C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N7S3464C1D1Ev,_ZThn988_N7S3464C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C1D0Ev,_ZTv0_n20_N7S3464C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3464C1D0Ev,_ZThn876_N7S3464C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3464C1D1Ev,_ZTv0_n20_N7S3464C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N7S3464C1D1Ev,_ZThn876_N7S3464C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3464C1 = {  "S3464C1", // class name
  bases_S3464C1, 48,
  &(vtc_S3464C1[0]), // expected_vtbl_contents
  &(vtt_S3464C1[0]), // expected_vtt_contents
  ABISELECT(4528,2728), // object size
  NSPAIRA(_ZTI7S3464C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3464C1),182, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3464C1),124, //virtual table table var
  48, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3365C3  {
  int s3365c3f0;
  __tsi64 s3365c3f1;
  void *s3365c3f2[4];
  int s3365c3f3[2];
  void *s3365c3f4;
  ::S499C6_nt s3365c3f5;
  void *s3365c3f6[2];
  virtual  ~S3365C3(); // _ZN7S3365C3D1Ev
  virtual void  v6(); // _ZN7S3365C32v6Ev
  virtual void  v7(); // _ZN7S3365C32v7Ev
  virtual void  v8(); // _ZN7S3365C32v8Ev
  virtual void  v9(); // _ZN7S3365C32v9Ev
  virtual void  v10(); // _ZN7S3365C33v10Ev
  virtual void  v11(); // _ZN7S3365C33v11Ev
  virtual void  v12(); // _ZN7S3365C33v12Ev
  virtual void  v13(); // _ZN7S3365C33v13Ev
  virtual void  v14(); // _ZN7S3365C33v14Ev
  virtual void  v15(); // _ZN7S3365C33v15Ev
  virtual void  v16(); // _ZN7S3365C33v16Ev
  virtual void  v17(); // _ZN7S3365C33v17Ev
  virtual void  v18(); // _ZN7S3365C33v18Ev
  virtual void  v19(); // _ZN7S3365C33v19Ev
  virtual void  v20(); // _ZN7S3365C33v20Ev
  virtual void  v21(); // _ZN7S3365C33v21Ev
  virtual void  v22(); // _ZN7S3365C33v22Ev
  virtual void  v23(); // _ZN7S3365C33v23Ev
  virtual void  v24(); // _ZN7S3365C33v24Ev
  virtual void  v25(); // _ZN7S3365C33v25Ev
  virtual void  v26(); // _ZN7S3365C33v26Ev
  virtual void  v27(); // _ZN7S3365C33v27Ev
  virtual void  v28(); // _ZN7S3365C33v28Ev
  virtual void  v29(); // _ZN7S3365C33v29Ev
  virtual void  v30(); // _ZN7S3365C33v30Ev
  virtual void  v31(); // _ZN7S3365C33v31Ev
  virtual void  v32(); // _ZN7S3365C33v32Ev
  virtual void  v33(); // _ZN7S3365C33v33Ev
  virtual void  v34(); // _ZN7S3365C33v34Ev
  virtual void  v35(); // _ZN7S3365C33v35Ev
  virtual void  v36(); // _ZN7S3365C33v36Ev
  virtual void  v37(); // _ZN7S3365C33v37Ev
  virtual void  v38(); // _ZN7S3365C33v38Ev
  virtual void  v39(); // _ZN7S3365C33v39Ev
  virtual void  v40(); // _ZN7S3365C33v40Ev
  virtual void  v41(); // _ZN7S3365C33v41Ev
  virtual void  v42(); // _ZN7S3365C33v42Ev
  virtual void  v43(); // _ZN7S3365C33v43Ev
  virtual void  v44(); // _ZN7S3365C33v44Ev
  virtual void  v45(); // _ZN7S3365C33v45Ev
  virtual void  v46(); // _ZN7S3365C33v46Ev
  virtual void  v47(); // _ZN7S3365C33v47Ev
  virtual void  v48(); // _ZN7S3365C33v48Ev
  virtual void  v49(); // _ZN7S3365C33v49Ev
  virtual void  v50(); // _ZN7S3365C33v50Ev
  virtual void  v51(); // _ZN7S3365C33v51Ev
  virtual void  v52(); // _ZN7S3365C33v52Ev
  virtual void  v53(); // _ZN7S3365C33v53Ev
  virtual void  v54(); // _ZN7S3365C33v54Ev
  virtual void  v55(); // _ZN7S3365C33v55Ev
  virtual void  v56(); // _ZN7S3365C33v56Ev
  virtual void  v57(); // _ZN7S3365C33v57Ev
  virtual void  v58(); // _ZN7S3365C33v58Ev
  virtual void  v59(); // _ZN7S3365C33v59Ev
  virtual void  v60(); // _ZN7S3365C33v60Ev
  virtual void  v61(); // _ZN7S3365C33v61Ev
  virtual void  v62(); // _ZN7S3365C33v62Ev
  virtual void  v63(); // _ZN7S3365C33v63Ev
  virtual void  v64(); // _ZN7S3365C33v64Ev
  virtual void  v65(); // _ZN7S3365C33v65Ev
  virtual void  v66(); // _ZN7S3365C33v66Ev
  virtual void  v67(); // _ZN7S3365C33v67Ev
  virtual void  v68(); // _ZN7S3365C33v68Ev
  virtual void  v69(); // _ZN7S3365C33v69Ev
  S3365C3(); // tgen
};
//SIG(-1 S3365C3) 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]}


 S3365C3 ::~S3365C3(){ note_dtor("S3365C3", this);}
void  S3365C3 ::v6(){vfunc_called(this, "_ZN7S3365C32v6Ev");}
void  S3365C3 ::v7(){vfunc_called(this, "_ZN7S3365C32v7Ev");}
void  S3365C3 ::v8(){vfunc_called(this, "_ZN7S3365C32v8Ev");}
void  S3365C3 ::v9(){vfunc_called(this, "_ZN7S3365C32v9Ev");}
void  S3365C3 ::v10(){vfunc_called(this, "_ZN7S3365C33v10Ev");}
void  S3365C3 ::v11(){vfunc_called(this, "_ZN7S3365C33v11Ev");}
void  S3365C3 ::v12(){vfunc_called(this, "_ZN7S3365C33v12Ev");}
void  S3365C3 ::v13(){vfunc_called(this, "_ZN7S3365C33v13Ev");}
void  S3365C3 ::v14(){vfunc_called(this, "_ZN7S3365C33v14Ev");}
void  S3365C3 ::v15(){vfunc_called(this, "_ZN7S3365C33v15Ev");}
void  S3365C3 ::v16(){vfunc_called(this, "_ZN7S3365C33v16Ev");}
void  S3365C3 ::v17(){vfunc_called(this, "_ZN7S3365C33v17Ev");}
void  S3365C3 ::v18(){vfunc_called(this, "_ZN7S3365C33v18Ev");}
void  S3365C3 ::v19(){vfunc_called(this, "_ZN7S3365C33v19Ev");}
void  S3365C3 ::v20(){vfunc_called(this, "_ZN7S3365C33v20Ev");}
void  S3365C3 ::v21(){vfunc_called(this, "_ZN7S3365C33v21Ev");}
void  S3365C3 ::v22(){vfunc_called(this, "_ZN7S3365C33v22Ev");}
void  S3365C3 ::v23(){vfunc_called(this, "_ZN7S3365C33v23Ev");}
void  S3365C3 ::v24(){vfunc_called(this, "_ZN7S3365C33v24Ev");}
void  S3365C3 ::v25(){vfunc_called(this, "_ZN7S3365C33v25Ev");}
void  S3365C3 ::v26(){vfunc_called(this, "_ZN7S3365C33v26Ev");}
void  S3365C3 ::v27(){vfunc_called(this, "_ZN7S3365C33v27Ev");}
void  S3365C3 ::v28(){vfunc_called(this, "_ZN7S3365C33v28Ev");}
void  S3365C3 ::v29(){vfunc_called(this, "_ZN7S3365C33v29Ev");}
void  S3365C3 ::v30(){vfunc_called(this, "_ZN7S3365C33v30Ev");}
void  S3365C3 ::v31(){vfunc_called(this, "_ZN7S3365C33v31Ev");}
void  S3365C3 ::v32(){vfunc_called(this, "_ZN7S3365C33v32Ev");}
void  S3365C3 ::v33(){vfunc_called(this, "_ZN7S3365C33v33Ev");}
void  S3365C3 ::v34(){vfunc_called(this, "_ZN7S3365C33v34Ev");}
void  S3365C3 ::v35(){vfunc_called(this, "_ZN7S3365C33v35Ev");}
void  S3365C3 ::v36(){vfunc_called(this, "_ZN7S3365C33v36Ev");}
void  S3365C3 ::v37(){vfunc_called(this, "_ZN7S3365C33v37Ev");}
void  S3365C3 ::v38(){vfunc_called(this, "_ZN7S3365C33v38Ev");}
void  S3365C3 ::v39(){vfunc_called(this, "_ZN7S3365C33v39Ev");}
void  S3365C3 ::v40(){vfunc_called(this, "_ZN7S3365C33v40Ev");}
void  S3365C3 ::v41(){vfunc_called(this, "_ZN7S3365C33v41Ev");}
void  S3365C3 ::v42(){vfunc_called(this, "_ZN7S3365C33v42Ev");}
void  S3365C3 ::v43(){vfunc_called(this, "_ZN7S3365C33v43Ev");}
void  S3365C3 ::v44(){vfunc_called(this, "_ZN7S3365C33v44Ev");}
void  S3365C3 ::v45(){vfunc_called(this, "_ZN7S3365C33v45Ev");}
void  S3365C3 ::v46(){vfunc_called(this, "_ZN7S3365C33v46Ev");}
void  S3365C3 ::v47(){vfunc_called(this, "_ZN7S3365C33v47Ev");}
void  S3365C3 ::v48(){vfunc_called(this, "_ZN7S3365C33v48Ev");}
void  S3365C3 ::v49(){vfunc_called(this, "_ZN7S3365C33v49Ev");}
void  S3365C3 ::v50(){vfunc_called(this, "_ZN7S3365C33v50Ev");}
void  S3365C3 ::v51(){vfunc_called(this, "_ZN7S3365C33v51Ev");}
void  S3365C3 ::v52(){vfunc_called(this, "_ZN7S3365C33v52Ev");}
void  S3365C3 ::v53(){vfunc_called(this, "_ZN7S3365C33v53Ev");}
void  S3365C3 ::v54(){vfunc_called(this, "_ZN7S3365C33v54Ev");}
void  S3365C3 ::v55(){vfunc_called(this, "_ZN7S3365C33v55Ev");}
void  S3365C3 ::v56(){vfunc_called(this, "_ZN7S3365C33v56Ev");}
void  S3365C3 ::v57(){vfunc_called(this, "_ZN7S3365C33v57Ev");}
void  S3365C3 ::v58(){vfunc_called(this, "_ZN7S3365C33v58Ev");}
void  S3365C3 ::v59(){vfunc_called(this, "_ZN7S3365C33v59Ev");}
void  S3365C3 ::v60(){vfunc_called(this, "_ZN7S3365C33v60Ev");}
void  S3365C3 ::v61(){vfunc_called(this, "_ZN7S3365C33v61Ev");}
void  S3365C3 ::v62(){vfunc_called(this, "_ZN7S3365C33v62Ev");}
void  S3365C3 ::v63(){vfunc_called(this, "_ZN7S3365C33v63Ev");}
void  S3365C3 ::v64(){vfunc_called(this, "_ZN7S3365C33v64Ev");}
void  S3365C3 ::v65(){vfunc_called(this, "_ZN7S3365C33v65Ev");}
void  S3365C3 ::v66(){vfunc_called(this, "_ZN7S3365C33v66Ev");}
void  S3365C3 ::v67(){vfunc_called(this, "_ZN7S3365C33v67Ev");}
void  S3365C3 ::v68(){vfunc_called(this, "_ZN7S3365C33v68Ev");}
void  S3365C3 ::v69(){vfunc_called(this, "_ZN7S3365C33v69Ev");}
S3365C3 ::S3365C3(){ note_ctor("S3365C3", this);} // tgen

static void Test_S3365C3()
{
  extern Class_Descriptor cd_S3365C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3365C3, buf);
    S3365C3 *dp, &lv = *(dp=new (buf) S3365C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3365C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3365C3)");
    check_field_offset(lv, s3365c3f0, ABISELECT(8,4), "S3365C3.s3365c3f0");
    check_field_offset(lv, s3365c3f1, ABISELECT(16,8), "S3365C3.s3365c3f1");
    check_field_offset(lv, s3365c3f2, ABISELECT(24,16), "S3365C3.s3365c3f2");
    check_field_offset(lv, s3365c3f3, ABISELECT(56,32), "S3365C3.s3365c3f3");
    check_field_offset(lv, s3365c3f4, ABISELECT(64,40), "S3365C3.s3365c3f4");
    check_field_offset(lv, s3365c3f5, ABISELECT(72,44), "S3365C3.s3365c3f5");
    check_field_offset(lv, s3365c3f6, ABISELECT(80,52), "S3365C3.s3365c3f6");
    test_class_info(&lv, &cd_S3365C3);
    dp->~S3365C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3365C3(Test_S3365C3, "S3365C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3365C3C1Ev();
extern void _ZN7S3365C3D1Ev();
Name_Map name_map_S3365C3[] = {
  NSPAIR(_ZN7S3365C3C1Ev),
  NSPAIR(_ZN7S3365C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3365C3[];
extern void _ZN7S3365C3D1Ev();
extern void _ZN7S3365C3D0Ev();
extern void _ZN7S3365C32v6Ev();
extern void _ZN7S3365C32v7Ev();
extern void _ZN7S3365C32v8Ev();
extern void _ZN7S3365C32v9Ev();
extern void _ZN7S3365C33v10Ev();
extern void _ZN7S3365C33v11Ev();
extern void _ZN7S3365C33v12Ev();
extern void _ZN7S3365C33v13Ev();
extern void _ZN7S3365C33v14Ev();
extern void _ZN7S3365C33v15Ev();
extern void _ZN7S3365C33v16Ev();
extern void _ZN7S3365C33v17Ev();
extern void _ZN7S3365C33v18Ev();
extern void _ZN7S3365C33v19Ev();
extern void _ZN7S3365C33v20Ev();
extern void _ZN7S3365C33v21Ev();
extern void _ZN7S3365C33v22Ev();
extern void _ZN7S3365C33v23Ev();
extern void _ZN7S3365C33v24Ev();
extern void _ZN7S3365C33v25Ev();
extern void _ZN7S3365C33v26Ev();
extern void _ZN7S3365C33v27Ev();
extern void _ZN7S3365C33v28Ev();
extern void _ZN7S3365C33v29Ev();
extern void _ZN7S3365C33v30Ev();
extern void _ZN7S3365C33v31Ev();
extern void _ZN7S3365C33v32Ev();
extern void _ZN7S3365C33v33Ev();
extern void _ZN7S3365C33v34Ev();
extern void _ZN7S3365C33v35Ev();
extern void _ZN7S3365C33v36Ev();
extern void _ZN7S3365C33v37Ev();
extern void _ZN7S3365C33v38Ev();
extern void _ZN7S3365C33v39Ev();
extern void _ZN7S3365C33v40Ev();
extern void _ZN7S3365C33v41Ev();
extern void _ZN7S3365C33v42Ev();
extern void _ZN7S3365C33v43Ev();
extern void _ZN7S3365C33v44Ev();
extern void _ZN7S3365C33v45Ev();
extern void _ZN7S3365C33v46Ev();
extern void _ZN7S3365C33v47Ev();
extern void _ZN7S3365C33v48Ev();
extern void _ZN7S3365C33v49Ev();
extern void _ZN7S3365C33v50Ev();
extern void _ZN7S3365C33v51Ev();
extern void _ZN7S3365C33v52Ev();
extern void _ZN7S3365C33v53Ev();
extern void _ZN7S3365C33v54Ev();
extern void _ZN7S3365C33v55Ev();
extern void _ZN7S3365C33v56Ev();
extern void _ZN7S3365C33v57Ev();
extern void _ZN7S3365C33v58Ev();
extern void _ZN7S3365C33v59Ev();
extern void _ZN7S3365C33v60Ev();
extern void _ZN7S3365C33v61Ev();
extern void _ZN7S3365C33v62Ev();
extern void _ZN7S3365C33v63Ev();
extern void _ZN7S3365C33v64Ev();
extern void _ZN7S3365C33v65Ev();
extern void _ZN7S3365C33v66Ev();
extern void _ZN7S3365C33v67Ev();
extern void _ZN7S3365C33v68Ev();
extern void _ZN7S3365C33v69Ev();
static  VTBL_ENTRY vtc_S3365C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3365C3[0]),
  (VTBL_ENTRY)&_ZN7S3365C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3365C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v69Ev,
};
extern VTBL_ENTRY _ZTI7S3365C3[];
extern  VTBL_ENTRY _ZTV7S3365C3[];
Class_Descriptor cd_S3365C3 = {  "S3365C3", // class name
  0,0,//no base classes
  &(vtc_S3365C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3365C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3365C3),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  S3365C2_nt  : S3365C3 {
  int s3365c2f0[2];
  unsigned int s3365c2f1:1;
  unsigned int s3365c2f2:1;
  void *s3365c2f3;
  ::S499C37_nt s3365c2f4;
  virtual  ~S3365C2_nt(); // _ZN10S3365C2_ntD1Ev
  virtual void  v70(); // _ZN10S3365C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3365C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3365C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3365C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3365C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3365C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3365C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3365C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3365C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3365C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3365C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3365C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3365C2_nt3v82Ev
  S3365C2_nt(); // tgen
};
//SIG(-1 S3365C2_nt) C1{ BC2{ vd 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fi[2] Fi:1 Fi:1 Fp FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}}}


 S3365C2_nt ::~S3365C2_nt(){ note_dtor("S3365C2_nt", this);}
void  S3365C2_nt ::v70(){vfunc_called(this, "_ZN10S3365C2_nt3v70Ev");}
void  S3365C2_nt ::v71(){vfunc_called(this, "_ZN10S3365C2_nt3v71Ev");}
void  S3365C2_nt ::v72(){vfunc_called(this, "_ZN10S3365C2_nt3v72Ev");}
void  S3365C2_nt ::v73(){vfunc_called(this, "_ZN10S3365C2_nt3v73Ev");}
void  S3365C2_nt ::v74(){vfunc_called(this, "_ZN10S3365C2_nt3v74Ev");}
void  S3365C2_nt ::v75(){vfunc_called(this, "_ZN10S3365C2_nt3v75Ev");}
void  S3365C2_nt ::v76(){vfunc_called(this, "_ZN10S3365C2_nt3v76Ev");}
void  S3365C2_nt ::v77(){vfunc_called(this, "_ZN10S3365C2_nt3v77Ev");}
void  S3365C2_nt ::v78(){vfunc_called(this, "_ZN10S3365C2_nt3v78Ev");}
void  S3365C2_nt ::v79(){vfunc_called(this, "_ZN10S3365C2_nt3v79Ev");}
void  S3365C2_nt ::v80(){vfunc_called(this, "_ZN10S3365C2_nt3v80Ev");}
void  S3365C2_nt ::v81(){vfunc_called(this, "_ZN10S3365C2_nt3v81Ev");}
void  S3365C2_nt ::v82(){vfunc_called(this, "_ZN10S3365C2_nt3v82Ev");}
S3365C2_nt ::S3365C2_nt(){ note_ctor("S3365C2_nt", this);} // tgen

//skip512 S3365C2_nt

#else // __cplusplus

extern void _ZN10S3365C2_ntC1Ev();
extern void _ZN10S3365C2_ntD1Ev();
Name_Map name_map_S3365C2_nt[] = {
  NSPAIR(_ZN10S3365C2_ntC1Ev),
  NSPAIR(_ZN10S3365C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3365C3;
extern VTBL_ENTRY _ZTI7S3365C3[];
extern  VTBL_ENTRY _ZTV7S3365C3[];
static Base_Class bases_S3365C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3365C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3365C2_nt[];
extern void _ZN10S3365C2_ntD1Ev();
extern void _ZN10S3365C2_ntD0Ev();
extern void _ZN7S3365C32v6Ev();
extern void _ZN7S3365C32v7Ev();
extern void _ZN7S3365C32v8Ev();
extern void _ZN7S3365C32v9Ev();
extern void _ZN7S3365C33v10Ev();
extern void _ZN7S3365C33v11Ev();
extern void _ZN7S3365C33v12Ev();
extern void _ZN7S3365C33v13Ev();
extern void _ZN7S3365C33v14Ev();
extern void _ZN7S3365C33v15Ev();
extern void _ZN7S3365C33v16Ev();
extern void _ZN7S3365C33v17Ev();
extern void _ZN7S3365C33v18Ev();
extern void _ZN7S3365C33v19Ev();
extern void _ZN7S3365C33v20Ev();
extern void _ZN7S3365C33v21Ev();
extern void _ZN7S3365C33v22Ev();
extern void _ZN7S3365C33v23Ev();
extern void _ZN7S3365C33v24Ev();
extern void _ZN7S3365C33v25Ev();
extern void _ZN7S3365C33v26Ev();
extern void _ZN7S3365C33v27Ev();
extern void _ZN7S3365C33v28Ev();
extern void _ZN7S3365C33v29Ev();
extern void _ZN7S3365C33v30Ev();
extern void _ZN7S3365C33v31Ev();
extern void _ZN7S3365C33v32Ev();
extern void _ZN7S3365C33v33Ev();
extern void _ZN7S3365C33v34Ev();
extern void _ZN7S3365C33v35Ev();
extern void _ZN7S3365C33v36Ev();
extern void _ZN7S3365C33v37Ev();
extern void _ZN7S3365C33v38Ev();
extern void _ZN7S3365C33v39Ev();
extern void _ZN7S3365C33v40Ev();
extern void _ZN7S3365C33v41Ev();
extern void _ZN7S3365C33v42Ev();
extern void _ZN7S3365C33v43Ev();
extern void _ZN7S3365C33v44Ev();
extern void _ZN7S3365C33v45Ev();
extern void _ZN7S3365C33v46Ev();
extern void _ZN7S3365C33v47Ev();
extern void _ZN7S3365C33v48Ev();
extern void _ZN7S3365C33v49Ev();
extern void _ZN7S3365C33v50Ev();
extern void _ZN7S3365C33v51Ev();
extern void _ZN7S3365C33v52Ev();
extern void _ZN7S3365C33v53Ev();
extern void _ZN7S3365C33v54Ev();
extern void _ZN7S3365C33v55Ev();
extern void _ZN7S3365C33v56Ev();
extern void _ZN7S3365C33v57Ev();
extern void _ZN7S3365C33v58Ev();
extern void _ZN7S3365C33v59Ev();
extern void _ZN7S3365C33v60Ev();
extern void _ZN7S3365C33v61Ev();
extern void _ZN7S3365C33v62Ev();
extern void _ZN7S3365C33v63Ev();
extern void _ZN7S3365C33v64Ev();
extern void _ZN7S3365C33v65Ev();
extern void _ZN7S3365C33v66Ev();
extern void _ZN7S3365C33v67Ev();
extern void _ZN7S3365C33v68Ev();
extern void _ZN7S3365C33v69Ev();
extern void _ZN10S3365C2_nt3v70Ev();
extern void _ZN10S3365C2_nt3v71Ev();
extern void _ZN10S3365C2_nt3v72Ev();
extern void _ZN10S3365C2_nt3v73Ev();
extern void _ZN10S3365C2_nt3v74Ev();
extern void _ZN10S3365C2_nt3v75Ev();
extern void _ZN10S3365C2_nt3v76Ev();
extern void _ZN10S3365C2_nt3v77Ev();
extern void _ZN10S3365C2_nt3v78Ev();
extern void _ZN10S3365C2_nt3v79Ev();
extern void _ZN10S3365C2_nt3v80Ev();
extern void _ZN10S3365C2_nt3v81Ev();
extern void _ZN10S3365C2_nt3v82Ev();
static  VTBL_ENTRY vtc_S3365C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3365C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3365C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v69Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v82Ev,
};
extern VTBL_ENTRY _ZTI10S3365C2_nt[];
VTBL_ENTRY *P__ZTI10S3365C2_nt = _ZTI10S3365C2_nt; 
extern  VTBL_ENTRY _ZTV10S3365C2_nt[];
Class_Descriptor cd_S3365C2_nt = {  "S3365C2_nt", // class name
  bases_S3365C2_nt, 1,
  &(vtc_S3365C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI10S3365C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3365C2_nt),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3365C1  : S3365C2_nt {
  ::S6060C12_nt s3365c1f0;
  int s3365c1f1;
  virtual  ~S3365C1(); // _ZN7S3365C1D1Ev
  virtual void  v1(); // _ZN7S3365C12v1Ev
  virtual void  v2(); // _ZN7S3365C12v2Ev
  virtual void  v3(); // _ZN7S3365C12v3Ev
  virtual void  v4(); // _ZN7S3365C12v4Ev
  virtual void  v5(); // _ZN7S3365C12v5Ev
  S3365C1(); // tgen
};
//SIG(1 S3365C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi[2] Fi:1 Fi:1 Fp FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}}} vd v1 v2 v3 v4 v5 FC9{ m Fp Fi[6]} Fi}


 S3365C1 ::~S3365C1(){ note_dtor("S3365C1", this);}
void  S3365C1 ::v1(){vfunc_called(this, "_ZN7S3365C12v1Ev");}
void  S3365C1 ::v2(){vfunc_called(this, "_ZN7S3365C12v2Ev");}
void  S3365C1 ::v3(){vfunc_called(this, "_ZN7S3365C12v3Ev");}
void  S3365C1 ::v4(){vfunc_called(this, "_ZN7S3365C12v4Ev");}
void  S3365C1 ::v5(){vfunc_called(this, "_ZN7S3365C12v5Ev");}
S3365C1 ::S3365C1(){ note_ctor("S3365C1", this);} // tgen

static void Test_S3365C1()
{
  extern Class_Descriptor cd_S3365C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S3365C1, buf);
    S3365C1 *dp, &lv = *(dp=new (buf) S3365C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S3365C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3365C1)");
    check_base_class_offset(lv, (S3365C3*)(S3365C2_nt*), 0, "S3365C1");
    check_base_class_offset(lv, (S3365C2_nt*), 0, "S3365C1");
    check_field_offset(lv, s3365c1f0, ABISELECT(136,88), "S3365C1.s3365c1f0");
    check_field_offset(lv, s3365c1f1, ABISELECT(168,116), "S3365C1.s3365c1f1");
    test_class_info(&lv, &cd_S3365C1);
    dp->~S3365C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3365C1(Test_S3365C1, "S3365C1", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S3365C1C1Ev();
extern void _ZN7S3365C1D1Ev();
Name_Map name_map_S3365C1[] = {
  NSPAIR(_ZN7S3365C1C1Ev),
  NSPAIR(_ZN7S3365C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3365C3;
extern VTBL_ENTRY _ZTI7S3365C3[];
extern  VTBL_ENTRY _ZTV7S3365C3[];
extern Class_Descriptor cd_S3365C2_nt;
extern VTBL_ENTRY _ZTI10S3365C2_nt[];
extern  VTBL_ENTRY _ZTV10S3365C2_nt[];
static Base_Class bases_S3365C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3365C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3365C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3365C1[];
extern void _ZN7S3365C1D1Ev();
extern void _ZN7S3365C1D0Ev();
extern void _ZN7S3365C32v6Ev();
extern void _ZN7S3365C32v7Ev();
extern void _ZN7S3365C32v8Ev();
extern void _ZN7S3365C32v9Ev();
extern void _ZN7S3365C33v10Ev();
extern void _ZN7S3365C33v11Ev();
extern void _ZN7S3365C33v12Ev();
extern void _ZN7S3365C33v13Ev();
extern void _ZN7S3365C33v14Ev();
extern void _ZN7S3365C33v15Ev();
extern void _ZN7S3365C33v16Ev();
extern void _ZN7S3365C33v17Ev();
extern void _ZN7S3365C33v18Ev();
extern void _ZN7S3365C33v19Ev();
extern void _ZN7S3365C33v20Ev();
extern void _ZN7S3365C33v21Ev();
extern void _ZN7S3365C33v22Ev();
extern void _ZN7S3365C33v23Ev();
extern void _ZN7S3365C33v24Ev();
extern void _ZN7S3365C33v25Ev();
extern void _ZN7S3365C33v26Ev();
extern void _ZN7S3365C33v27Ev();
extern void _ZN7S3365C33v28Ev();
extern void _ZN7S3365C33v29Ev();
extern void _ZN7S3365C33v30Ev();
extern void _ZN7S3365C33v31Ev();
extern void _ZN7S3365C33v32Ev();
extern void _ZN7S3365C33v33Ev();
extern void _ZN7S3365C33v34Ev();
extern void _ZN7S3365C33v35Ev();
extern void _ZN7S3365C33v36Ev();
extern void _ZN7S3365C33v37Ev();
extern void _ZN7S3365C33v38Ev();
extern void _ZN7S3365C33v39Ev();
extern void _ZN7S3365C33v40Ev();
extern void _ZN7S3365C33v41Ev();
extern void _ZN7S3365C33v42Ev();
extern void _ZN7S3365C33v43Ev();
extern void _ZN7S3365C33v44Ev();
extern void _ZN7S3365C33v45Ev();
extern void _ZN7S3365C33v46Ev();
extern void _ZN7S3365C33v47Ev();
extern void _ZN7S3365C33v48Ev();
extern void _ZN7S3365C33v49Ev();
extern void _ZN7S3365C33v50Ev();
extern void _ZN7S3365C33v51Ev();
extern void _ZN7S3365C33v52Ev();
extern void _ZN7S3365C33v53Ev();
extern void _ZN7S3365C33v54Ev();
extern void _ZN7S3365C33v55Ev();
extern void _ZN7S3365C33v56Ev();
extern void _ZN7S3365C33v57Ev();
extern void _ZN7S3365C33v58Ev();
extern void _ZN7S3365C33v59Ev();
extern void _ZN7S3365C33v60Ev();
extern void _ZN7S3365C33v61Ev();
extern void _ZN7S3365C33v62Ev();
extern void _ZN7S3365C33v63Ev();
extern void _ZN7S3365C33v64Ev();
extern void _ZN7S3365C33v65Ev();
extern void _ZN7S3365C33v66Ev();
extern void _ZN7S3365C33v67Ev();
extern void _ZN7S3365C33v68Ev();
extern void _ZN7S3365C33v69Ev();
extern void _ZN10S3365C2_nt3v70Ev();
extern void _ZN10S3365C2_nt3v71Ev();
extern void _ZN10S3365C2_nt3v72Ev();
extern void _ZN10S3365C2_nt3v73Ev();
extern void _ZN10S3365C2_nt3v74Ev();
extern void _ZN10S3365C2_nt3v75Ev();
extern void _ZN10S3365C2_nt3v76Ev();
extern void _ZN10S3365C2_nt3v77Ev();
extern void _ZN10S3365C2_nt3v78Ev();
extern void _ZN10S3365C2_nt3v79Ev();
extern void _ZN10S3365C2_nt3v80Ev();
extern void _ZN10S3365C2_nt3v81Ev();
extern void _ZN10S3365C2_nt3v82Ev();
extern void _ZN7S3365C12v1Ev();
extern void _ZN7S3365C12v2Ev();
extern void _ZN7S3365C12v3Ev();
extern void _ZN7S3365C12v4Ev();
extern void _ZN7S3365C12v5Ev();
static  VTBL_ENTRY vtc_S3365C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3365C1[0]),
  (VTBL_ENTRY)&_ZN7S3365C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3365C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3365C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3365C33v69Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3365C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN7S3365C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3365C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3365C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3365C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3365C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3365C1[];
extern  VTBL_ENTRY _ZTV7S3365C1[];
Class_Descriptor cd_S3365C1 = {  "S3365C1", // class name
  bases_S3365C1, 2,
  &(vtc_S3365C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S3365C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3365C1),86, //virtual function table var
  2, // 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  S20109C2  {
  void *s20109c2f0;
  virtual void  v27(); // _ZN8S20109C23v27Ev
  virtual void  v28(); // _ZN8S20109C23v28Ev
  ~S20109C2(); // tgen
  S20109C2(); // tgen
};
//SIG(-1 S20109C2) C1{ v1 v2 Fp}


void  S20109C2 ::v27(){vfunc_called(this, "_ZN8S20109C23v27Ev");}
void  S20109C2 ::v28(){vfunc_called(this, "_ZN8S20109C23v28Ev");}
S20109C2 ::~S20109C2(){ note_dtor("S20109C2", this);} // tgen
S20109C2 ::S20109C2(){ note_ctor("S20109C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20109C2C1Ev();
extern void _ZN8S20109C2D1Ev();
Name_Map name_map_S20109C2[] = {
  NSPAIR(_ZN8S20109C2C1Ev),
  NSPAIR(_ZN8S20109C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20109C2[];
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
static  VTBL_ENTRY vtc_S20109C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C2[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
};
extern VTBL_ENTRY _ZTI8S20109C2[];
extern  VTBL_ENTRY _ZTV8S20109C2[];
Class_Descriptor cd_S20109C2 = {  "S20109C2", // class name
  0,0,//no base classes
  &(vtc_S20109C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20109C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20109C2),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  S20109C5  {
  void *s20109c5f0;
  virtual void  v13(); // _ZN8S20109C53v13Ev
  virtual void  v14(); // _ZN8S20109C53v14Ev
  ~S20109C5(); // tgen
  S20109C5(); // tgen
};
//SIG(-1 S20109C5) C1{ v1 v2 Fp}


void  S20109C5 ::v13(){vfunc_called(this, "_ZN8S20109C53v13Ev");}
void  S20109C5 ::v14(){vfunc_called(this, "_ZN8S20109C53v14Ev");}
S20109C5 ::~S20109C5(){ note_dtor("S20109C5", this);} // tgen
S20109C5 ::S20109C5(){ note_ctor("S20109C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20109C5C1Ev();
extern void _ZN8S20109C5D1Ev();
Name_Map name_map_S20109C5[] = {
  NSPAIR(_ZN8S20109C5C1Ev),
  NSPAIR(_ZN8S20109C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20109C5[];
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY vtc_S20109C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C5[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
Class_Descriptor cd_S20109C5 = {  "S20109C5", // class name
  0,0,//no base classes
  &(vtc_S20109C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20109C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20109C5),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  S20109C4  : virtual S20109C5 {
  void *s20109c4f0;
  virtual  ~S20109C4(); // _ZN8S20109C4D2Ev
  virtual void  v15(); // _ZN8S20109C43v15Ev
  virtual void  v16(); // _ZN8S20109C43v16Ev
  S20109C4(); // tgen
};
//SIG(-1 S20109C4) C1{ VBC2{ v3 v4 Fp} vd v1 v2 Fp}


 S20109C4 ::~S20109C4(){ note_dtor("S20109C4", this);}
void  S20109C4 ::v15(){vfunc_called(this, "_ZN8S20109C43v15Ev");}
void  S20109C4 ::v16(){vfunc_called(this, "_ZN8S20109C43v16Ev");}
S20109C4 ::S20109C4(){ note_ctor("S20109C4", this);} // tgen

static void Test_S20109C4()
{
  extern Class_Descriptor cd_S20109C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20109C4, buf);
    S20109C4 *dp, &lv = *(dp=new (buf) S20109C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20109C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20109C4)");
    check_base_class_offset(lv, (S20109C5*), ABISELECT(16,8), "S20109C4");
    check_field_offset(lv, s20109c4f0, ABISELECT(8,4), "S20109C4.s20109c4f0");
    test_class_info(&lv, &cd_S20109C4);
    dp->~S20109C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C4(Test_S20109C4, "S20109C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20109C4C1Ev();
extern void _ZN8S20109C4D2Ev();
Name_Map name_map_S20109C4[] = {
  NSPAIR(_ZN8S20109C4C1Ev),
  NSPAIR(_ZN8S20109C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
static Base_Class bases_S20109C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20109C4[];
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY vtc_S20109C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S20109C4[];
static  VTT_ENTRY vtt_S20109C4[] = {
  {&(_ZTV8S20109C4[3]),  3,13},
  {&(_ZTV8S20109C4[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
Class_Descriptor cd_S20109C4 = {  "S20109C4", // class name
  bases_S20109C4, 1,
  &(vtc_S20109C4[0]), // expected_vtbl_contents
  &(vtt_S20109C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20109C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20109C4),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20109C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C8  {
  void *s20109c8f0;
  char s20109c8f1;
  virtual void  v9(); // _ZN8S20109C82v9Ev
  virtual void  v10(); // _ZN8S20109C83v10Ev
  virtual void  v11(); // _ZN8S20109C83v11Ev
  virtual void  v12(); // _ZN8S20109C83v12Ev
  ~S20109C8(); // tgen
  S20109C8(); // tgen
};
//SIG(-1 S20109C8) C1{ v1 v2 v3 v4 Fp Fc}


void  S20109C8 ::v9(){vfunc_called(this, "_ZN8S20109C82v9Ev");}
void  S20109C8 ::v10(){vfunc_called(this, "_ZN8S20109C83v10Ev");}
void  S20109C8 ::v11(){vfunc_called(this, "_ZN8S20109C83v11Ev");}
void  S20109C8 ::v12(){vfunc_called(this, "_ZN8S20109C83v12Ev");}
S20109C8 ::~S20109C8(){ note_dtor("S20109C8", this);} // tgen
S20109C8 ::S20109C8(){ note_ctor("S20109C8", this);} // tgen

static void Test_S20109C8()
{
  extern Class_Descriptor cd_S20109C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20109C8, buf);
    S20109C8 *dp, &lv = *(dp=new (buf) S20109C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20109C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20109C8)");
    check_field_offset(lv, s20109c8f0, ABISELECT(8,4), "S20109C8.s20109c8f0");
    check_field_offset(lv, s20109c8f1, ABISELECT(16,8), "S20109C8.s20109c8f1");
    test_class_info(&lv, &cd_S20109C8);
    dp->~S20109C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C8(Test_S20109C8, "S20109C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20109C8C1Ev();
extern void _ZN8S20109C8D1Ev();
Name_Map name_map_S20109C8[] = {
  NSPAIR(_ZN8S20109C8C1Ev),
  NSPAIR(_ZN8S20109C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20109C8[];
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY vtc_S20109C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C8[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
Class_Descriptor cd_S20109C8 = {  "S20109C8", // class name
  0,0,//no base classes
  &(vtc_S20109C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20109C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20109C8),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  S20109C10  {
  virtual void  v17(); // _ZN9S20109C103v17Ev
  ~S20109C10(); // tgen
  S20109C10(); // tgen
};
//SIG(-1 S20109C10) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN9S20109C10C1Ev();
extern void _ZN9S20109C10D1Ev();
Name_Map name_map_S20109C10[] = {
  NSPAIR(_ZN9S20109C10C1Ev),
  NSPAIR(_ZN9S20109C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20109C10[];
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY vtc_S20109C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C10[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
Class_Descriptor cd_S20109C10 = {  "S20109C10", // class name
  0,0,//no base classes
  &(vtc_S20109C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20109C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20109C10),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  S20109C9  : virtual S20109C5 , S20109C4 , S20109C10 {
  __tsi64 s20109c9f0;
  int s20109c9f1;
  void *s20109c9f2[8];
  int s20109c9f3[2];
  long double s20109c9f4;
  int s20109c9f5;
  virtual  ~S20109C9(); // _ZN8S20109C9D2Ev
  virtual void  v18(); // _ZN8S20109C93v18Ev
  virtual void  v19(); // _ZN8S20109C93v19Ev
  virtual void  v20(); // _ZN8S20109C93v20Ev
  S20109C9(); // tgen
};
//SIG(-1 S20109C9) C1{ VBC2{ v4 v5 Fp} BC3{ VBC2 vd v6 v7 Fp} BC4{ v8} vd v1 v2 v3 FL Fi Fp[8] Fi[2] FD Fi}


 S20109C9 ::~S20109C9(){ note_dtor("S20109C9", this);}
void  S20109C9 ::v18(){vfunc_called(this, "_ZN8S20109C93v18Ev");}
void  S20109C9 ::v19(){vfunc_called(this, "_ZN8S20109C93v19Ev");}
void  S20109C9 ::v20(){vfunc_called(this, "_ZN8S20109C93v20Ev");}
S20109C9 ::S20109C9(){ note_ctor("S20109C9", this);} // tgen

static void Test_S20109C9()
{
  extern Class_Descriptor cd_S20109C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,23)];
    init_test(&cd_S20109C9, buf);
    S20109C9 *dp, &lv = *(dp=new (buf) S20109C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S20109C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C9)");
    check_base_class_offset(lv, (S20109C5*), ABISELECT(136,80), "S20109C9");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*), ABISELECT(136,80), "S20109C9");
    check_base_class_offset(lv, (S20109C4*), 0, "S20109C9");
    check_base_class_offset(lv, (S20109C10*), ABISELECT(16,8), "S20109C9");
    check_field_offset(lv, s20109c9f0, ABISELECT(24,12), "S20109C9.s20109c9f0");
    check_field_offset(lv, s20109c9f1, ABISELECT(32,20), "S20109C9.s20109c9f1");
    check_field_offset(lv, s20109c9f2, ABISELECT(40,24), "S20109C9.s20109c9f2");
    check_field_offset(lv, s20109c9f3, ABISELECT(104,56), "S20109C9.s20109c9f3");
    check_field_offset(lv, s20109c9f4, ABISELECT(112,64), "S20109C9.s20109c9f4");
    check_field_offset(lv, s20109c9f5, ABISELECT(128,76), "S20109C9.s20109c9f5");
    test_class_info(&lv, &cd_S20109C9);
    dp->~S20109C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C9(Test_S20109C9, "S20109C9", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN8S20109C9C1Ev();
extern void _ZN8S20109C9D2Ev();
Name_Map name_map_S20109C9[] = {
  NSPAIR(_ZN8S20109C9C1Ev),
  NSPAIR(_ZN8S20109C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
static Base_Class bases_S20109C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C5,    ABISELECT(136,80), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20109C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20109C9[];
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY vtc_S20109C9[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S20109C9[];
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__8S20109C9[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C4__8S20109C9[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
static  VTT_ENTRY vtt_S20109C9[] = {
  {&(_ZTV8S20109C9[3]),  3,19},
  {&(_tg__ZTV8S20109C4__8S20109C9[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C4__8S20109C9[4]),  4,6},
  {&(_ZTV8S20109C9[17]),  17,19},
};
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
Class_Descriptor cd_S20109C9 = {  "S20109C9", // class name
  bases_S20109C9, 3,
  &(vtc_S20109C9[0]), // expected_vtbl_contents
  &(vtt_S20109C9[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI8S20109C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20109C9),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20109C9),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C7  : virtual S20109C8 , virtual S20109C9 {
  int s20109c7f0:4;
  virtual void  v21(); // _ZN8S20109C73v21Ev
  ~S20109C7(); // tgen
  S20109C7(); // tgen
};
//SIG(-1 S20109C7) C1{ VBC2{ v2 v3 v4 v5 Fp Fc} VBC3{ VBC4{ v6 v7 Fp} BC5{ VBC4 vd v8 v9 Fp} BC6{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} v1 Fi:4}


void  S20109C7 ::v21(){vfunc_called(this, "_ZN8S20109C73v21Ev");}
S20109C7 ::~S20109C7(){ note_dtor("S20109C7", this);} // tgen
S20109C7 ::S20109C7(){ note_ctor("S20109C7", this);} // tgen

static void Test_S20109C7()
{
  extern Class_Descriptor cd_S20109C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,28)];
    init_test(&cd_S20109C7, buf);
    S20109C7 *dp, &lv = *(dp=new (buf) S20109C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S20109C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C7)");
    check_base_class_offset(lv, (S20109C8*), ABISELECT(16,8), "S20109C7");
    check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(184,100), "S20109C7");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(184,100), "S20109C7");
    check_base_class_offset(lv, (S20109C4*)(S20109C9*), ABISELECT(48,20), "S20109C7");
    check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(64,28), "S20109C7");
    check_base_class_offset(lv, (S20109C9*), ABISELECT(48,20), "S20109C7");
    set_bf_and_test(lv, s20109c7f0, ABISELECT(8,4), 0, 4, 1, "S20109C7");
    set_bf_and_test(lv, s20109c7f0, ABISELECT(8,4), 0, 4, hide_sll(1LL<<3), "S20109C7");
    test_class_info(&lv, &cd_S20109C7);
    dp->~S20109C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C7(Test_S20109C7, "S20109C7", ABISELECT(208,108));

#else // __cplusplus

extern void _ZN8S20109C7C1Ev();
extern void _ZN8S20109C7D1Ev();
Name_Map name_map_S20109C7[] = {
  NSPAIR(_ZN8S20109C7C1Ev),
  NSPAIR(_ZN8S20109C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C8;
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
static Base_Class bases_S20109C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C8,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C5,    ABISELECT(184,100), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(64,28), //bcp->offset
    35, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(48,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20109C7[];
extern void _ZN8S20109C73v21Ev();
extern void _ZN8S20109C7D1Ev();
extern void _ZN8S20109C7D0Ev();
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
extern void ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY vtc_S20109C7[] = {
  ABISELECT(184,100),
  ABISELECT(48,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  ABISELECT(136,80),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S20109C7[];
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C7[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__8S20109C7[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__8S20109C7[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__8S20109C7[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
static  VTT_ENTRY vtt_S20109C7[] = {
  {&(_ZTV8S20109C7[5]),  5,44},
  {&(_ZTV8S20109C7[14]),  14,44},
  {&(_ZTV8S20109C7[28]),  28,44},
  {&(_ZTV8S20109C7[42]),  42,44},
  {&(_ZTV8S20109C7[37]),  37,44},
  {&(_tg__ZTV8S20109C9__8S20109C7[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__8S20109C7[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__8S20109C7[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__8S20109C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20109C7[];
extern  VTBL_ENTRY _ZTV8S20109C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C7[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20109C7 = {  "S20109C7", // class name
  bases_S20109C7, 5,
  &(vtc_S20109C7[0]), // expected_vtbl_contents
  &(vtt_S20109C7[0]), // expected_vtt_contents
  ABISELECT(208,108), // object size
  NSPAIRA(_ZTI8S20109C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20109C7),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20109C7),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C11  : S20109C5 , virtual S20109C9 , S20109C4 {
  char s20109c11f0;
  int s20109c11f1;
  virtual  ~S20109C11(); // _ZN9S20109C11D2Ev
  virtual void  v22(); // _ZN9S20109C113v22Ev
  virtual void  v23(); // _ZN9S20109C113v23Ev
  virtual void  v24(); // _ZN9S20109C113v24Ev
  virtual void  v25(); // _ZN9S20109C113v25Ev
  S20109C11(); // tgen
};
//SIG(-1 S20109C11) C1{ BC2{ v5 v6 Fp} VBC3{ VBC2 BC4{ VBC2 vd v7 v8 Fp} BC5{ v9} vd v10 v11 v12 FL Fi Fp[8] Fi[2] FD Fi} BC4 vd v1 v2 v3 v4 Fc Fi}


 S20109C11 ::~S20109C11(){ note_dtor("S20109C11", this);}
void  S20109C11 ::v22(){vfunc_called(this, "_ZN9S20109C113v22Ev");}
void  S20109C11 ::v23(){vfunc_called(this, "_ZN9S20109C113v23Ev");}
void  S20109C11 ::v24(){vfunc_called(this, "_ZN9S20109C113v24Ev");}
void  S20109C11 ::v25(){vfunc_called(this, "_ZN9S20109C113v25Ev");}
S20109C11 ::S20109C11(){ note_ctor("S20109C11", this);} // tgen

static void Test_S20109C11()
{
  extern Class_Descriptor cd_S20109C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,29)];
    init_test(&cd_S20109C11, buf);
    S20109C11 *dp, &lv = *(dp=new (buf) S20109C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S20109C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C11)");
    /*is_ambiguous_... S20109C11::S20109C5 */ AMB_check_base_class_offset(lv, (S20109C5*), 0, "S20109C11");
    check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(184,104), "S20109C11");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(184,104), "S20109C11");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*), ABISELECT(184,104), "S20109C11");
    check_base_class_offset(lv, (S20109C4*)(S20109C9*), ABISELECT(48,24), "S20109C11");
    check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(64,32), "S20109C11");
    check_base_class_offset(lv, (S20109C9*), ABISELECT(48,24), "S20109C11");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*), ABISELECT(16,8), "S20109C11");
    check_field_offset(lv, s20109c11f0, ABISELECT(32,16), "S20109C11.s20109c11f0");
    check_field_offset(lv, s20109c11f1, ABISELECT(36,20), "S20109C11.s20109c11f1");
    test_class_info(&lv, &cd_S20109C11);
    dp->~S20109C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C11(Test_S20109C11, "S20109C11", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN9S20109C11C1Ev();
extern void _ZN9S20109C11D2Ev();
Name_Map name_map_S20109C11[] = {
  NSPAIR(_ZN9S20109C11C1Ev),
  NSPAIR(_ZN9S20109C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
static Base_Class bases_S20109C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20109C5,    ABISELECT(184,104), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(64,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(48,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20109C11[];
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN9S20109C11D1Ev();
extern void _ZN9S20109C11D0Ev();
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
extern void ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20109C11D1Ev,_ZThn24_N9S20109C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20109C11D0Ev,_ZThn24_N9S20109C11D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY vtc_S20109C11[] = {
  ABISELECT(184,104),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
  ABISELECT(168,96),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(136,80),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  0,
  0,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern VTBL_ENTRY _ZTV9S20109C11[];
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__9S20109C11[] = {
  ABISELECT(168,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C4__A1__9S20109C11[] = {
  0,
  0,
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__9S20109C11[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__9S20109C11[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__9S20109C11[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__9S20109C11[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
static  VTT_ENTRY vtt_S20109C11[] = {
  {&(_ZTV9S20109C11[4]),  4,45},
  {&(_tg__ZTV8S20109C4__A1__9S20109C11[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C4__A1__9S20109C11[4]),  4,6},
  {&(_ZTV9S20109C11[29]),  29,45},
  {&(_ZTV9S20109C11[43]),  43,45},
  {&(_ZTV9S20109C11[38]),  38,45},
  {&(_ZTV9S20109C11[15]),  15,45},
  {&(_tg__ZTV8S20109C9__9S20109C11[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__9S20109C11[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__9S20109C11[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__9S20109C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20109C11[];
extern  VTBL_ENTRY _ZTV9S20109C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C11[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20109C11D0Ev,_ZThn24_N9S20109C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20109C11D1Ev,_ZThn24_N9S20109C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20109C11 = {  "S20109C11", // class name
  bases_S20109C11, 6,
  &(vtc_S20109C11[0]), // expected_vtbl_contents
  &(vtt_S20109C11[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI9S20109C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20109C11),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20109C11),11, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C12  {
  int s20109c12f0[9];
  virtual void  v26(); // _ZN9S20109C123v26Ev
  ~S20109C12(); // tgen
  S20109C12(); // tgen
};
//SIG(-1 S20109C12) C1{ v1 Fi[9]}


void  S20109C12 ::v26(){vfunc_called(this, "_ZN9S20109C123v26Ev");}
S20109C12 ::~S20109C12(){ note_dtor("S20109C12", this);} // tgen
S20109C12 ::S20109C12(){ note_ctor("S20109C12", this);} // tgen

static void Test_S20109C12()
{
  extern Class_Descriptor cd_S20109C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S20109C12, buf);
    S20109C12 *dp, &lv = *(dp=new (buf) S20109C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S20109C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20109C12)");
    check_field_offset(lv, s20109c12f0, ABISELECT(8,4), "S20109C12.s20109c12f0");
    test_class_info(&lv, &cd_S20109C12);
    dp->~S20109C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C12(Test_S20109C12, "S20109C12", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN9S20109C12C1Ev();
extern void _ZN9S20109C12D1Ev();
Name_Map name_map_S20109C12[] = {
  NSPAIR(_ZN9S20109C12C1Ev),
  NSPAIR(_ZN9S20109C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20109C12[];
extern void _ZN9S20109C123v26Ev();
static  VTBL_ENTRY vtc_S20109C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C12[0]),
  (VTBL_ENTRY)&_ZN9S20109C123v26Ev,
};
extern VTBL_ENTRY _ZTI9S20109C12[];
extern  VTBL_ENTRY _ZTV9S20109C12[];
Class_Descriptor cd_S20109C12 = {  "S20109C12", // class name
  0,0,//no base classes
  &(vtc_S20109C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI9S20109C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20109C12),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  S20109C6  : virtual S20109C7 , virtual S20109C4 , virtual S20109C11 , S20109C12 , virtual S20109C2 {
  int s20109c6f0:24;
  virtual  ~S20109C6(); // _ZN8S20109C6D2Ev
  virtual void  v29(); // _ZN8S20109C63v29Ev
  virtual void  v30(); // _ZN8S20109C63v30Ev
  virtual void  v31(); // _ZN8S20109C63v31Ev
  virtual void  v32(); // _ZN8S20109C63v32Ev
  virtual void  v33(); // _ZN8S20109C63v33Ev
  virtual void  v34(); // _ZN8S20109C63v34Ev
  virtual void  v35(); // _ZN8S20109C63v35Ev
  S20109C6(); // tgen
};
//SIG(-1 S20109C6) C1{ VBC2{ VBC3{ v8 v9 v10 v11 Fp Fc} VBC4{ VBC5{ v12 v13 Fp} BC6{ VBC5 vd v14 v15 Fp} BC7{ v16} vd v17 v18 v19 FL Fi Fp[8] Fi[2] FD Fi} v20 Fi:4} VBC6 VBC8{ BC5 VBC4 BC6 vd v21 v22 v23 v24 Fc Fi} BC9{ v25 Fi[9]} VBC10{ v26 v27 Fp} vd v1 v2 v3 v4 v5 v6 v7 Fi:24}


 S20109C6 ::~S20109C6(){ note_dtor("S20109C6", this);}
void  S20109C6 ::v29(){vfunc_called(this, "_ZN8S20109C63v29Ev");}
void  S20109C6 ::v30(){vfunc_called(this, "_ZN8S20109C63v30Ev");}
void  S20109C6 ::v31(){vfunc_called(this, "_ZN8S20109C63v31Ev");}
void  S20109C6 ::v32(){vfunc_called(this, "_ZN8S20109C63v32Ev");}
void  S20109C6 ::v33(){vfunc_called(this, "_ZN8S20109C63v33Ev");}
void  S20109C6 ::v34(){vfunc_called(this, "_ZN8S20109C63v34Ev");}
void  S20109C6 ::v35(){vfunc_called(this, "_ZN8S20109C63v35Ev");}
S20109C6 ::S20109C6(){ note_ctor("S20109C6", this);} // tgen

static void Test_S20109C6()
{
  extern Class_Descriptor cd_S20109C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,49)];
    init_test(&cd_S20109C6, buf);
    S20109C6 *dp, &lv = *(dp=new (buf) S20109C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,192), "sizeof(S20109C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C6)");
    check_base_class_offset(lv, (S20109C8*)(S20109C7*), ABISELECT(64,52), "S20109C6");
    check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(232,144), "S20109C6");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(232,144), "S20109C6");
    /*is_ambiguous_... S20109C6::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*), ABISELECT(232,144), "S20109C6");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C11*), ABISELECT(232,144), "S20109C6");
    check_base_class_offset(lv, (S20109C4*)(S20109C9*), ABISELECT(96,64), "S20109C6");
    check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(112,72), "S20109C6");
    check_base_class_offset(lv, (S20109C9*)(S20109C7*), ABISELECT(96,64), "S20109C6");
    check_base_class_offset(lv, (S20109C9*)(S20109C11*), ABISELECT(96,64), "S20109C6");
    check_base_class_offset(lv, (S20109C7*), ABISELECT(48,44), "S20109C6");
    /*is_ambiguous_... S20109C6::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*), ABISELECT(248,152), "S20109C6");
    /*is_ambiguous_... S20109C11::S20109C5 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C11*), ABISELECT(264,160), "S20109C6");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C11*), ABISELECT(280,168), "S20109C6");
    check_base_class_offset(lv, (S20109C11*), ABISELECT(264,160), "S20109C6");
    check_base_class_offset(lv, (S20109C12*), 0, "S20109C6");
    check_base_class_offset(lv, (S20109C2*), ABISELECT(304,184), "S20109C6");
    set_bf_and_test(lv, s20109c6f0, ABISELECT(44,40), 0, 24, 1, "S20109C6");
    set_bf_and_test(lv, s20109c6f0, ABISELECT(44,40), 0, 24, hide_sll(1LL<<23), "S20109C6");
    test_class_info(&lv, &cd_S20109C6);
    dp->~S20109C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C6(Test_S20109C6, "S20109C6", ABISELECT(320,192));

#else // __cplusplus

extern void _ZN8S20109C6C1Ev();
extern void _ZN8S20109C6D2Ev();
Name_Map name_map_S20109C6[] = {
  NSPAIR(_ZN8S20109C6C1Ev),
  NSPAIR(_ZN8S20109C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C8;
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C7;
extern VTBL_ENTRY _ZTI8S20109C7[];
extern  VTBL_ENTRY _ZTV8S20109C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C7[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C11;
extern VTBL_ENTRY _ZTI9S20109C11[];
extern  VTBL_ENTRY _ZTV9S20109C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C11[];
extern Class_Descriptor cd_S20109C12;
extern VTBL_ENTRY _ZTI9S20109C12[];
extern  VTBL_ENTRY _ZTV9S20109C12[];
extern Class_Descriptor cd_S20109C2;
extern VTBL_ENTRY _ZTI8S20109C2[];
extern  VTBL_ENTRY _ZTV8S20109C2[];
static Base_Class bases_S20109C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C8,    ABISELECT(64,52), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20109C5,    ABISELECT(232,144), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(112,72), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(96,64), //bcp->offset
    39, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20109C7,    ABISELECT(48,44), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C4,    ABISELECT(248,152), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C5,    ABISELECT(264,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20109C4,    ABISELECT(280,168), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20109C11,    ABISELECT(264,160), //bcp->offset
    75, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20109C2,    ABISELECT(304,184), //bcp->offset
    103, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20109C6[];
extern void _ZN9S20109C123v26Ev();
extern void _ZN8S20109C6D1Ev();
extern void _ZN8S20109C6D0Ev();
extern void _ZN8S20109C63v29Ev();
extern void _ZN8S20109C63v30Ev();
extern void _ZN8S20109C63v31Ev();
extern void _ZN8S20109C63v32Ev();
extern void _ZN8S20109C63v33Ev();
extern void _ZN8S20109C63v34Ev();
extern void _ZN8S20109C63v35Ev();
extern void _ZN8S20109C73v21Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S20109C6D1Ev,_ZThn44_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S20109C6D0Ev,_ZThn44_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
extern void ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn96_N8S20109C6D1Ev,_ZThn64_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn96_N8S20109C6D0Ev,_ZThn64_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn248_N8S20109C6D1Ev,_ZThn152_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn248_N8S20109C6D0Ev,_ZThn152_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn264_N8S20109C6D1Ev,_ZThn160_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn264_N8S20109C6D0Ev,_ZThn160_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
extern void ABISELECT(_ZTvn16_n56_N8S20109C6D1Ev,_ZTvn8_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S20109C6D0Ev,_ZTvn8_n28_N8S20109C6D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
static  VTBL_ENTRY vtc_S20109C6[] = {
  ABISELECT(304,184),
  ABISELECT(264,160),
  ABISELECT(248,152),
  ABISELECT(232,144),
  ABISELECT(96,64),
  ABISELECT(64,52),
  ABISELECT(48,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN9S20109C123v26Ev,
  (VTBL_ENTRY)&_ZN8S20109C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v29Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v34Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v35Ev,
  ABISELECT(-48,-44),
  0,
  ABISELECT(184,100),
  ABISELECT(48,20),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-64),
  ABISELECT(136,80),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  0,
  0,
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  0,
  0,
  ABISELECT(-248,-152),
  ABISELECT(-16,-8),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-264,-160),
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-168,-96),
  ABISELECT(-264,-160),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
  ABISELECT(-48,-24),
  ABISELECT(-280,-168),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C6D1Ev,_ZTvn8_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C6D0Ev,_ZTvn8_n28_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  0,
  0,
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
};
extern VTBL_ENTRY _ZTV8S20109C6[];
extern void _ZN8S20109C73v21Ev();
extern void _ZN8S20109C7D1Ev();
extern void _ZN8S20109C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C7__8S20109C6[] = {
  ABISELECT(184,100),
  ABISELECT(48,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D0Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__8S20109C7__8S20109C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C7__8S20109C6[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  ABISELECT(136,80),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C7__8S20109C6[] = {
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__8S20109C7__8S20109C6[] = {
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C6[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__8S20109C6[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__8S20109C6[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__8S20109C6[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__8S20109C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C4__A1__8S20109C6[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN9S20109C11D1Ev();
extern void _ZN9S20109C11D0Ev();
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__8S20109C6[] = {
  ABISELECT(-32,-16),
  ABISELECT(-168,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__8S20109C6[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C49S20109C11__A2__8S20109C6[] = {
  0,
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__9S20109C11__8S20109C6[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,96),
  ABISELECT(136,80),
  ABISELECT(168,96),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__A1__9S20109C11__8S20109C6[] = {
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__9S20109C11__8S20109C6[] = {
  ABISELECT(152,88),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__9S20109C11__8S20109C6[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
static  VTT_ENTRY vtt_S20109C6[] = {
  {&(_ZTV8S20109C6[9]),  9,109},
  {&(_ZTV8S20109C6[26]),  26,109},
  {&(_ZTV8S20109C6[35]),  35,109},
  {&(_ZTV8S20109C6[49]),  49,109},
  {&(_ZTV8S20109C6[63]),  63,109},
  {&(_ZTV8S20109C6[58]),  58,109},
  {&(_ZTV8S20109C6[71]),  71,109},
  {&(_ZTV8S20109C6[88]),  88,109},
  {&(_ZTV8S20109C6[99]),  99,109},
  {&(_ZTV8S20109C6[107]),  107,109},
  {&(_tg__ZTV8S20109C7__8S20109C6[5]),  5,8},
  {&(_tg__ZTV8S20109C8__8S20109C7__8S20109C6[6]),  6,10},
  {&(_tg__ZTV8S20109C9__8S20109C7__8S20109C6[10]),  10,17},
  {&(_tg__ZTV8S20109C5__8S20109C7__8S20109C6[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__8S20109C7__8S20109C6[2]),  2,3},
  {&(_tg__ZTV8S20109C9__8S20109C6[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__8S20109C6[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__8S20109C6[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__8S20109C6[4]),  4,6},
  {&(_tg__ZTV8S20109C4__A1__8S20109C6[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C4__A1__8S20109C6[4]),  4,6},
  {&(_tg__ZTV9S20109C11__8S20109C6[4]),  4,12},
  {&(_tg__ZTV8S20109C49S20109C11__A2__8S20109C6[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C49S20109C11__A2__8S20109C6[4]),  4,6},
  {&(_tg__ZTV8S20109C9__9S20109C11__8S20109C6[10]),  10,17},
  {&(_tg__ZTV8S20109C5__A1__9S20109C11__8S20109C6[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__9S20109C11__8S20109C6[2]),  2,3},
  {&(_tg__ZTV8S20109C4__A1__9S20109C11__8S20109C6[3]),  3,7},
};
extern VTBL_ENTRY _ZTI8S20109C6[];
extern  VTBL_ENTRY _ZTV8S20109C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C6[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20109C6D0Ev,_ZThn152_N8S20109C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C6D0Ev,_ZThn64_N8S20109C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20109C6D1Ev,_ZThn152_N8S20109C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C6D1Ev,_ZThn64_N8S20109C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20109C6D0Ev,_ZThn160_N8S20109C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C6D0Ev,_ZThn44_N8S20109C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20109C6D1Ev,_ZThn160_N8S20109C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C6D1Ev,_ZThn44_N8S20109C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20109C6 = {  "S20109C6", // class name
  bases_S20109C6, 12,
  &(vtc_S20109C6[0]), // expected_vtbl_contents
  &(vtt_S20109C6[0]), // expected_vtt_contents
  ABISELECT(320,192), // object size
  NSPAIRA(_ZTI8S20109C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20109C6),109, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20109C6),28, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C14  : virtual S20109C5 , S20109C9 , S20109C10 , virtual S20109C8 {
  long double s20109c14f0;
  virtual void  v36(); // _ZN9S20109C143v36Ev
  virtual void  v37(); // _ZN9S20109C143v37Ev
  virtual void  v38(); // _ZN9S20109C143v38Ev
  virtual void  v39(); // _ZN9S20109C143v39Ev
  virtual void  v40(); // _ZN9S20109C143v40Ev
  ~S20109C14(); // tgen
  S20109C14(); // tgen
};
//SIG(-1 S20109C14) C1{ VBC2{ v6 v7 Fp} BC3{ VBC2 BC4{ VBC2 vd v8 v9 Fp} BC5{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} BC5 VBC6{ v14 v15 v16 v17 Fp Fc} v1 v2 v3 v4 v5 FD}


void  S20109C14 ::v36(){vfunc_called(this, "_ZN9S20109C143v36Ev");}
void  S20109C14 ::v37(){vfunc_called(this, "_ZN9S20109C143v37Ev");}
void  S20109C14 ::v38(){vfunc_called(this, "_ZN9S20109C143v38Ev");}
void  S20109C14 ::v39(){vfunc_called(this, "_ZN9S20109C143v39Ev");}
void  S20109C14 ::v40(){vfunc_called(this, "_ZN9S20109C143v40Ev");}
S20109C14 ::~S20109C14(){ note_dtor("S20109C14", this);} // tgen
S20109C14 ::S20109C14(){ note_ctor("S20109C14", this);} // tgen

static void Test_S20109C14()
{
  extern Class_Descriptor cd_S20109C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,30)];
    init_test(&cd_S20109C14, buf);
    S20109C14 *dp, &lv = *(dp=new (buf) S20109C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,116), "sizeof(S20109C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C14)");
    check_base_class_offset(lv, (S20109C5*), ABISELECT(160,96), "S20109C14");
    check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(160,96), "S20109C14");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(160,96), "S20109C14");
    check_base_class_offset(lv, (S20109C4*)(S20109C9*), 0, "S20109C14");
    check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(16,8), "S20109C14");
    check_base_class_offset(lv, (S20109C9*), 0, "S20109C14");
    /*is_ambiguous_... S20109C14::S20109C10 */ AMB_check_base_class_offset(lv, (S20109C10*), ABISELECT(136,80), "S20109C14");
    check_base_class_offset(lv, (S20109C8*), ABISELECT(176,104), "S20109C14");
    check_field_offset(lv, s20109c14f0, ABISELECT(144,84), "S20109C14.s20109c14f0");
    test_class_info(&lv, &cd_S20109C14);
    dp->~S20109C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C14(Test_S20109C14, "S20109C14", ABISELECT(208,116));

#else // __cplusplus

extern void _ZN9S20109C14C1Ev();
extern void _ZN9S20109C14D1Ev();
Name_Map name_map_S20109C14[] = {
  NSPAIR(_ZN9S20109C14C1Ev),
  NSPAIR(_ZN9S20109C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C8;
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
static Base_Class bases_S20109C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C5,    ABISELECT(160,96), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //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_S20109C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20109C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20109C10,    ABISELECT(136,80), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20109C8,    ABISELECT(176,104), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20109C14[];
extern void _ZN9S20109C14D1Ev();
extern void _ZN9S20109C14D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY vtc_S20109C14[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN9S20109C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C14D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern VTBL_ENTRY _ZTV9S20109C14[];
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__9S20109C14[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__9S20109C14[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__9S20109C14[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__9S20109C14[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
static  VTT_ENTRY vtt_S20109C14[] = {
  {&(_ZTV9S20109C14[4]),  4,38},
  {&(_tg__ZTV8S20109C9__9S20109C14[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__9S20109C14[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__9S20109C14[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__9S20109C14[4]),  4,6},
  {&(_ZTV9S20109C14[26]),  26,38},
  {&(_ZTV9S20109C14[34]),  34,38},
};
extern VTBL_ENTRY _ZTI9S20109C14[];
extern  VTBL_ENTRY _ZTV9S20109C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C14[];
Class_Descriptor cd_S20109C14 = {  "S20109C14", // class name
  bases_S20109C14, 6,
  &(vtc_S20109C14[0]), // expected_vtbl_contents
  &(vtt_S20109C14[0]), // expected_vtt_contents
  ABISELECT(208,116), // object size
  NSPAIRA(_ZTI9S20109C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20109C14),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20109C14),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C13  : virtual S20109C5 , virtual S20109C14 {
  void *s20109c13f0;
  virtual  ~S20109C13(); // _ZN9S20109C13D2Ev
  virtual void  v41(); // _ZN9S20109C133v41Ev
  virtual void  v42(); // _ZN9S20109C133v42Ev
  virtual void  v43(); // _ZN9S20109C133v43Ev
  virtual void  v44(); // _ZN9S20109C133v44Ev
  S20109C13(); // tgen
};
//SIG(-1 S20109C13) C1{ VBC2{ v5 v6 Fp} VBC3{ VBC2 BC4{ VBC2 BC5{ VBC2 vd v7 v8 Fp} BC6{ v9} vd v10 v11 v12 FL Fi Fp[8] Fi[2] FD Fi} BC6 VBC7{ v13 v14 v15 v16 Fp Fc} v17 v18 v19 v20 v21 FD} vd v1 v2 v3 v4 Fp}


 S20109C13 ::~S20109C13(){ note_dtor("S20109C13", this);}
void  S20109C13 ::v41(){vfunc_called(this, "_ZN9S20109C133v41Ev");}
void  S20109C13 ::v42(){vfunc_called(this, "_ZN9S20109C133v42Ev");}
void  S20109C13 ::v43(){vfunc_called(this, "_ZN9S20109C133v43Ev");}
void  S20109C13 ::v44(){vfunc_called(this, "_ZN9S20109C133v44Ev");}
S20109C13 ::S20109C13(){ note_ctor("S20109C13", this);} // tgen

static void Test_S20109C13()
{
  extern Class_Descriptor cd_S20109C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,32)];
    init_test(&cd_S20109C13, buf);
    S20109C13 *dp, &lv = *(dp=new (buf) S20109C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,124), "sizeof(S20109C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C13)");
    check_base_class_offset(lv, (S20109C5*), ABISELECT(16,8), "S20109C13");
    check_base_class_offset(lv, (S20109C5*)(S20109C14*), ABISELECT(16,8), "S20109C13");
    check_base_class_offset(lv, (S20109C5*)(S20109C9*)(S20109C14*), ABISELECT(16,8), "S20109C13");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*)(S20109C14*), ABISELECT(16,8), "S20109C13");
    check_base_class_offset(lv, (S20109C4*)(S20109C9*)(S20109C14*), ABISELECT(32,16), "S20109C13");
    check_base_class_offset(lv, (S20109C10*)(S20109C9*)(S20109C14*), ABISELECT(48,24), "S20109C13");
    check_base_class_offset(lv, (S20109C9*)(S20109C14*), ABISELECT(32,16), "S20109C13");
    /*is_ambiguous_... S20109C14::S20109C10 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C14*), ABISELECT(168,96), "S20109C13");
    check_base_class_offset(lv, (S20109C8*)(S20109C14*), ABISELECT(192,112), "S20109C13");
    check_base_class_offset(lv, (S20109C14*), ABISELECT(32,16), "S20109C13");
    check_field_offset(lv, s20109c13f0, ABISELECT(8,4), "S20109C13.s20109c13f0");
    test_class_info(&lv, &cd_S20109C13);
    dp->~S20109C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C13(Test_S20109C13, "S20109C13", ABISELECT(224,124));

#else // __cplusplus

extern void _ZN9S20109C13C1Ev();
extern void _ZN9S20109C13D2Ev();
Name_Map name_map_S20109C13[] = {
  NSPAIR(_ZN9S20109C13C1Ev),
  NSPAIR(_ZN9S20109C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C8;
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
extern Class_Descriptor cd_S20109C14;
extern VTBL_ENTRY _ZTI9S20109C14[];
extern  VTBL_ENTRY _ZTV9S20109C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C14[];
static Base_Class bases_S20109C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C5,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(48,24), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(168,96), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20109C8,    ABISELECT(192,112), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20109C14,    ABISELECT(32,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //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 _ZTI9S20109C13[];
extern void _ZN9S20109C13D1Ev();
extern void _ZN9S20109C13D0Ev();
extern void _ZN9S20109C133v41Ev();
extern void _ZN9S20109C133v42Ev();
extern void _ZN9S20109C133v43Ev();
extern void _ZN9S20109C133v44Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S20109C13D1Ev,_ZThn16_N9S20109C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S20109C13D0Ev,_ZThn16_N9S20109C13D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY vtc_S20109C13[] = {
  ABISELECT(192,112),
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v41Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v42Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v43Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v44Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern VTBL_ENTRY _ZTV9S20109C13[];
extern void _ZN9S20109C14D1Ev();
extern void _ZN9S20109C14D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C14__9S20109C13[] = {
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN9S20109C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C14D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C99S20109C14__9S20109C13[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C99S20109C14__9S20109C13[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C99S20109C14__9S20109C13[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C99S20109C14__9S20109C13[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__9S20109C14__9S20109C13[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__9S20109C14__9S20109C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
static  VTT_ENTRY vtt_S20109C13[] = {
  {&(_ZTV9S20109C13[5]),  5,61},
  {&(_ZTV9S20109C13[15]),  15,61},
  {&(_ZTV9S20109C13[33]),  33,61},
  {&(_ZTV9S20109C13[47]),  47,61},
  {&(_ZTV9S20109C13[50]),  50,61},
  {&(_ZTV9S20109C13[57]),  57,61},
  {&(_tg__ZTV9S20109C14__9S20109C13[4]),  4,16},
  {&(_tg__ZTV8S20109C99S20109C14__9S20109C13[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C99S20109C14__9S20109C13[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C99S20109C14__9S20109C13[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C99S20109C14__9S20109C13[4]),  4,6},
  {&(_tg__ZTV8S20109C5__9S20109C14__9S20109C13[4]),  4,6},
  {&(_tg__ZTV8S20109C8__9S20109C14__9S20109C13[6]),  6,10},
};
extern VTBL_ENTRY _ZTI9S20109C13[];
extern  VTBL_ENTRY _ZTV9S20109C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C13[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20109C13D0Ev,_ZThn16_N9S20109C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20109C13D1Ev,_ZThn16_N9S20109C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20109C13 = {  "S20109C13", // class name
  bases_S20109C13, 7,
  &(vtc_S20109C13[0]), // expected_vtbl_contents
  &(vtt_S20109C13[0]), // expected_vtt_contents
  ABISELECT(224,124), // object size
  NSPAIRA(_ZTI9S20109C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20109C13),61, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20109C13),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C3  : virtual S20109C4 , S20109C6 , S20109C13 {
  virtual  ~S20109C3(); // _ZN8S20109C3D2Ev
  virtual void  v45(); // _ZN8S20109C33v45Ev
  virtual void  v46(); // _ZN8S20109C33v46Ev
  virtual void  v47(); // _ZN8S20109C33v47Ev
  virtual void  v48(); // _ZN8S20109C33v48Ev
  virtual void  v49(); // _ZN8S20109C33v49Ev
  S20109C3(); // tgen
};
//SIG(-1 S20109C3) C1{ VBC2{ VBC3{ v6 v7 Fp} vd v8 v9 Fp} BC4{ VBC5{ VBC6{ v10 v11 v12 v13 Fp Fc} VBC7{ VBC3 BC2 BC8{ v14} vd v15 v16 v17 FL Fi Fp[8] Fi[2] FD Fi} v18 Fi:4} VBC2 VBC9{ BC3 VBC7 BC2 vd v19 v20 v21 v22 Fc Fi} BC10{ v23 Fi[9]} VBC11{ v24 v25 Fp} vd v26 v27 v28 v29 v30 v31 v32 Fi:24} BC12{ VBC3 VBC13{ VBC3 BC7 BC8 VBC6 v33 v34 v35 v36 v37 FD} vd v38 v39 v40 v41 Fp} vd v1 v2 v3 v4 v5}


 S20109C3 ::~S20109C3(){ note_dtor("S20109C3", this);}
void  S20109C3 ::v45(){vfunc_called(this, "_ZN8S20109C33v45Ev");}
void  S20109C3 ::v46(){vfunc_called(this, "_ZN8S20109C33v46Ev");}
void  S20109C3 ::v47(){vfunc_called(this, "_ZN8S20109C33v47Ev");}
void  S20109C3 ::v48(){vfunc_called(this, "_ZN8S20109C33v48Ev");}
void  S20109C3 ::v49(){vfunc_called(this, "_ZN8S20109C33v49Ev");}
S20109C3 ::S20109C3(){ note_ctor("S20109C3", this);} // tgen

static void Test_S20109C3()
{
  extern Class_Descriptor cd_S20109C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,75)];
    init_test(&cd_S20109C3, buf);
    S20109C3 *dp, &lv = *(dp=new (buf) S20109C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,296), "sizeof(S20109C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C3)");
    /*is_ambiguous_... S20109C3::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*), ABISELECT(80,60), "S20109C3");
    /*is_ambiguous_... S20109C3::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(80,60), "S20109C3");
    /*is_ambiguous_... S20109C3::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(80,60), "S20109C3");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C11*), ABISELECT(80,60), "S20109C3");
    check_base_class_offset(lv, (S20109C5*)(S20109C13*), ABISELECT(80,60), "S20109C3");
    check_base_class_offset(lv, (S20109C5*)(S20109C14*), ABISELECT(80,60), "S20109C3");
    check_base_class_offset(lv, (S20109C5*)(S20109C9*)(S20109C14*), ABISELECT(80,60), "S20109C3");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*)(S20109C14*), ABISELECT(80,60), "S20109C3");
    /*is_ambiguous_... S20109C3::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*), ABISELECT(64,52), "S20109C3");
    /*is_ambiguous_... S20109C6::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C6*), ABISELECT(64,52), "S20109C3");
    check_base_class_offset(lv, (S20109C8*)(S20109C7*), ABISELECT(112,76), "S20109C3");
    check_base_class_offset(lv, (S20109C8*)(S20109C14*), ABISELECT(112,76), "S20109C3");
    /*is_ambiguous_... S20109C3::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C9*), ABISELECT(144,88), "S20109C3");
    /*is_ambiguous_... S20109C3::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(160,96), "S20109C3");
    check_base_class_offset(lv, (S20109C9*)(S20109C7*), ABISELECT(144,88), "S20109C3");
    check_base_class_offset(lv, (S20109C9*)(S20109C11*), ABISELECT(144,88), "S20109C3");
    check_base_class_offset(lv, (S20109C7*)(S20109C6*), ABISELECT(96,68), "S20109C3");
    /*is_ambiguous_... S20109C11::S20109C5 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C11*), ABISELECT(280,168), "S20109C3");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C11*), ABISELECT(296,176), "S20109C3");
    check_base_class_offset(lv, (S20109C11*)(S20109C6*), ABISELECT(280,168), "S20109C3");
    check_base_class_offset(lv, (S20109C12*)(S20109C6*), 0, "S20109C3");
    check_base_class_offset(lv, (S20109C2*)(S20109C6*), ABISELECT(320,192), "S20109C3");
    check_base_class_offset(lv, (S20109C6*), 0, "S20109C3");
    check_base_class_offset(lv, (S20109C4*)(S20109C9*)(S20109C14*), ABISELECT(336,200), "S20109C3");
    check_base_class_offset(lv, (S20109C10*)(S20109C9*)(S20109C14*), ABISELECT(352,208), "S20109C3");
    check_base_class_offset(lv, (S20109C9*)(S20109C14*), ABISELECT(336,200), "S20109C3");
    /*is_ambiguous_... S20109C14::S20109C10 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C14*), ABISELECT(472,280), "S20109C3");
    check_base_class_offset(lv, (S20109C14*)(S20109C13*), ABISELECT(336,200), "S20109C3");
    check_base_class_offset(lv, (S20109C13*), ABISELECT(48,44), "S20109C3");
    test_class_info(&lv, &cd_S20109C3);
    dp->~S20109C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C3(Test_S20109C3, "S20109C3", ABISELECT(496,296));

#else // __cplusplus

extern void _ZN8S20109C3C1Ev();
extern void _ZN8S20109C3D2Ev();
Name_Map name_map_S20109C3[] = {
  NSPAIR(_ZN8S20109C3C1Ev),
  NSPAIR(_ZN8S20109C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C8;
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C7;
extern VTBL_ENTRY _ZTI8S20109C7[];
extern  VTBL_ENTRY _ZTV8S20109C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C7[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C11;
extern VTBL_ENTRY _ZTI9S20109C11[];
extern  VTBL_ENTRY _ZTV9S20109C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C11[];
extern Class_Descriptor cd_S20109C12;
extern VTBL_ENTRY _ZTI9S20109C12[];
extern  VTBL_ENTRY _ZTV9S20109C12[];
extern Class_Descriptor cd_S20109C2;
extern VTBL_ENTRY _ZTI8S20109C2[];
extern  VTBL_ENTRY _ZTV8S20109C2[];
extern Class_Descriptor cd_S20109C6;
extern VTBL_ENTRY _ZTI8S20109C6[];
extern  VTBL_ENTRY _ZTV8S20109C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C6[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C14;
extern VTBL_ENTRY _ZTI9S20109C14[];
extern  VTBL_ENTRY _ZTV9S20109C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C14[];
extern Class_Descriptor cd_S20109C13;
extern VTBL_ENTRY _ZTI9S20109C13[];
extern  VTBL_ENTRY _ZTV9S20109C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C13[];
static Base_Class bases_S20109C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C5,    ABISELECT(80,60), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(64,52), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C8,    ABISELECT(112,76), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(144,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(160,96), //bcp->offset
    89, //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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(144,88), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20109C7,    ABISELECT(96,68), //bcp->offset
    52, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20109C5,    ABISELECT(280,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20109C4,    ABISELECT(296,176), //bcp->offset
    113, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20109C11,    ABISELECT(280,168), //bcp->offset
    92, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20109C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S20109C2,    ABISELECT(320,192), //bcp->offset
    120, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20109C6,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20109C4,    ABISELECT(336,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(352,208), //bcp->offset
    154, //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
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(336,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(472,280), //bcp->offset
    157, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20109C14,    ABISELECT(336,200), //bcp->offset
    126, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20109C13,    ABISELECT(48,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20109C3[];
extern void _ZN9S20109C123v26Ev();
extern void _ZN8S20109C3D1Ev();
extern void _ZN8S20109C3D0Ev();
extern void _ZN8S20109C63v29Ev();
extern void _ZN8S20109C63v30Ev();
extern void _ZN8S20109C63v31Ev();
extern void _ZN8S20109C63v32Ev();
extern void _ZN8S20109C63v33Ev();
extern void _ZN8S20109C63v34Ev();
extern void _ZN8S20109C63v35Ev();
extern void _ZN8S20109C33v45Ev();
extern void _ZN8S20109C33v46Ev();
extern void _ZN8S20109C33v47Ev();
extern void _ZN8S20109C33v48Ev();
extern void _ZN8S20109C33v49Ev();
extern void ABISELECT(_ZThn48_N8S20109C3D1Ev,_ZThn44_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20109C3D0Ev,_ZThn44_N8S20109C3D0Ev)();
extern void _ZN9S20109C133v41Ev();
extern void _ZN9S20109C133v42Ev();
extern void _ZN9S20109C133v43Ev();
extern void _ZN9S20109C133v44Ev();
extern void ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20109C3D1Ev,_ZThn52_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20109C3D0Ev,_ZThn52_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN8S20109C73v21Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S20109C3D1Ev,_ZThn68_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S20109C3D0Ev,_ZThn68_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
extern void ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn144_N8S20109C3D1Ev,_ZThn88_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn144_N8S20109C3D0Ev,_ZThn88_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn280_N8S20109C3D1Ev,_ZThn168_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn280_N8S20109C3D0Ev,_ZThn168_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
extern void ABISELECT(_ZTvn16_n56_N8S20109C3D1Ev,_ZTvn8_n28_N8S20109C3D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S20109C3D0Ev,_ZTvn8_n28_N8S20109C3D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
extern void ABISELECT(_ZTv0_n40_N8S20109C3D1Ev,_ZTv0_n20_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn336_N8S20109C3D1Ev,_ZThn200_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20109C3D0Ev,_ZTv0_n20_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn336_N8S20109C3D0Ev,_ZThn200_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY vtc_S20109C3[] = {
  ABISELECT(336,200),
  ABISELECT(320,192),
  ABISELECT(280,168),
  ABISELECT(64,52),
  ABISELECT(80,60),
  ABISELECT(144,88),
  ABISELECT(112,76),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C123v26Ev,
  (VTBL_ENTRY)&_ZN8S20109C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v29Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v34Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v35Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v45Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v46Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v47Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v48Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v49Ev,
  ABISELECT(64,32),
  ABISELECT(288,156),
  ABISELECT(32,16),
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S20109C3D1Ev,_ZThn44_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S20109C3D0Ev,_ZThn44_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C133v41Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v42Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v43Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v44Ev,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(16,8),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  0,
  0,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  ABISELECT(-96,-68),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,20),
  ABISELECT(16,8),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(-64,-28),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-280,-168),
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-136,-80),
  ABISELECT(-280,-168),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
  ABISELECT(-216,-116),
  ABISELECT(-296,-176),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C3D1Ev,_ZTvn8_n28_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C3D0Ev,_ZTvn8_n28_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  0,
  0,
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-200),
  ABISELECT(-224,-124),
  ABISELECT(-256,-140),
  ABISELECT(-336,-200),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20109C3D1Ev,_ZTv0_n20_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20109C3D0Ev,_ZTv0_n20_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
  ABISELECT(-352,-208),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  ABISELECT(-472,-280),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S20109C3[];
extern void _ZN9S20109C123v26Ev();
extern void _ZN8S20109C6D1Ev();
extern void _ZN8S20109C6D0Ev();
extern void _ZN8S20109C63v29Ev();
extern void _ZN8S20109C63v30Ev();
extern void _ZN8S20109C63v31Ev();
extern void _ZN8S20109C63v32Ev();
extern void _ZN8S20109C63v33Ev();
extern void _ZN8S20109C63v34Ev();
extern void _ZN8S20109C63v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C6__8S20109C3[] = {
  ABISELECT(320,192),
  ABISELECT(280,168),
  ABISELECT(64,52),
  ABISELECT(80,60),
  ABISELECT(144,88),
  ABISELECT(112,76),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN9S20109C123v26Ev,
  (VTBL_ENTRY)&_ZN8S20109C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v29Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v34Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v35Ev,
};
extern void _ZN8S20109C73v21Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn96_N8S20109C6D1Ev,_ZThn68_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn96_N8S20109C6D0Ev,_ZThn68_N8S20109C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20109C7__8S20109C6__8S20109C3[] = {
  ABISELECT(-96,-68),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,20),
  ABISELECT(16,8),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev),
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__8S20109C6__8S20109C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn144_N8S20109C6D1Ev,_ZThn88_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn144_N8S20109C6D0Ev,_ZThn88_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C6__8S20109C3[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(-64,-28),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C6__8S20109C3[] = {
  0,
  0,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__8S20109C6__8S20109C3[] = {
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S20109C6D1Ev,_ZThn52_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S20109C6D0Ev,_ZThn52_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__8S20109C6__8S20109C3[] = {
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(16,8),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn280_N8S20109C6D1Ev,_ZThn168_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn280_N8S20109C6D0Ev,_ZThn168_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__8S20109C6__8S20109C3[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-280,-168),
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-136,-80),
  ABISELECT(-280,-168),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S20109C6D1Ev,_ZTvn8_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S20109C6D0Ev,_ZTvn8_n28_N8S20109C6D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__8S20109C6__8S20109C3[] = {
  ABISELECT(-216,-116),
  ABISELECT(-296,-176),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C6D1Ev,_ZTvn8_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C6D0Ev,_ZTvn8_n28_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C2__8S20109C6__8S20109C3[] = {
  0,
  0,
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
};
extern void _ZN9S20109C13D1Ev();
extern void _ZN9S20109C13D0Ev();
extern void _ZN9S20109C133v41Ev();
extern void _ZN9S20109C133v42Ev();
extern void _ZN9S20109C133v43Ev();
extern void _ZN9S20109C133v44Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C13__8S20109C3[] = {
  ABISELECT(64,32),
  ABISELECT(288,156),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v41Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v42Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v43Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v44Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__9S20109C13__8S20109C3[] = {
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev)();
extern void ABISELECT(_ZThn288_N9S20109C13D1Ev,_ZThn156_N9S20109C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev)();
extern void ABISELECT(_ZThn288_N9S20109C13D0Ev,_ZThn156_N9S20109C13D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C14__9S20109C13__8S20109C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-156),
  ABISELECT(-224,-124),
  ABISELECT(-256,-140),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C99S20109C14__9S20109C13__8S20109C3[] = {
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C109S20109C14__A1__9S20109C13__8S20109C3[] = {
  ABISELECT(-424,-236),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__9S20109C13__8S20109C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__8S20109C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C4__8S20109C3[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C73v21Ev();
extern void _ZN8S20109C7D1Ev();
extern void _ZN8S20109C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C7__8S20109C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D0Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__8S20109C7__8S20109C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C7__8S20109C3[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  ABISELECT(-64,-28),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C7__8S20109C3[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__8S20109C7__8S20109C3[] = {
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C3[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__A1__8S20109C3[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__A1__8S20109C3[] = {
  0,
  0,
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__8S20109C3[] = {
  0,
  0,
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN9S20109C11D1Ev();
extern void _ZN9S20109C11D0Ev();
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__8S20109C3[] = {
  ABISELECT(-200,-108),
  ABISELECT(-136,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__8S20109C3[] = {
  ABISELECT(-216,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C49S20109C11__A2__8S20109C3[] = {
  0,
  0,
  ABISELECT(216,116),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__9S20109C11__8S20109C3[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(136,80),
  ABISELECT(-64,-28),
  ABISELECT(136,80),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__A1__9S20109C11__8S20109C3[] = {
  0,
  0,
  ABISELECT(200,108),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__9S20109C11__8S20109C3[] = {
  ABISELECT(120,72),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__9S20109C11__8S20109C3[] = {
  ABISELECT(-216,-116),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN9S20109C14D1Ev();
extern void _ZN9S20109C14D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C14__8S20109C3[] = {
  ABISELECT(-224,-124),
  ABISELECT(-256,-140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN9S20109C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C14D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C99S20109C14__A1__8S20109C3[] = {
  ABISELECT(-256,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C99S20109C14__A3__8S20109C3[] = {
  ABISELECT(-256,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C99S20109C14__A3__8S20109C3[] = {
  0,
  0,
  ABISELECT(256,140),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C99S20109C14__A1__8S20109C3[] = {
  0,
  0,
  ABISELECT(256,140),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__9S20109C14__8S20109C3[] = {
  0,
  0,
  ABISELECT(256,140),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__9S20109C14__8S20109C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(224,124),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
static  VTT_ENTRY vtt_S20109C3[] = {
  {&(_ZTV8S20109C3[10]),  10,160},
  {&(_tg__ZTV8S20109C6__8S20109C3[9]),  9,19},
  {&(_tg__ZTV8S20109C7__8S20109C6__8S20109C3[7]),  7,10},
  {&(_tg__ZTV8S20109C8__8S20109C6__8S20109C3[6]),  6,10},
  {&(_tg__ZTV8S20109C9__8S20109C6__8S20109C3[10]),  10,17},
  {&(_tg__ZTV8S20109C5__8S20109C6__8S20109C3[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__8S20109C6__8S20109C3[2]),  2,3},
  {&(_tg__ZTV8S20109C4__A1__8S20109C6__8S20109C3[6]),  6,10},
  {&(_tg__ZTV9S20109C11__8S20109C6__8S20109C3[13]),  13,21},
  {&(_tg__ZTV8S20109C49S20109C11__A2__8S20109C6__8S20109C3[3]),  3,7},
  {&(_tg__ZTV8S20109C2__8S20109C6__8S20109C3[4]),  4,6},
  {&(_tg__ZTV9S20109C13__8S20109C3[5]),  5,11},
  {&(_tg__ZTV8S20109C5__9S20109C13__8S20109C3[4]),  4,6},
  {&(_tg__ZTV9S20109C14__9S20109C13__8S20109C3[16]),  16,28},
  {&(_tg__ZTV9S20109C108S20109C99S20109C14__9S20109C13__8S20109C3[2]),  2,3},
  {&(_tg__ZTV9S20109C109S20109C14__A1__9S20109C13__8S20109C3[2]),  2,3},
  {&(_tg__ZTV8S20109C8__9S20109C13__8S20109C3[6]),  6,10},
  {&(_ZTV8S20109C3[42]),  42,160},
  {&(_ZTV8S20109C3[50]),  50,160},
  {&(_ZTV8S20109C3[59]),  59,160},
  {&(_ZTV8S20109C3[68]),  68,160},
  {&(_ZTV8S20109C3[82]),  82,160},
  {&(_ZTV8S20109C3[91]),  91,160},
  {&(_ZTV8S20109C3[105]),  105,160},
  {&(_ZTV8S20109C3[116]),  116,160},
  {&(_ZTV8S20109C3[124]),  124,160},
  {&(_ZTV8S20109C3[30]),  30,160},
  {&(_ZTV8S20109C3[142]),  142,160},
  {&(_ZTV8S20109C3[156]),  156,160},
  {&(_ZTV8S20109C3[159]),  159,160},
  {&(_tg__ZTV8S20109C4__8S20109C3[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C4__8S20109C3[4]),  4,6},
  {&(_tg__ZTV8S20109C7__8S20109C3[5]),  5,8},
  {&(_tg__ZTV8S20109C8__8S20109C7__8S20109C3[6]),  6,10},
  {&(_tg__ZTV8S20109C9__8S20109C7__8S20109C3[10]),  10,17},
  {&(_tg__ZTV8S20109C5__8S20109C7__8S20109C3[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__8S20109C7__8S20109C3[2]),  2,3},
  {&(_tg__ZTV8S20109C9__8S20109C3[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__A1__8S20109C3[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__A1__8S20109C3[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__8S20109C3[4]),  4,6},
  {&(_tg__ZTV9S20109C11__8S20109C3[4]),  4,12},
  {&(_tg__ZTV8S20109C49S20109C11__A2__8S20109C3[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C49S20109C11__A2__8S20109C3[4]),  4,6},
  {&(_tg__ZTV8S20109C9__9S20109C11__8S20109C3[10]),  10,17},
  {&(_tg__ZTV8S20109C5__A1__9S20109C11__8S20109C3[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__9S20109C11__8S20109C3[2]),  2,3},
  {&(_tg__ZTV8S20109C4__A1__9S20109C11__8S20109C3[3]),  3,7},
  {&(_tg__ZTV9S20109C14__8S20109C3[4]),  4,16},
  {&(_tg__ZTV8S20109C99S20109C14__A1__8S20109C3[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C99S20109C14__A3__8S20109C3[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C99S20109C14__A3__8S20109C3[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C99S20109C14__A1__8S20109C3[4]),  4,6},
  {&(_tg__ZTV8S20109C5__9S20109C14__8S20109C3[4]),  4,6},
  {&(_tg__ZTV8S20109C8__9S20109C14__8S20109C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20109C3[];
extern  VTBL_ENTRY _ZTV8S20109C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C3[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20109C13D0Ev,_ZThn156_N9S20109C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20109C13D1Ev,_ZThn156_N9S20109C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C6D0Ev,_ZThn52_N8S20109C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20109C6D0Ev,_ZThn88_N8S20109C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C6D1Ev,_ZThn52_N8S20109C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20109C6D1Ev,_ZThn88_N8S20109C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20109C6D0Ev,_ZThn168_N8S20109C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C6D0Ev,_ZThn68_N8S20109C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20109C6D1Ev,_ZThn168_N8S20109C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C6D1Ev,_ZThn68_N8S20109C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20109C3D0Ev,_ZTv0_n20_N8S20109C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20109C3D0Ev,_ZThn200_N8S20109C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20109C3D1Ev,_ZTv0_n20_N8S20109C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20109C3D1Ev,_ZThn200_N8S20109C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20109C3D0Ev,_ZThn168_N8S20109C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C3D0Ev,_ZThn68_N8S20109C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20109C3D1Ev,_ZThn168_N8S20109C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C3D1Ev,_ZThn68_N8S20109C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20109C3D0Ev,_ZThn88_N8S20109C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C3D0Ev,_ZThn52_N8S20109C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20109C3D1Ev,_ZThn88_N8S20109C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C3D1Ev,_ZThn52_N8S20109C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20109C3 = {  "S20109C3", // class name
  bases_S20109C3, 19,
  &(vtc_S20109C3[0]), // expected_vtbl_contents
  &(vtt_S20109C3[0]), // expected_vtt_contents
  ABISELECT(496,296), // object size
  NSPAIRA(_ZTI8S20109C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20109C3),160, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20109C3),55, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C15  : S20109C9 , virtual S20109C8 , virtual S20109C2 , virtual S20109C11 {
  virtual  ~S20109C15(); // _ZN9S20109C15D2Ev
  virtual void  v50(); // _ZN9S20109C153v50Ev
  virtual void  v51(); // _ZN9S20109C153v51Ev
  virtual void  v52(); // _ZN9S20109C153v52Ev
  S20109C15(); // tgen
};
//SIG(-1 S20109C15) C1{ BC2{ VBC3{ v4 v5 Fp} BC4{ VBC3 vd v6 v7 Fp} BC5{ v8} vd v9 v10 v11 FL Fi Fp[8] Fi[2] FD Fi} VBC6{ v12 v13 v14 v15 Fp Fc} VBC7{ v16 v17 Fp} VBC8{ BC3 VBC2 BC4 vd v18 v19 v20 v21 Fc Fi} vd v1 v2 v3}


 S20109C15 ::~S20109C15(){ note_dtor("S20109C15", this);}
void  S20109C15 ::v50(){vfunc_called(this, "_ZN9S20109C153v50Ev");}
void  S20109C15 ::v51(){vfunc_called(this, "_ZN9S20109C153v51Ev");}
void  S20109C15 ::v52(){vfunc_called(this, "_ZN9S20109C153v52Ev");}
S20109C15 ::S20109C15(){ note_ctor("S20109C15", this);} // tgen

static void Test_S20109C15()
{
  extern Class_Descriptor cd_S20109C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,54)];
    init_test(&cd_S20109C15, buf);
    S20109C15 *dp, &lv = *(dp=new (buf) S20109C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,212), "sizeof(S20109C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C15)");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(136,80), "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(136,80), "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(136,80), "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(136,80), "S20109C15");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C11*), ABISELECT(136,80), "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C9*), 0, "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(16,8), "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C9*), 0, "S20109C15");
    check_base_class_offset(lv, (S20109C8*), ABISELECT(152,88), "S20109C15");
    check_base_class_offset(lv, (S20109C2*), ABISELECT(176,100), "S20109C15");
    /*is_ambiguous_... S20109C11::S20109C5 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C11*), ABISELECT(192,108), "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C9*), ABISELECT(240,132), "S20109C15");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(256,140), "S20109C15");
    check_base_class_offset(lv, (S20109C9*)(S20109C11*), ABISELECT(240,132), "S20109C15");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C11*), ABISELECT(208,116), "S20109C15");
    check_base_class_offset(lv, (S20109C11*), ABISELECT(192,108), "S20109C15");
    test_class_info(&lv, &cd_S20109C15);
    dp->~S20109C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C15(Test_S20109C15, "S20109C15", ABISELECT(384,212));

#else // __cplusplus

extern void _ZN9S20109C15C1Ev();
extern void _ZN9S20109C15D2Ev();
Name_Map name_map_S20109C15[] = {
  NSPAIR(_ZN9S20109C15C1Ev),
  NSPAIR(_ZN9S20109C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C8;
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
extern Class_Descriptor cd_S20109C2;
extern VTBL_ENTRY _ZTI8S20109C2[];
extern  VTBL_ENTRY _ZTV8S20109C2[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C11;
extern VTBL_ENTRY _ZTI9S20109C11[];
extern  VTBL_ENTRY _ZTV9S20109C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C11[];
static Base_Class bases_S20109C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C5,    ABISELECT(136,80), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20109C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20109C9,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20109C8,    ABISELECT(152,88), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C2,    ABISELECT(176,100), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C5,    ABISELECT(192,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20109C4,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(256,140), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(240,132), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(208,116), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20109C11,    ABISELECT(192,108), //bcp->offset
    42, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20109C15[];
extern void _ZN9S20109C15D1Ev();
extern void _ZN9S20109C15D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C153v50Ev();
extern void _ZN9S20109C153v51Ev();
extern void _ZN9S20109C153v52Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N9S20109C15D1Ev,_ZTv0_n28_N9S20109C15D1Ev)();
extern void ABISELECT(_ZThn192_N9S20109C15D1Ev,_ZThn108_N9S20109C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20109C15D0Ev,_ZTv0_n28_N9S20109C15D0Ev)();
extern void ABISELECT(_ZThn192_N9S20109C15D0Ev,_ZThn108_N9S20109C15D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
extern void ABISELECT(_ZTvn16_n56_N9S20109C15D1Ev,_ZTvn8_n28_N9S20109C15D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N9S20109C15D0Ev,_ZTvn8_n28_N9S20109C15D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void ABISELECT(_ZTv0_n32_N9S20109C15D1Ev,_ZTv0_n16_N9S20109C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S20109C15D1Ev,_ZThn132_N9S20109C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20109C15D0Ev,_ZTv0_n16_N9S20109C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S20109C15D0Ev,_ZThn132_N9S20109C15D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY vtc_S20109C15[] = {
  ABISELECT(240,132),
  ABISELECT(192,108),
  ABISELECT(176,100),
  ABISELECT(152,88),
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN9S20109C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C15D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v50Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v51Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v52Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-108),
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(48,24),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20109C15D1Ev,_ZTv0_n28_N9S20109C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20109C15D0Ev,_ZTv0_n28_N9S20109C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
  ABISELECT(-72,-36),
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S20109C15D1Ev,_ZTvn8_n28_N9S20109C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S20109C15D0Ev,_ZTvn8_n28_N9S20109C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-104,-52),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C15D1Ev,_ZTv0_n16_N9S20109C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C15D0Ev,_ZTv0_n16_N9S20109C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern VTBL_ENTRY _ZTV9S20109C15[];
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__A__9S20109C15[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__9S20109C15[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__9S20109C15[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__A__9S20109C15[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN9S20109C11D1Ev();
extern void _ZN9S20109C11D0Ev();
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__9S20109C15[] = {
  ABISELECT(-56,-28),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__9S20109C15[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C49S20109C11__A2__9S20109C15[] = {
  0,
  0,
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev)();
extern void ABISELECT(_ZThn48_N9S20109C11D1Ev,_ZThn24_N9S20109C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev)();
extern void ABISELECT(_ZThn48_N9S20109C11D0Ev,_ZThn24_N9S20109C11D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__9S20109C11__9S20109C15[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-104,-52),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__A1__9S20109C11__9S20109C15[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__9S20109C11__9S20109C15[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__9S20109C11__9S20109C15[] = {
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__A1__9S20109C15[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__A1__9S20109C15[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__A1__9S20109C15[] = {
  0,
  0,
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__A1__9S20109C15[] = {
  0,
  0,
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
static  VTT_ENTRY vtt_S20109C15[] = {
  {&(_ZTV9S20109C15[7]),  7,90},
  {&(_tg__ZTV8S20109C9__A__9S20109C15[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__9S20109C15[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__9S20109C15[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__A__9S20109C15[4]),  4,6},
  {&(_ZTV9S20109C15[24]),  24,90},
  {&(_ZTV9S20109C15[32]),  32,90},
  {&(_ZTV9S20109C15[40]),  40,90},
  {&(_ZTV9S20109C15[55]),  55,90},
  {&(_ZTV9S20109C15[80]),  80,90},
  {&(_ZTV9S20109C15[89]),  89,90},
  {&(_ZTV9S20109C15[66]),  66,90},
  {&(_tg__ZTV9S20109C11__9S20109C15[4]),  4,12},
  {&(_tg__ZTV8S20109C49S20109C11__A2__9S20109C15[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C49S20109C11__A2__9S20109C15[4]),  4,6},
  {&(_tg__ZTV8S20109C9__9S20109C11__9S20109C15[10]),  10,17},
  {&(_tg__ZTV8S20109C5__A1__9S20109C11__9S20109C15[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__9S20109C11__9S20109C15[2]),  2,3},
  {&(_tg__ZTV8S20109C4__A1__9S20109C11__9S20109C15[3]),  3,7},
  {&(_tg__ZTV8S20109C9__A1__9S20109C15[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__A1__9S20109C15[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__A1__9S20109C15[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__A1__9S20109C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20109C15[];
extern  VTBL_ENTRY _ZTV9S20109C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C15[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20109C11D0Ev,_ZThn24_N9S20109C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20109C11D1Ev,_ZThn24_N9S20109C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C15D0Ev,_ZTv0_n16_N9S20109C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20109C15D0Ev,_ZThn132_N9S20109C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C15D1Ev,_ZTv0_n16_N9S20109C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20109C15D1Ev,_ZThn132_N9S20109C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20109C15D0Ev,_ZTv0_n28_N9S20109C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20109C15D0Ev,_ZThn108_N9S20109C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20109C15D1Ev,_ZTv0_n28_N9S20109C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20109C15D1Ev,_ZThn108_N9S20109C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20109C15 = {  "S20109C15", // class name
  bases_S20109C15, 12,
  &(vtc_S20109C15[0]), // expected_vtbl_contents
  &(vtt_S20109C15[0]), // expected_vtt_contents
  ABISELECT(384,212), // object size
  NSPAIRA(_ZTI9S20109C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20109C15),90, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20109C15),23, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20109C1  : virtual S20109C2 , virtual S20109C3 , S20109C15 , S20109C4 {
  virtual void  v1(); // _ZN8S20109C12v1Ev
  virtual void  v2(); // _ZN8S20109C12v2Ev
  virtual void  v3(); // _ZN8S20109C12v3Ev
  virtual void  v4(); // _ZN8S20109C12v4Ev
  virtual void  v5(); // _ZN8S20109C12v5Ev
  virtual void  v6(); // _ZN8S20109C12v6Ev
  virtual void  v7(); // _ZN8S20109C12v7Ev
  virtual void  v8(); // _ZN8S20109C12v8Ev
  ~S20109C1(); // tgen
  S20109C1(); // tgen
};
//SIG(1 S20109C1) C1{ VBC2{ v9 v10 Fp} VBC3{ VBC4{ VBC5{ v11 v12 Fp} vd v13 v14 Fp} BC6{ VBC7{ VBC8{ v15 v16 v17 v18 Fp Fc} VBC9{ VBC5 BC4 BC10{ v19} vd v20 v21 v22 FL Fi Fp[8] Fi[2] FD Fi} v23 Fi:4} VBC4 VBC11{ BC5 VBC9 BC4 vd v24 v25 v26 v27 Fc Fi} BC12{ v28 Fi[9]} VBC2 vd v29 v30 v31 v32 v33 v34 v35 Fi:24} BC13{ VBC5 VBC14{ VBC5 BC9 BC10 VBC8 v36 v37 v38 v39 v40 FD} vd v41 v42 v43 v44 Fp} vd v45 v46 v47 v48 v49} BC15{ BC9 VBC8 VBC2 VBC11 vd v50 v51 v52} BC4 v1 v2 v3 v4 v5 v6 v7 v8}


void  S20109C1 ::v1(){vfunc_called(this, "_ZN8S20109C12v1Ev");}
void  S20109C1 ::v2(){vfunc_called(this, "_ZN8S20109C12v2Ev");}
void  S20109C1 ::v3(){vfunc_called(this, "_ZN8S20109C12v3Ev");}
void  S20109C1 ::v4(){vfunc_called(this, "_ZN8S20109C12v4Ev");}
void  S20109C1 ::v5(){vfunc_called(this, "_ZN8S20109C12v5Ev");}
void  S20109C1 ::v6(){vfunc_called(this, "_ZN8S20109C12v6Ev");}
void  S20109C1 ::v7(){vfunc_called(this, "_ZN8S20109C12v7Ev");}
void  S20109C1 ::v8(){vfunc_called(this, "_ZN8S20109C12v8Ev");}
S20109C1 ::~S20109C1(){ note_dtor("S20109C1", this);} // tgen
S20109C1 ::S20109C1(){ note_ctor("S20109C1", this);} // tgen

static void Test_S20109C1()
{
  extern Class_Descriptor cd_S20109C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,97)];
    init_test(&cd_S20109C1, buf);
    S20109C1 *dp, &lv = *(dp=new (buf) S20109C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,384), "sizeof(S20109C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20109C1)");
    check_base_class_offset(lv, (S20109C2*), ABISELECT(152,88), "S20109C1");
    check_base_class_offset(lv, (S20109C2*)(S20109C6*)(S20109C3*), ABISELECT(152,88), "S20109C1");
    check_base_class_offset(lv, (S20109C2*)(S20109C15*), ABISELECT(152,88), "S20109C1");
    /*is_ambiguous_... S20109C1::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*), ABISELECT(248,156), "S20109C1");
    /*is_ambiguous_... S20109C1::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C9*), ABISELECT(248,156), "S20109C1");
    /*is_ambiguous_... S20109C1::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*), ABISELECT(248,156), "S20109C1");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C11*), ABISELECT(248,156), "S20109C1");
    check_base_class_offset(lv, (S20109C5*)(S20109C13*)(S20109C3*), ABISELECT(248,156), "S20109C1");
    check_base_class_offset(lv, (S20109C5*)(S20109C14*), ABISELECT(248,156), "S20109C1");
    check_base_class_offset(lv, (S20109C5*)(S20109C9*)(S20109C14*), ABISELECT(248,156), "S20109C1");
    check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*)(S20109C14*), ABISELECT(248,156), "S20109C1");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C9*)(S20109C15*), ABISELECT(248,156), "S20109C1");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*)(S20109C9*)(S20109C15*), ABISELECT(248,156), "S20109C1");
    /*is_ambiguous_... S20109C1::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C4*), ABISELECT(248,156), "S20109C1");
    /*is_ambiguous_... S20109C3::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C3*), ABISELECT(232,148), "S20109C1");
    /*is_ambiguous_... S20109C6::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C6*)(S20109C3*), ABISELECT(232,148), "S20109C1");
    check_base_class_offset(lv, (S20109C8*)(S20109C7*), ABISELECT(280,172), "S20109C1");
    check_base_class_offset(lv, (S20109C8*)(S20109C14*), ABISELECT(280,172), "S20109C1");
    check_base_class_offset(lv, (S20109C8*)(S20109C15*), ABISELECT(280,172), "S20109C1");
    /*is_ambiguous_... S20109C1::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C9*), ABISELECT(304,184), "S20109C1");
    /*is_ambiguous_... S20109C1::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C9*), ABISELECT(320,192), "S20109C1");
    check_base_class_offset(lv, (S20109C9*)(S20109C7*), ABISELECT(304,184), "S20109C1");
    check_base_class_offset(lv, (S20109C9*)(S20109C11*), ABISELECT(304,184), "S20109C1");
    check_base_class_offset(lv, (S20109C7*)(S20109C6*)(S20109C3*), ABISELECT(264,164), "S20109C1");
    /*is_ambiguous_... S20109C11::S20109C5 */ AMB_check_base_class_offset(lv, (S20109C5*)(S20109C11*), ABISELECT(440,264), "S20109C1");
    /*is_ambiguous_... S20109C11::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C11*), ABISELECT(456,272), "S20109C1");
    check_base_class_offset(lv, (S20109C11*)(S20109C6*)(S20109C3*), ABISELECT(440,264), "S20109C1");
    check_base_class_offset(lv, (S20109C11*)(S20109C15*), ABISELECT(440,264), "S20109C1");
    check_base_class_offset(lv, (S20109C12*)(S20109C6*)(S20109C3*), ABISELECT(168,96), "S20109C1");
    check_base_class_offset(lv, (S20109C6*)(S20109C3*), ABISELECT(168,96), "S20109C1");
    check_base_class_offset(lv, (S20109C4*)(S20109C9*)(S20109C14*), ABISELECT(480,288), "S20109C1");
    check_base_class_offset(lv, (S20109C10*)(S20109C9*)(S20109C14*), ABISELECT(496,296), "S20109C1");
    check_base_class_offset(lv, (S20109C9*)(S20109C14*), ABISELECT(480,288), "S20109C1");
    /*is_ambiguous_... S20109C14::S20109C10 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C14*), ABISELECT(616,368), "S20109C1");
    check_base_class_offset(lv, (S20109C14*)(S20109C13*)(S20109C3*), ABISELECT(480,288), "S20109C1");
    check_base_class_offset(lv, (S20109C13*)(S20109C3*), ABISELECT(216,140), "S20109C1");
    check_base_class_offset(lv, (S20109C3*), ABISELECT(168,96), "S20109C1");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C4*)(S20109C9*)(S20109C15*), 0, "S20109C1");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C10*)(S20109C9*)(S20109C15*), ABISELECT(16,8), "S20109C1");
    /*is_ambiguous_... S20109C15::S20109C9 */ AMB_check_base_class_offset(lv, (S20109C9*)(S20109C15*), 0, "S20109C1");
    check_base_class_offset(lv, (S20109C15*), 0, "S20109C1");
    /*is_ambiguous_... S20109C1::S20109C4 */ AMB_check_base_class_offset(lv, (S20109C4*), ABISELECT(136,80), "S20109C1");
    test_class_info(&lv, &cd_S20109C1);
    dp->~S20109C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20109C1(Test_S20109C1, "S20109C1", ABISELECT(640,384));

#else // __cplusplus

extern void _ZN8S20109C1C1Ev();
extern void _ZN8S20109C1D1Ev();
Name_Map name_map_S20109C1[] = {
  NSPAIR(_ZN8S20109C1C1Ev),
  NSPAIR(_ZN8S20109C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20109C2;
extern VTBL_ENTRY _ZTI8S20109C2[];
extern  VTBL_ENTRY _ZTV8S20109C2[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C8;
extern VTBL_ENTRY _ZTI8S20109C8[];
extern  VTBL_ENTRY _ZTV8S20109C8[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C7;
extern VTBL_ENTRY _ZTI8S20109C7[];
extern  VTBL_ENTRY _ZTV8S20109C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C7[];
extern Class_Descriptor cd_S20109C5;
extern VTBL_ENTRY _ZTI8S20109C5[];
extern  VTBL_ENTRY _ZTV8S20109C5[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C11;
extern VTBL_ENTRY _ZTI9S20109C11[];
extern  VTBL_ENTRY _ZTV9S20109C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C11[];
extern Class_Descriptor cd_S20109C12;
extern VTBL_ENTRY _ZTI9S20109C12[];
extern  VTBL_ENTRY _ZTV9S20109C12[];
extern Class_Descriptor cd_S20109C6;
extern VTBL_ENTRY _ZTI8S20109C6[];
extern  VTBL_ENTRY _ZTV8S20109C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C6[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C14;
extern VTBL_ENTRY _ZTI9S20109C14[];
extern  VTBL_ENTRY _ZTV9S20109C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C14[];
extern Class_Descriptor cd_S20109C13;
extern VTBL_ENTRY _ZTI9S20109C13[];
extern  VTBL_ENTRY _ZTV9S20109C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C13[];
extern Class_Descriptor cd_S20109C3;
extern VTBL_ENTRY _ZTI8S20109C3[];
extern  VTBL_ENTRY _ZTV8S20109C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C3[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
extern Class_Descriptor cd_S20109C10;
extern VTBL_ENTRY _ZTI9S20109C10[];
extern  VTBL_ENTRY _ZTV9S20109C10[];
extern Class_Descriptor cd_S20109C9;
extern VTBL_ENTRY _ZTI8S20109C9[];
extern  VTBL_ENTRY _ZTV8S20109C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C9[];
extern Class_Descriptor cd_S20109C15;
extern VTBL_ENTRY _ZTI9S20109C15[];
extern  VTBL_ENTRY _ZTV9S20109C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20109C15[];
extern Class_Descriptor cd_S20109C4;
extern VTBL_ENTRY _ZTI8S20109C4[];
extern  VTBL_ENTRY _ZTV8S20109C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C4[];
static Base_Class bases_S20109C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20109C2,    ABISELECT(152,88), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C5,    ABISELECT(248,156), //bcp->offset
    109, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(232,148), //bcp->offset
    99, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20109C8,    ABISELECT(280,172), //bcp->offset
    125, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20109C4,    ABISELECT(304,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(320,192), //bcp->offset
    152, //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(304,184), //bcp->offset
    135, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20109C7,    ABISELECT(264,164), //bcp->offset
    115, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20109C5,    ABISELECT(440,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20109C4,    ABISELECT(456,272), //bcp->offset
    176, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20109C11,    ABISELECT(440,264), //bcp->offset
    155, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20109C12,    ABISELECT(168,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20109C6,    ABISELECT(168,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20109C4,    ABISELECT(480,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(496,296), //bcp->offset
    211, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20109C9,    ABISELECT(480,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(616,368), //bcp->offset
    214, //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
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20109C14,    ABISELECT(480,288), //bcp->offset
    183, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20109C13,    ABISELECT(216,140), //bcp->offset
    88, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20109C3,    ABISELECT(168,96), //bcp->offset
    45, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20109C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20109C10,    ABISELECT(16,8), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20109C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20109C15,    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
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20109C4,    ABISELECT(136,80), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20109C1[];
extern void _ZN8S20109C1D1Ev();
extern void _ZN8S20109C1D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C153v50Ev();
extern void _ZN9S20109C153v51Ev();
extern void _ZN9S20109C153v52Ev();
extern void _ZN8S20109C12v1Ev();
extern void _ZN8S20109C12v2Ev();
extern void _ZN8S20109C12v3Ev();
extern void _ZN8S20109C12v4Ev();
extern void _ZN8S20109C12v5Ev();
extern void _ZN8S20109C12v6Ev();
extern void _ZN8S20109C12v7Ev();
extern void _ZN8S20109C12v8Ev();
extern void _ZN9S20109C103v17Ev();
extern void ABISELECT(_ZThn136_N8S20109C1D1Ev,_ZThn80_N8S20109C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S20109C1D0Ev,_ZThn80_N8S20109C1D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
extern void _ZN9S20109C123v26Ev();
extern void ABISELECT(_ZTv0_n96_N8S20109C1D1Ev,_ZTv0_n48_N8S20109C1D1Ev)();
extern void ABISELECT(_ZThn168_N8S20109C1D1Ev,_ZThn96_N8S20109C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20109C1D0Ev,_ZTv0_n48_N8S20109C1D0Ev)();
extern void ABISELECT(_ZThn168_N8S20109C1D0Ev,_ZThn96_N8S20109C1D0Ev)() __attribute__((weak));
extern void _ZN8S20109C63v29Ev();
extern void _ZN8S20109C63v30Ev();
extern void _ZN8S20109C63v31Ev();
extern void _ZN8S20109C63v32Ev();
extern void _ZN8S20109C63v33Ev();
extern void _ZN8S20109C63v34Ev();
extern void _ZN8S20109C63v35Ev();
extern void _ZN8S20109C33v45Ev();
extern void _ZN8S20109C33v46Ev();
extern void _ZN8S20109C33v47Ev();
extern void _ZN8S20109C33v48Ev();
extern void _ZN8S20109C33v49Ev();
extern void ABISELECT(_ZTvn48_n96_N8S20109C1D1Ev,_ZTvn44_n48_N8S20109C1D1Ev)();
extern void ABISELECT(_ZTvn48_n96_N8S20109C1D0Ev,_ZTvn44_n48_N8S20109C1D0Ev)();
extern void _ZN9S20109C133v41Ev();
extern void _ZN9S20109C133v42Ev();
extern void _ZN9S20109C133v43Ev();
extern void _ZN9S20109C133v44Ev();
extern void ABISELECT(_ZTv0_n32_N8S20109C1D1Ev,_ZTv0_n16_N8S20109C1D1Ev)();
extern void ABISELECT(_ZThn232_N8S20109C1D1Ev,_ZThn148_N8S20109C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C1D0Ev,_ZTv0_n16_N8S20109C1D0Ev)();
extern void ABISELECT(_ZThn232_N8S20109C1D0Ev,_ZThn148_N8S20109C1D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN8S20109C73v21Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C1D1Ev,_ZTv0_n28_N8S20109C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S20109C1D1Ev,_ZThn164_N8S20109C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C1D0Ev,_ZTv0_n28_N8S20109C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S20109C1D0Ev,_ZThn164_N8S20109C1D0Ev)() __attribute__((weak));
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
extern void ABISELECT(_ZTv0_n32_N8S20109C1D1Ev,_ZTv0_n16_N8S20109C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20109C1D1Ev,_ZThn184_N8S20109C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C1D0Ev,_ZTv0_n16_N8S20109C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20109C1D0Ev,_ZThn184_N8S20109C1D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C1D1Ev,_ZTv0_n28_N8S20109C1D1Ev)();
extern void ABISELECT(_ZThn440_N8S20109C1D1Ev,_ZThn264_N8S20109C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C1D0Ev,_ZTv0_n28_N8S20109C1D0Ev)();
extern void ABISELECT(_ZThn440_N8S20109C1D0Ev,_ZThn264_N8S20109C1D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
extern void ABISELECT(_ZTvn16_n56_N8S20109C1D1Ev,_ZTvn8_n28_N8S20109C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S20109C1D0Ev,_ZTvn8_n28_N8S20109C1D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void ABISELECT(_ZTv0_n40_N8S20109C1D1Ev,_ZTv0_n20_N8S20109C1D1Ev)();
extern void ABISELECT(_ZThn480_N8S20109C1D1Ev,_ZThn288_N8S20109C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20109C1D0Ev,_ZTv0_n20_N8S20109C1D0Ev)();
extern void ABISELECT(_ZThn480_N8S20109C1D0Ev,_ZThn288_N8S20109C1D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
extern void _ZN9S20109C103v17Ev();
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY vtc_S20109C1[] = {
  ABISELECT(480,288),
  ABISELECT(264,164),
  ABISELECT(232,148),
  ABISELECT(168,96),
  ABISELECT(304,184),
  ABISELECT(440,264),
  ABISELECT(152,88),
  ABISELECT(280,172),
  ABISELECT(248,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN8S20109C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v50Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v51Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v52Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20109C12v8Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  ABISELECT(112,76),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N8S20109C1D1Ev,_ZThn80_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N8S20109C1D0Ev,_ZThn80_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(48,44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-96),
  0,
  ABISELECT(312,192),
  ABISELECT(-16,-8),
  ABISELECT(272,168),
  ABISELECT(64,52),
  ABISELECT(80,60),
  ABISELECT(136,88),
  ABISELECT(112,76),
  ABISELECT(96,68),
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN9S20109C123v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20109C1D1Ev,_ZTv0_n48_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20109C1D0Ev,_ZTv0_n48_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C63v29Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v34Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v35Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v45Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v46Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v47Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v48Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v49Ev,
  ABISELECT(64,32),
  ABISELECT(264,148),
  ABISELECT(32,16),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n96_N8S20109C1D1Ev,_ZTvn44_n48_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n96_N8S20109C1D0Ev,_ZTvn44_n48_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C133v41Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v42Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v43Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v44Ev,
  0,
  0,
  ABISELECT(-232,-148),
  ABISELECT(16,8),
  ABISELECT(-232,-148),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C1D1Ev,_ZTv0_n16_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C1D0Ev,_ZTv0_n16_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  0,
  0,
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  ABISELECT(-264,-164),
  0,
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-264,-164),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C1D1Ev,_ZTv0_n28_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C1D0Ev,_ZTv0_n28_N8S20109C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-280,-172),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(-56,-28),
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C1D1Ev,_ZTv0_n16_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C1D0Ev,_ZTv0_n16_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-440,-264),
  0,
  0,
  ABISELECT(-192,-108),
  ABISELECT(-136,-80),
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C1D1Ev,_ZTv0_n28_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C1D0Ev,_ZTv0_n28_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
  ABISELECT(-208,-116),
  ABISELECT(-456,-272),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C1D1Ev,_ZTvn8_n28_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C1D0Ev,_ZTvn8_n28_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-288),
  ABISELECT(-200,-116),
  ABISELECT(-232,-132),
  ABISELECT(-480,-288),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20109C1D1Ev,_ZTv0_n20_N8S20109C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20109C1D0Ev,_ZTv0_n20_N8S20109C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
  ABISELECT(-496,-296),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
  ABISELECT(-616,-368),
  (VTBL_ENTRY)&(_ZTI8S20109C1[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S20109C1[];
extern void _ZN9S20109C15D1Ev();
extern void _ZN9S20109C15D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C153v50Ev();
extern void _ZN9S20109C153v51Ev();
extern void _ZN9S20109C153v52Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C15__8S20109C1[] = {
  ABISELECT(304,184),
  ABISELECT(440,264),
  ABISELECT(152,88),
  ABISELECT(280,172),
  ABISELECT(248,156),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN9S20109C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C15D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v50Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v51Ev,
  (VTBL_ENTRY)&_ZN9S20109C153v52Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C99S20109C15__A2__8S20109C1[] = {
  ABISELECT(248,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C99S20109C15__A4__8S20109C1[] = {
  ABISELECT(248,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C99S20109C15__A4__8S20109C1[] = {
  0,
  0,
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C99S20109C15__A2__8S20109C1[] = {
  0,
  0,
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__9S20109C15__8S20109C1[] = {
  0,
  0,
  ABISELECT(-248,-156),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__9S20109C15__8S20109C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-280,-172),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C2__9S20109C15__8S20109C1[] = {
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N9S20109C15D1Ev,_ZTv0_n28_N9S20109C15D1Ev)();
extern void ABISELECT(_ZThn440_N9S20109C15D1Ev,_ZThn264_N9S20109C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20109C15D0Ev,_ZTv0_n28_N9S20109C15D0Ev)();
extern void ABISELECT(_ZThn440_N9S20109C15D0Ev,_ZThn264_N9S20109C15D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__9S20109C15__8S20109C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-440,-264),
  0,
  0,
  ABISELECT(-192,-108),
  ABISELECT(-136,-80),
  ABISELECT(-440,-264),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20109C15D1Ev,_ZTv0_n28_N9S20109C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20109C15D0Ev,_ZTv0_n28_N9S20109C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20109C15D1Ev,_ZTv0_n16_N9S20109C15D1Ev)();
extern void ABISELECT(_ZThn304_N9S20109C15D1Ev,_ZThn184_N9S20109C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20109C15D0Ev,_ZTv0_n16_N9S20109C15D0Ev)();
extern void ABISELECT(_ZThn304_N9S20109C15D0Ev,_ZThn184_N9S20109C15D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__A1__9S20109C15__8S20109C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-184),
  ABISELECT(-56,-28),
  ABISELECT(-304,-184),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C15D1Ev,_ZTv0_n16_N9S20109C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C15D0Ev,_ZTv0_n16_N9S20109C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__A1__9S20109C15__8S20109C1[] = {
  ABISELECT(-320,-192),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void ABISELECT(_ZTvn16_n56_N9S20109C15D1Ev,_ZTvn8_n28_N9S20109C15D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N9S20109C15D0Ev,_ZTvn8_n28_N9S20109C15D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__9S20109C15__8S20109C1[] = {
  ABISELECT(-208,-116),
  ABISELECT(-456,-272),
  (VTBL_ENTRY)&(_ZTI9S20109C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S20109C15D1Ev,_ZTvn8_n28_N9S20109C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N9S20109C15D0Ev,_ZTvn8_n28_N9S20109C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A__8S20109C1[] = {
  ABISELECT(112,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C4__A__8S20109C1[] = {
  0,
  0,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C123v26Ev();
extern void _ZN8S20109C3D1Ev();
extern void _ZN8S20109C3D0Ev();
extern void _ZN8S20109C63v29Ev();
extern void _ZN8S20109C63v30Ev();
extern void _ZN8S20109C63v31Ev();
extern void _ZN8S20109C63v32Ev();
extern void _ZN8S20109C63v33Ev();
extern void _ZN8S20109C63v34Ev();
extern void _ZN8S20109C63v35Ev();
extern void _ZN8S20109C33v45Ev();
extern void _ZN8S20109C33v46Ev();
extern void _ZN8S20109C33v47Ev();
extern void _ZN8S20109C33v48Ev();
extern void _ZN8S20109C33v49Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C3__8S20109C1[] = {
  ABISELECT(312,192),
  ABISELECT(-16,-8),
  ABISELECT(272,168),
  ABISELECT(64,52),
  ABISELECT(80,60),
  ABISELECT(136,88),
  ABISELECT(112,76),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C123v26Ev,
  (VTBL_ENTRY)&_ZN8S20109C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v29Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v34Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v35Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v45Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v46Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v47Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v48Ev,
  (VTBL_ENTRY)&_ZN8S20109C33v49Ev,
};
extern void _ZN9S20109C123v26Ev();
extern void _ZN8S20109C6D1Ev();
extern void _ZN8S20109C6D0Ev();
extern void _ZN8S20109C63v29Ev();
extern void _ZN8S20109C63v30Ev();
extern void _ZN8S20109C63v31Ev();
extern void _ZN8S20109C63v32Ev();
extern void _ZN8S20109C63v33Ev();
extern void _ZN8S20109C63v34Ev();
extern void _ZN8S20109C63v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C68S20109C3__8S20109C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(272,168),
  ABISELECT(64,52),
  ABISELECT(80,60),
  ABISELECT(136,88),
  ABISELECT(112,76),
  ABISELECT(96,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN9S20109C123v26Ev,
  (VTBL_ENTRY)&_ZN8S20109C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v29Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v30Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v31Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v32Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v33Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v34Ev,
  (VTBL_ENTRY)&_ZN8S20109C63v35Ev,
};
extern void _ZN8S20109C73v21Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn96_N8S20109C6D1Ev,_ZThn68_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn96_N8S20109C6D0Ev,_ZThn68_N8S20109C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20109C7__8S20109C68S20109C3__8S20109C1[] = {
  ABISELECT(-96,-68),
  0,
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev),
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__8S20109C68S20109C3__8S20109C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn136_N8S20109C6D1Ev,_ZThn88_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn136_N8S20109C6D0Ev,_ZThn88_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C68S20109C3__8S20109C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-88),
  ABISELECT(-56,-28),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C68S20109C3__8S20109C1[] = {
  0,
  0,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__8S20109C68S20109C3__8S20109C1[] = {
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S20109C6D1Ev,_ZThn52_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S20109C6D0Ev,_ZThn52_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__8S20109C68S20109C3__8S20109C1[] = {
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(16,8),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S20109C6D1Ev,_ZThn168_N8S20109C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev)();
extern void ABISELECT(_ZThn272_N8S20109C6D0Ev,_ZThn168_N8S20109C6D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__8S20109C68S20109C3__8S20109C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-272,-168),
  0,
  0,
  ABISELECT(-192,-108),
  ABISELECT(-136,-80),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S20109C6D1Ev,_ZTvn8_n28_N8S20109C6D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S20109C6D0Ev,_ZTvn8_n28_N8S20109C6D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__8S20109C68S20109C3__8S20109C1[] = {
  ABISELECT(-208,-116),
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C6D1Ev,_ZTvn8_n28_N8S20109C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C6D0Ev,_ZTvn8_n28_N8S20109C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C2__8S20109C68S20109C3__8S20109C1[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20109C6[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
};
extern void _ZN9S20109C13D1Ev();
extern void _ZN9S20109C13D0Ev();
extern void _ZN9S20109C133v41Ev();
extern void _ZN9S20109C133v42Ev();
extern void _ZN9S20109C133v43Ev();
extern void _ZN9S20109C133v44Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C138S20109C3__8S20109C1[] = {
  ABISELECT(64,32),
  ABISELECT(264,148),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v41Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v42Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v43Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v44Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__9S20109C138S20109C3__8S20109C1[] = {
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev)();
extern void ABISELECT(_ZThn264_N9S20109C13D1Ev,_ZThn148_N9S20109C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev)();
extern void ABISELECT(_ZThn264_N9S20109C13D0Ev,_ZThn148_N9S20109C13D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C14__9S20109C138S20109C3__8S20109C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-148),
  ABISELECT(-200,-116),
  ABISELECT(-232,-132),
  ABISELECT(-264,-148),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C99S20109C14__9S20109C138S20109C3__8S20109C1[] = {
  ABISELECT(-280,-156),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C109S20109C14__A1__9S20109C138S20109C3__8S20109C1[] = {
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__9S20109C138S20109C3__8S20109C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20109C13[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20109C3D1Ev,_ZThn52_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20109C3D0Ev,_ZThn52_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__8S20109C3__8S20109C1[] = {
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(16,8),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C3__8S20109C1[] = {
  0,
  0,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C73v21Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S20109C3D1Ev,_ZThn68_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S20109C3D0Ev,_ZThn68_N8S20109C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20109C7__8S20109C3__8S20109C1[] = {
  ABISELECT(-96,-68),
  0,
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev),
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__8S20109C3__8S20109C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn136_N8S20109C3D1Ev,_ZThn88_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn136_N8S20109C3D0Ev,_ZThn88_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C3__8S20109C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-88),
  ABISELECT(-56,-28),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__8S20109C3__8S20109C1[] = {
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn272_N8S20109C3D1Ev,_ZThn168_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn272_N8S20109C3D0Ev,_ZThn168_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__8S20109C3__8S20109C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-272,-168),
  0,
  0,
  ABISELECT(-192,-108),
  ABISELECT(-136,-80),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S20109C3D1Ev,_ZTvn8_n28_N8S20109C3D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S20109C3D0Ev,_ZTvn8_n28_N8S20109C3D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__8S20109C3__8S20109C1[] = {
  ABISELECT(-208,-116),
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C3D1Ev,_ZTvn8_n28_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S20109C3D0Ev,_ZTvn8_n28_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C23v27Ev();
extern void _ZN8S20109C23v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C2__8S20109C3__8S20109C1[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN8S20109C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20109C23v28Ev,
};
extern void ABISELECT(_ZThn48_N8S20109C3D1Ev,_ZThn44_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20109C3D0Ev,_ZThn44_N8S20109C3D0Ev)();
extern void _ZN9S20109C133v41Ev();
extern void _ZN9S20109C133v42Ev();
extern void _ZN9S20109C133v43Ev();
extern void _ZN9S20109C133v44Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C13__8S20109C3__8S20109C1[] = {
  ABISELECT(64,32),
  ABISELECT(264,148),
  ABISELECT(32,16),
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S20109C3D1Ev,_ZThn44_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S20109C3D0Ev,_ZThn44_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20109C133v41Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v42Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v43Ev,
  (VTBL_ENTRY)&_ZN9S20109C133v44Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20109C3D1Ev,_ZTv0_n20_N8S20109C3D1Ev)();
extern void ABISELECT(_ZThn312_N8S20109C3D1Ev,_ZThn192_N8S20109C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20109C3D0Ev,_ZTv0_n20_N8S20109C3D0Ev)();
extern void ABISELECT(_ZThn312_N8S20109C3D0Ev,_ZThn192_N8S20109C3D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C14__8S20109C3__8S20109C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-312,-192),
  ABISELECT(-200,-116),
  ABISELECT(-232,-132),
  ABISELECT(-312,-192),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20109C3D1Ev,_ZTv0_n20_N8S20109C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20109C3D0Ev,_ZTv0_n20_N8S20109C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C99S20109C14__A1__8S20109C3__8S20109C1[] = {
  ABISELECT(-328,-200),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C109S20109C14__A2__8S20109C3__8S20109C1[] = {
  ABISELECT(-448,-272),
  (VTBL_ENTRY)&(_ZTI8S20109C3[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__8S20109C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C4__8S20109C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C73v21Ev();
extern void _ZN8S20109C7D1Ev();
extern void _ZN8S20109C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C7__8S20109C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C7D0Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__8S20109C7__8S20109C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev)() __attribute__((weak));
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C7__8S20109C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C7__8S20109C1[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__8S20109C7__8S20109C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20109C7[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__8S20109C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C9__A1__8S20109C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C9__A1__8S20109C1[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C9__8S20109C1[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
extern void _ZN9S20109C11D1Ev();
extern void _ZN9S20109C11D0Ev();
extern void _ZN9S20109C113v22Ev();
extern void _ZN9S20109C113v23Ev();
extern void _ZN9S20109C113v24Ev();
extern void _ZN9S20109C113v25Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C11__8S20109C1[] = {
  ABISELECT(-192,-108),
  ABISELECT(-136,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v22Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v23Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v24Ev,
  (VTBL_ENTRY)&_ZN9S20109C113v25Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C49S20109C11__A2__8S20109C1[] = {
  ABISELECT(-208,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C49S20109C11__A2__8S20109C1[] = {
  0,
  0,
  ABISELECT(208,116),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C9__9S20109C11__8S20109C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(136,80),
  ABISELECT(-56,-28),
  ABISELECT(136,80),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D1Ev,_ZTv0_n16_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20109C11D0Ev,_ZTv0_n16_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__A1__9S20109C11__8S20109C1[] = {
  0,
  0,
  ABISELECT(192,108),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN9S20109C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C108S20109C9__9S20109C11__8S20109C1[] = {
  ABISELECT(120,72),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&_ZN9S20109C103v17Ev,
};
extern void ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev)();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C4__A1__9S20109C11__8S20109C1[] = {
  ABISELECT(-208,-116),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20109C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D1Ev,_ZThn8_N9S20109C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20109C11D0Ev,_ZThn8_N9S20109C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN9S20109C14D1Ev();
extern void _ZN9S20109C14D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
extern void _ZN9S20109C143v36Ev();
extern void _ZN9S20109C143v37Ev();
extern void _ZN9S20109C143v38Ev();
extern void _ZN9S20109C143v39Ev();
extern void _ZN9S20109C143v40Ev();
static  VTBL_ENTRY _tg__ZTV9S20109C14__8S20109C1[] = {
  ABISELECT(-200,-116),
  ABISELECT(-232,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN9S20109C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20109C14D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v36Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v37Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v38Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v39Ev,
  (VTBL_ENTRY)&_ZN9S20109C143v40Ev,
};
extern void _ZN8S20109C9D1Ev();
extern void _ZN8S20109C9D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
extern void _ZN8S20109C93v18Ev();
extern void _ZN8S20109C93v19Ev();
extern void _ZN8S20109C93v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C99S20109C14__A1__8S20109C1[] = {
  ABISELECT(-232,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v18Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20109C93v20Ev,
};
extern void _ZN8S20109C4D1Ev();
extern void _ZN8S20109C4D0Ev();
extern void _ZN8S20109C43v15Ev();
extern void _ZN8S20109C43v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C48S20109C99S20109C14__A3__8S20109C1[] = {
  ABISELECT(-232,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20109C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20109C43v16Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C48S20109C99S20109C14__A3__8S20109C1[] = {
  0,
  0,
  ABISELECT(232,132),
  (VTBL_ENTRY)&(_ZTI8S20109C4[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__8S20109C99S20109C14__A1__8S20109C1[] = {
  0,
  0,
  ABISELECT(232,132),
  (VTBL_ENTRY)&(_ZTI8S20109C9[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C53v13Ev();
extern void _ZN8S20109C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C5__9S20109C14__8S20109C1[] = {
  0,
  0,
  ABISELECT(232,132),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20109C53v14Ev,
};
extern void _ZN8S20109C82v9Ev();
extern void _ZN8S20109C83v10Ev();
extern void _ZN8S20109C83v11Ev();
extern void _ZN8S20109C83v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20109C8__9S20109C14__8S20109C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(200,116),
  (VTBL_ENTRY)&(_ZTI9S20109C14[0]),
  (VTBL_ENTRY)&_ZN8S20109C82v9Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v10Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v11Ev,
  (VTBL_ENTRY)&_ZN8S20109C83v12Ev,
};
static  VTT_ENTRY vtt_S20109C1[] = {
  {&(_ZTV8S20109C1[11]),  11,217},
  {&(_tg__ZTV9S20109C15__8S20109C1[7]),  7,17},
  {&(_tg__ZTV8S20109C99S20109C15__A2__8S20109C1[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C99S20109C15__A4__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C99S20109C15__A4__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C99S20109C15__A2__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C5__9S20109C15__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C8__9S20109C15__8S20109C1[6]),  6,10},
  {&(_tg__ZTV8S20109C2__9S20109C15__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C11__9S20109C15__8S20109C1[13]),  13,21},
  {&(_tg__ZTV8S20109C9__A1__9S20109C15__8S20109C1[10]),  10,17},
  {&(_tg__ZTV9S20109C108S20109C9__A1__9S20109C15__8S20109C1[2]),  2,3},
  {&(_tg__ZTV8S20109C49S20109C11__A2__9S20109C15__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C4__A__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C4__A__8S20109C1[4]),  4,6},
  {&(_ZTV8S20109C1[43]),  43,217},
  {&(_ZTV8S20109C1[73]),  73,217},
  {&(_ZTV8S20109C1[105]),  105,217},
  {&(_ZTV8S20109C1[113]),  113,217},
  {&(_ZTV8S20109C1[122]),  122,217},
  {&(_ZTV8S20109C1[131]),  131,217},
  {&(_ZTV8S20109C1[145]),  145,217},
  {&(_ZTV8S20109C1[154]),  154,217},
  {&(_ZTV8S20109C1[168]),  168,217},
  {&(_ZTV8S20109C1[179]),  179,217},
  {&(_ZTV8S20109C1[93]),  93,217},
  {&(_ZTV8S20109C1[199]),  199,217},
  {&(_ZTV8S20109C1[213]),  213,217},
  {&(_ZTV8S20109C1[216]),  216,217},
  {&(_ZTV8S20109C1[35]),  35,217},
  {&(_tg__ZTV8S20109C3__8S20109C1[10]),  10,25},
  {&(_tg__ZTV8S20109C68S20109C3__8S20109C1[9]),  9,19},
  {&(_tg__ZTV8S20109C7__8S20109C68S20109C3__8S20109C1[7]),  7,10},
  {&(_tg__ZTV8S20109C8__8S20109C68S20109C3__8S20109C1[6]),  6,10},
  {&(_tg__ZTV8S20109C9__8S20109C68S20109C3__8S20109C1[10]),  10,17},
  {&(_tg__ZTV8S20109C5__8S20109C68S20109C3__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__8S20109C68S20109C3__8S20109C1[2]),  2,3},
  {&(_tg__ZTV8S20109C4__A1__8S20109C68S20109C3__8S20109C1[6]),  6,10},
  {&(_tg__ZTV9S20109C11__8S20109C68S20109C3__8S20109C1[13]),  13,21},
  {&(_tg__ZTV8S20109C49S20109C11__A2__8S20109C68S20109C3__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C2__8S20109C68S20109C3__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C138S20109C3__8S20109C1[5]),  5,11},
  {&(_tg__ZTV8S20109C5__9S20109C138S20109C3__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C14__9S20109C138S20109C3__8S20109C1[16]),  16,28},
  {&(_tg__ZTV9S20109C108S20109C99S20109C14__9S20109C138S20109C3__8S20109C1[2]),  2,3},
  {&(_tg__ZTV9S20109C109S20109C14__A1__9S20109C138S20109C3__8S20109C1[2]),  2,3},
  {&(_tg__ZTV8S20109C8__9S20109C138S20109C3__8S20109C1[6]),  6,10},
  {&(_tg__ZTV8S20109C4__8S20109C3__8S20109C1[6]),  6,10},
  {&(_tg__ZTV8S20109C5__8S20109C3__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C7__8S20109C3__8S20109C1[7]),  7,10},
  {&(_tg__ZTV8S20109C8__8S20109C3__8S20109C1[6]),  6,10},
  {&(_tg__ZTV8S20109C9__8S20109C3__8S20109C1[10]),  10,17},
  {&(_tg__ZTV9S20109C108S20109C9__8S20109C3__8S20109C1[2]),  2,3},
  {&(_tg__ZTV9S20109C11__8S20109C3__8S20109C1[13]),  13,21},
  {&(_tg__ZTV8S20109C49S20109C11__A2__8S20109C3__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C2__8S20109C3__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C13__8S20109C3__8S20109C1[5]),  5,11},
  {&(_tg__ZTV9S20109C14__8S20109C3__8S20109C1[16]),  16,28},
  {&(_tg__ZTV9S20109C108S20109C99S20109C14__A1__8S20109C3__8S20109C1[2]),  2,3},
  {&(_tg__ZTV9S20109C109S20109C14__A2__8S20109C3__8S20109C1[2]),  2,3},
  {&(_tg__ZTV8S20109C4__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C4__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C7__8S20109C1[5]),  5,8},
  {&(_tg__ZTV8S20109C8__8S20109C7__8S20109C1[6]),  6,10},
  {&(_tg__ZTV8S20109C9__8S20109C7__8S20109C1[10]),  10,17},
  {&(_tg__ZTV8S20109C5__8S20109C7__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__8S20109C7__8S20109C1[2]),  2,3},
  {&(_tg__ZTV8S20109C9__8S20109C1[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C9__A1__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C9__A1__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C9__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C11__8S20109C1[4]),  4,12},
  {&(_tg__ZTV8S20109C49S20109C11__A2__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C49S20109C11__A2__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C9__9S20109C11__8S20109C1[10]),  10,17},
  {&(_tg__ZTV8S20109C5__A1__9S20109C11__8S20109C1[4]),  4,6},
  {&(_tg__ZTV9S20109C108S20109C9__9S20109C11__8S20109C1[2]),  2,3},
  {&(_tg__ZTV8S20109C4__A1__9S20109C11__8S20109C1[3]),  3,7},
  {&(_tg__ZTV9S20109C14__8S20109C1[4]),  4,16},
  {&(_tg__ZTV8S20109C99S20109C14__A1__8S20109C1[3]),  3,10},
  {&(_tg__ZTV8S20109C48S20109C99S20109C14__A3__8S20109C1[3]),  3,7},
  {&(_tg__ZTV8S20109C5__8S20109C48S20109C99S20109C14__A3__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C5__8S20109C99S20109C14__A1__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C5__9S20109C14__8S20109C1[4]),  4,6},
  {&(_tg__ZTV8S20109C8__9S20109C14__8S20109C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20109C1[];
extern  VTBL_ENTRY _ZTV8S20109C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20109C1[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D0Ev,_ZTv0_n16_N8S20109C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20109C7D0Ev,_ZThn20_N8S20109C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C7D1Ev,_ZTv0_n16_N8S20109C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20109C7D1Ev,_ZThn20_N8S20109C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20109C3D0Ev,_ZTv0_n20_N8S20109C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20109C3D0Ev,_ZThn192_N8S20109C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20109C3D1Ev,_ZTv0_n20_N8S20109C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20109C3D1Ev,_ZThn192_N8S20109C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C3D0Ev,_ZTv0_n28_N8S20109C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20109C3D0Ev,_ZThn168_N8S20109C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C3D0Ev,_ZThn68_N8S20109C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C3D1Ev,_ZTv0_n28_N8S20109C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20109C3D1Ev,_ZThn168_N8S20109C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C3D1Ev,_ZThn68_N8S20109C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C3D0Ev,_ZTv0_n16_N8S20109C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S20109C3D0Ev,_ZThn88_N8S20109C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C3D0Ev,_ZThn52_N8S20109C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C3D1Ev,_ZTv0_n16_N8S20109C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S20109C3D1Ev,_ZThn88_N8S20109C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C3D1Ev,_ZThn52_N8S20109C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20109C13D0Ev,_ZTv0_n20_N9S20109C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20109C13D0Ev,_ZThn148_N9S20109C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20109C13D1Ev,_ZTv0_n20_N9S20109C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20109C13D1Ev,_ZThn148_N9S20109C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C6D0Ev,_ZTv0_n16_N8S20109C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C6D0Ev,_ZThn52_N8S20109C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S20109C6D0Ev,_ZThn88_N8S20109C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C6D1Ev,_ZTv0_n16_N8S20109C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20109C6D1Ev,_ZThn52_N8S20109C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S20109C6D1Ev,_ZThn88_N8S20109C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C6D0Ev,_ZTv0_n28_N8S20109C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20109C6D0Ev,_ZThn168_N8S20109C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C6D0Ev,_ZThn68_N8S20109C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C6D1Ev,_ZTv0_n28_N8S20109C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20109C6D1Ev,_ZThn168_N8S20109C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20109C6D1Ev,_ZThn68_N8S20109C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C15D0Ev,_ZTv0_n16_N9S20109C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20109C15D0Ev,_ZThn184_N9S20109C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20109C15D1Ev,_ZTv0_n16_N9S20109C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S20109C15D1Ev,_ZThn184_N9S20109C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20109C15D0Ev,_ZTv0_n28_N9S20109C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S20109C15D0Ev,_ZThn264_N9S20109C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20109C15D1Ev,_ZTv0_n28_N9S20109C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S20109C15D1Ev,_ZThn264_N9S20109C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20109C1D0Ev,_ZTv0_n20_N8S20109C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20109C1D0Ev,_ZThn288_N8S20109C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20109C1D1Ev,_ZTv0_n20_N8S20109C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S20109C1D1Ev,_ZThn288_N8S20109C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C1D0Ev,_ZTv0_n28_N8S20109C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20109C1D0Ev,_ZThn264_N8S20109C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20109C1D0Ev,_ZThn164_N8S20109C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20109C1D1Ev,_ZTv0_n28_N8S20109C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20109C1D1Ev,_ZThn264_N8S20109C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20109C1D1Ev,_ZThn164_N8S20109C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C1D0Ev,_ZTv0_n16_N8S20109C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20109C1D0Ev,_ZThn184_N8S20109C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S20109C1D0Ev,_ZThn148_N8S20109C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20109C1D1Ev,_ZTv0_n16_N8S20109C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20109C1D1Ev,_ZThn184_N8S20109C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S20109C1D1Ev,_ZThn148_N8S20109C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20109C1D0Ev,_ZTv0_n48_N8S20109C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20109C1D0Ev,_ZThn96_N8S20109C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20109C1D1Ev,_ZTv0_n48_N8S20109C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S20109C1D1Ev,_ZThn96_N8S20109C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20109C1 = {  "S20109C1", // class name
  bases_S20109C1, 25,
  &(vtc_S20109C1[0]), // expected_vtbl_contents
  &(vtt_S20109C1[0]), // expected_vtt_contents
  ABISELECT(640,384), // object size
  NSPAIRA(_ZTI8S20109C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20109C1),217, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20109C1),85, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1686C4_nt  {
  int s1686c4f0;
  void  mf1686c4(); // _ZN10S1686C4_nt8mf1686c4Ev
  virtual  ~S1686C4_nt(); // _ZN10S1686C4_ntD1Ev
  S1686C4_nt(); // tgen
};
//SIG(-1 S1686C4_nt) C1{ vd m Fi}


void  S1686C4_nt ::mf1686c4(){}
 S1686C4_nt ::~S1686C4_nt(){ note_dtor("S1686C4_nt", this);}
S1686C4_nt ::S1686C4_nt(){ note_ctor("S1686C4_nt", this);} // tgen

//skip512 S1686C4_nt

#else // __cplusplus

extern void _ZN10S1686C4_ntC1Ev();
extern void _ZN10S1686C4_ntD1Ev();
Name_Map name_map_S1686C4_nt[] = {
  NSPAIR(_ZN10S1686C4_ntC1Ev),
  NSPAIR(_ZN10S1686C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern void _ZN10S1686C4_ntD1Ev();
extern void _ZN10S1686C4_ntD0Ev();
static  VTBL_ENTRY vtc_S1686C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1686C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1686C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1686C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
VTBL_ENTRY *P__ZTI10S1686C4_nt = _ZTI10S1686C4_nt; 
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
Class_Descriptor cd_S1686C4_nt = {  "S1686C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1686C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1686C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1686C4_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  S1686C3_nt  : S1686C4_nt {
  virtual void  v4(); // _ZN10S1686C3_nt2v4Ev
  virtual void  v5(); // _ZN10S1686C3_nt2v5Ev
  virtual void  v6(); // _ZN10S1686C3_nt2v6Ev
  virtual void  v7(); // _ZN10S1686C3_nt2v7Ev
  virtual void  v8(); // _ZN10S1686C3_nt2v8Ev
  ~S1686C3_nt(); // tgen
  S1686C3_nt(); // tgen
};
//SIG(-1 S1686C3_nt) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S1686C3_nt ::v4(){vfunc_called(this, "_ZN10S1686C3_nt2v4Ev");}
void  S1686C3_nt ::v5(){vfunc_called(this, "_ZN10S1686C3_nt2v5Ev");}
void  S1686C3_nt ::v6(){vfunc_called(this, "_ZN10S1686C3_nt2v6Ev");}
void  S1686C3_nt ::v7(){vfunc_called(this, "_ZN10S1686C3_nt2v7Ev");}
void  S1686C3_nt ::v8(){vfunc_called(this, "_ZN10S1686C3_nt2v8Ev");}
S1686C3_nt ::~S1686C3_nt(){ note_dtor("S1686C3_nt", this);} // tgen
S1686C3_nt ::S1686C3_nt(){ note_ctor("S1686C3_nt", this);} // tgen

//skip512 S1686C3_nt

#else // __cplusplus

extern void _ZN10S1686C3_ntC1Ev();
extern void _ZN10S1686C3_ntD1Ev();
Name_Map name_map_S1686C3_nt[] = {
  NSPAIR(_ZN10S1686C3_ntC1Ev),
  NSPAIR(_ZN10S1686C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
static Base_Class bases_S1686C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1686C3_nt[];
extern void _ZN10S1686C3_ntD1Ev();
extern void _ZN10S1686C3_ntD0Ev();
extern void _ZN10S1686C3_nt2v4Ev();
extern void _ZN10S1686C3_nt2v5Ev();
extern void _ZN10S1686C3_nt2v6Ev();
extern void _ZN10S1686C3_nt2v7Ev();
extern void _ZN10S1686C3_nt2v8Ev();
static  VTBL_ENTRY vtc_S1686C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1686C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1686C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S1686C3_nt[];
VTBL_ENTRY *P__ZTI10S1686C3_nt = _ZTI10S1686C3_nt; 
extern  VTBL_ENTRY _ZTV10S1686C3_nt[];
Class_Descriptor cd_S1686C3_nt = {  "S1686C3_nt", // class name
  bases_S1686C3_nt, 1,
  &(vtc_S1686C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1686C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1686C3_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1686C5_nt  {
  ::S7368C77 s1686c5f0;
  void *s1686c5f1[2];
  void  mf1686c5(); // _ZN10S1686C5_nt8mf1686c5Ev
};
//SIG(-1 S1686C5_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S1686C5_nt ::mf1686c5(){}

//skip512 S1686C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1686C2_nt  : S1686C3_nt {
  void *s1686c2f0[3];
  ::S1686C5_nt s1686c2f1;
  virtual void  v9(); // _ZN10S1686C2_nt2v9Ev
  virtual void  v10(); // _ZN10S1686C2_nt3v10Ev
  virtual void  v11(); // _ZN10S1686C2_nt3v11Ev
  virtual void  v12(); // _ZN10S1686C2_nt3v12Ev
  virtual void  v13(); // _ZN10S1686C2_nt3v13Ev
  virtual void  v14(); // _ZN10S1686C2_nt3v14Ev
  virtual void  v15(); // _ZN10S1686C2_nt3v15Ev
  virtual void  v16(); // _ZN10S1686C2_nt3v16Ev
  virtual void  v17(); // _ZN10S1686C2_nt3v17Ev
  virtual void  v18(); // _ZN10S1686C2_nt3v18Ev
  virtual void  v19(); // _ZN10S1686C2_nt3v19Ev
  ~S1686C2_nt(); // tgen
  S1686C2_nt(); // tgen
};
//SIG(-1 S1686C2_nt) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S1686C2_nt ::v9(){vfunc_called(this, "_ZN10S1686C2_nt2v9Ev");}
void  S1686C2_nt ::v10(){vfunc_called(this, "_ZN10S1686C2_nt3v10Ev");}
void  S1686C2_nt ::v11(){vfunc_called(this, "_ZN10S1686C2_nt3v11Ev");}
void  S1686C2_nt ::v12(){vfunc_called(this, "_ZN10S1686C2_nt3v12Ev");}
void  S1686C2_nt ::v13(){vfunc_called(this, "_ZN10S1686C2_nt3v13Ev");}
void  S1686C2_nt ::v14(){vfunc_called(this, "_ZN10S1686C2_nt3v14Ev");}
void  S1686C2_nt ::v15(){vfunc_called(this, "_ZN10S1686C2_nt3v15Ev");}
void  S1686C2_nt ::v16(){vfunc_called(this, "_ZN10S1686C2_nt3v16Ev");}
void  S1686C2_nt ::v17(){vfunc_called(this, "_ZN10S1686C2_nt3v17Ev");}
void  S1686C2_nt ::v18(){vfunc_called(this, "_ZN10S1686C2_nt3v18Ev");}
void  S1686C2_nt ::v19(){vfunc_called(this, "_ZN10S1686C2_nt3v19Ev");}
S1686C2_nt ::~S1686C2_nt(){ note_dtor("S1686C2_nt", this);} // tgen
S1686C2_nt ::S1686C2_nt(){ note_ctor("S1686C2_nt", this);} // tgen

//skip512 S1686C2_nt

#else // __cplusplus

extern void _ZN10S1686C2_ntC1Ev();
extern void _ZN10S1686C2_ntD1Ev();
Name_Map name_map_S1686C2_nt[] = {
  NSPAIR(_ZN10S1686C2_ntC1Ev),
  NSPAIR(_ZN10S1686C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S1686C3_nt;
extern VTBL_ENTRY _ZTI10S1686C3_nt[];
extern  VTBL_ENTRY _ZTV10S1686C3_nt[];
static Base_Class bases_S1686C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1686C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1686C2_nt[];
extern void _ZN10S1686C2_ntD1Ev();
extern void _ZN10S1686C2_ntD0Ev();
extern void _ZN10S1686C3_nt2v4Ev();
extern void _ZN10S1686C3_nt2v5Ev();
extern void _ZN10S1686C3_nt2v6Ev();
extern void _ZN10S1686C3_nt2v7Ev();
extern void _ZN10S1686C3_nt2v8Ev();
extern void _ZN10S1686C2_nt2v9Ev();
extern void _ZN10S1686C2_nt3v10Ev();
extern void _ZN10S1686C2_nt3v11Ev();
extern void _ZN10S1686C2_nt3v12Ev();
extern void _ZN10S1686C2_nt3v13Ev();
extern void _ZN10S1686C2_nt3v14Ev();
extern void _ZN10S1686C2_nt3v15Ev();
extern void _ZN10S1686C2_nt3v16Ev();
extern void _ZN10S1686C2_nt3v17Ev();
extern void _ZN10S1686C2_nt3v18Ev();
extern void _ZN10S1686C2_nt3v19Ev();
static  VTBL_ENTRY vtc_S1686C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1686C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1686C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S1686C2_nt[];
VTBL_ENTRY *P__ZTI10S1686C2_nt = _ZTI10S1686C2_nt; 
extern  VTBL_ENTRY _ZTV10S1686C2_nt[];
Class_Descriptor cd_S1686C2_nt = {  "S1686C2_nt", // class name
  bases_S1686C2_nt, 2,
  &(vtc_S1686C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI10S1686C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1686C2_nt),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1686C1  : S1686C2_nt {
  void *s1686c1f0;
  ::S2011C19_nt s1686c1f1;
  int s1686c1f2;
  void *s1686c1f3[2];
  char s1686c1f4;
  void *s1686c1f5[2];
  virtual  ~S1686C1(); // _ZN7S1686C1D1Ev
  virtual void  v1(); // _ZN7S1686C12v1Ev
  virtual void  v2(); // _ZN7S1686C12v2Ev
  virtual void  v3(); // _ZN7S1686C12v3Ev
  S1686C1(); // tgen
};
//SIG(1 S1686C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v4 v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} vd v1 v2 v3 Fp FC8{ BC9{ vd v22 v23} vd v20 v21 FC10{ BC9 vd v24 v25 FC11{ m Fp Fi FC12{ m}}} FC13{ BC9 vd v26 v27 FC11 FC11 Fi} FC14{ BC15{ m Fp Fi[2] FC16{ m}} BC9 vd v28 v29} FC17{ vd m FC18{ m Fs[6] Fi[2] Fc Fs}} FC19{ m Fp Fi FC7} FC19 Fc[2] Fi FC11 FC11 FC19 FC11 FC11 Fi[3] Fp FC11 FC17 FC11 Fi} Fi Fp[2] Fc Fp[2]}


 S1686C1 ::~S1686C1(){ note_dtor("S1686C1", this);}
void  S1686C1 ::v1(){vfunc_called(this, "_ZN7S1686C12v1Ev");}
void  S1686C1 ::v2(){vfunc_called(this, "_ZN7S1686C12v2Ev");}
void  S1686C1 ::v3(){vfunc_called(this, "_ZN7S1686C12v3Ev");}
S1686C1 ::S1686C1(){ note_ctor("S1686C1", this);} // tgen

static void Test_S1686C1()
{
  extern Class_Descriptor cd_S1686C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,85)];
    init_test(&cd_S1686C1, buf);
    S1686C1 *dp, &lv = *(dp=new (buf) S1686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,336), "sizeof(S1686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1686C1)");
    check_base_class_offset(lv, (S1686C4_nt*)(S1686C3_nt*)(S1686C2_nt*), 0, "S1686C1");
    check_base_class_offset(lv, (S1686C3_nt*)(S1686C2_nt*), 0, "S1686C1");
    check_base_class_offset(lv, (S1686C2_nt*), 0, "S1686C1");
    check_field_offset(lv, s1686c1f0, ABISELECT(80,44), "S1686C1.s1686c1f0");
    check_field_offset(lv, s1686c1f1, ABISELECT(88,48), "S1686C1.s1686c1f1");
    check_field_offset(lv, s1686c1f2, ABISELECT(448,312), "S1686C1.s1686c1f2");
    check_field_offset(lv, s1686c1f3, ABISELECT(456,316), "S1686C1.s1686c1f3");
    check_field_offset(lv, s1686c1f4, ABISELECT(472,324), "S1686C1.s1686c1f4");
    check_field_offset(lv, s1686c1f5, ABISELECT(480,328), "S1686C1.s1686c1f5");
    test_class_info(&lv, &cd_S1686C1);
    dp->~S1686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1686C1(Test_S1686C1, "S1686C1", ABISELECT(496,336));

#else // __cplusplus

extern void _ZN7S1686C1C1Ev();
extern void _ZN7S1686C1D1Ev();
Name_Map name_map_S1686C1[] = {
  NSPAIR(_ZN7S1686C1C1Ev),
  NSPAIR(_ZN7S1686C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S1686C3_nt;
extern VTBL_ENTRY _ZTI10S1686C3_nt[];
extern  VTBL_ENTRY _ZTV10S1686C3_nt[];
extern Class_Descriptor cd_S1686C2_nt;
extern VTBL_ENTRY _ZTI10S1686C2_nt[];
extern  VTBL_ENTRY _ZTV10S1686C2_nt[];
static Base_Class bases_S1686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1686C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1686C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1686C1[];
extern void _ZN7S1686C1D1Ev();
extern void _ZN7S1686C1D0Ev();
extern void _ZN10S1686C3_nt2v4Ev();
extern void _ZN10S1686C3_nt2v5Ev();
extern void _ZN10S1686C3_nt2v6Ev();
extern void _ZN10S1686C3_nt2v7Ev();
extern void _ZN10S1686C3_nt2v8Ev();
extern void _ZN10S1686C2_nt2v9Ev();
extern void _ZN10S1686C2_nt3v10Ev();
extern void _ZN10S1686C2_nt3v11Ev();
extern void _ZN10S1686C2_nt3v12Ev();
extern void _ZN10S1686C2_nt3v13Ev();
extern void _ZN10S1686C2_nt3v14Ev();
extern void _ZN10S1686C2_nt3v15Ev();
extern void _ZN10S1686C2_nt3v16Ev();
extern void _ZN10S1686C2_nt3v17Ev();
extern void _ZN10S1686C2_nt3v18Ev();
extern void _ZN10S1686C2_nt3v19Ev();
extern void _ZN7S1686C12v1Ev();
extern void _ZN7S1686C12v2Ev();
extern void _ZN7S1686C12v3Ev();
static  VTBL_ENTRY vtc_S1686C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1686C1[0]),
  (VTBL_ENTRY)&_ZN7S1686C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1686C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1686C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1686C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN7S1686C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1686C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1686C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1686C1[];
extern  VTBL_ENTRY _ZTV7S1686C1[];
Class_Descriptor cd_S1686C1 = {  "S1686C1", // class name
  bases_S1686C1, 3,
  &(vtc_S1686C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,336), // object size
  NSPAIRA(_ZTI7S1686C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1686C1),23, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C6  {
  void *s3542c6f0;
  int s3542c6f1;
  long double s3542c6f2;
  int s3542c6f3[2];
  char s3542c6f4;
  virtual void  v2(); // _ZN7S3542C62v2Ev
  virtual void  v3(); // _ZN7S3542C62v3Ev
  ~S3542C6(); // tgen
  S3542C6(); // tgen
};
//SIG(-1 S3542C6) C1{ v1 v2 Fp Fi FD Fi[2] Fc}


void  S3542C6 ::v2(){vfunc_called(this, "_ZN7S3542C62v2Ev");}
void  S3542C6 ::v3(){vfunc_called(this, "_ZN7S3542C62v3Ev");}
S3542C6 ::~S3542C6(){ note_dtor("S3542C6", this);} // tgen
S3542C6 ::S3542C6(){ note_ctor("S3542C6", this);} // tgen

static void Test_S3542C6()
{
  extern Class_Descriptor cd_S3542C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S3542C6, buf);
    S3542C6 *dp, &lv = *(dp=new (buf) S3542C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3542C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C6)");
    check_field_offset(lv, s3542c6f0, ABISELECT(8,4), "S3542C6.s3542c6f0");
    check_field_offset(lv, s3542c6f1, ABISELECT(16,8), "S3542C6.s3542c6f1");
    check_field_offset(lv, s3542c6f2, ABISELECT(32,12), "S3542C6.s3542c6f2");
    check_field_offset(lv, s3542c6f3, ABISELECT(48,24), "S3542C6.s3542c6f3");
    check_field_offset(lv, s3542c6f4, ABISELECT(56,32), "S3542C6.s3542c6f4");
    test_class_info(&lv, &cd_S3542C6);
    dp->~S3542C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C6(Test_S3542C6, "S3542C6", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3542C6C1Ev();
extern void _ZN7S3542C6D1Ev();
Name_Map name_map_S3542C6[] = {
  NSPAIR(_ZN7S3542C6C1Ev),
  NSPAIR(_ZN7S3542C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3542C6[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY vtc_S3542C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C6[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
Class_Descriptor cd_S3542C6 = {  "S3542C6", // class name
  0,0,//no base classes
  &(vtc_S3542C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3542C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3542C6),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  S3542C5  : S3542C6 {
  void *s3542c5f0;
  __tsi64 s3542c5f1;
  int s3542c5f2;
  char s3542c5f3:8;
  char s3542c5f4;
  void *s3542c5f5;
  short s3542c5f6;
  long double s3542c5f7;
  virtual  ~S3542C5(); // _ZN7S3542C5D1Ev
  S3542C5(); // tgen
};
//SIG(-1 S3542C5) C1{ BC2{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD}


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

static void Test_S3542C5()
{
  extern Class_Descriptor cd_S3542C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S3542C5, buf);
    S3542C5 *dp, &lv = *(dp=new (buf) S3542C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S3542C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C5)");
    check_base_class_offset(lv, (S3542C6*), 0, "S3542C5");
    check_field_offset(lv, s3542c5f0, ABISELECT(64,36), "S3542C5.s3542c5f0");
    check_field_offset(lv, s3542c5f1, ABISELECT(72,40), "S3542C5.s3542c5f1");
    check_field_offset(lv, s3542c5f2, ABISELECT(80,48), "S3542C5.s3542c5f2");
    set_bf_and_test(lv, s3542c5f3, ABISELECT(84,52), 0, 8, 1, "S3542C5");
    set_bf_and_test(lv, s3542c5f3, ABISELECT(84,52), 0, 8, hide_sll(1LL<<7), "S3542C5");
    check_field_offset(lv, s3542c5f4, ABISELECT(85,53), "S3542C5.s3542c5f4");
    check_field_offset(lv, s3542c5f5, ABISELECT(88,56), "S3542C5.s3542c5f5");
    check_field_offset(lv, s3542c5f6, ABISELECT(96,60), "S3542C5.s3542c5f6");
    check_field_offset(lv, s3542c5f7, ABISELECT(112,64), "S3542C5.s3542c5f7");
    test_class_info(&lv, &cd_S3542C5);
    dp->~S3542C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C5(Test_S3542C5, "S3542C5", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S3542C5C1Ev();
extern void _ZN7S3542C5D1Ev();
Name_Map name_map_S3542C5[] = {
  NSPAIR(_ZN7S3542C5C1Ev),
  NSPAIR(_ZN7S3542C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
static Base_Class bases_S3542C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3542C5[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C5D1Ev();
extern void _ZN7S3542C5D0Ev();
static  VTBL_ENTRY vtc_S3542C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C5[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
Class_Descriptor cd_S3542C5 = {  "S3542C5", // class name
  bases_S3542C5, 1,
  &(vtc_S3542C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S3542C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3542C5),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  S3542C4  : virtual S3542C5 {
  int s3542c4f0;
  ~S3542C4(); // tgen
  S3542C4(); // tgen
};
//SIG(-1 S3542C4) C1{ VBC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi}


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

static void Test_S3542C4()
{
  extern Class_Descriptor cd_S3542C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,22)];
    init_test(&cd_S3542C4, buf);
    S3542C4 *dp, &lv = *(dp=new (buf) S3542C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S3542C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C4)");
    check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(16,8), "S3542C4");
    check_base_class_offset(lv, (S3542C5*), ABISELECT(16,8), "S3542C4");
    check_field_offset(lv, s3542c4f0, ABISELECT(8,4), "S3542C4.s3542c4f0");
    test_class_info(&lv, &cd_S3542C4);
    dp->~S3542C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C4(Test_S3542C4, "S3542C4", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S3542C4C1Ev();
extern void _ZN7S3542C4D1Ev();
Name_Map name_map_S3542C4[] = {
  NSPAIR(_ZN7S3542C4C1Ev),
  NSPAIR(_ZN7S3542C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
static Base_Class bases_S3542C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3542C4[];
extern void _ZN7S3542C4D1Ev();
extern void _ZN7S3542C4D0Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3542C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C4D0Ev,
  ABISELECT(-16,-8),
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S3542C4[];
static  VTT_ENTRY vtt_S3542C4[] = {
  {&(_ZTV7S3542C4[3]),  3,14},
  {&(_ZTV7S3542C4[10]),  10,14},
};
extern VTBL_ENTRY _ZTI7S3542C4[];
extern  VTBL_ENTRY _ZTV7S3542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C4[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C4 = {  "S3542C4", // class name
  bases_S3542C4, 2,
  &(vtc_S3542C4[0]), // expected_vtbl_contents
  &(vtt_S3542C4[0]), // expected_vtt_contents
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S3542C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3542C4),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3542C4),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C9  : virtual S3542C5 , S3542C6 {
  int s3542c9f0;
  ::S3542C5 s3542c9f1;
  int s3542c9f2;
  virtual  ~S3542C9(); // _ZN7S3542C9D2Ev
  S3542C9(); // tgen
};
//SIG(-1 S3542C9) C1{ VBC2{ BC3{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC3 vd Fi FC2 Fi}


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

static void Test_S3542C9()
{
  extern Class_Descriptor cd_S3542C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S3542C9, buf);
    S3542C9 *dp, &lv = *(dp=new (buf) S3542C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S3542C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C9)");
    check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(208,120), "S3542C9");
    check_base_class_offset(lv, (S3542C5*), ABISELECT(208,120), "S3542C9");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*), 0, "S3542C9");
    check_field_offset(lv, s3542c9f0, ABISELECT(60,36), "S3542C9.s3542c9f0");
    check_field_offset(lv, s3542c9f1, ABISELECT(64,40), "S3542C9.s3542c9f1");
    check_field_offset(lv, s3542c9f2, ABISELECT(192,116), "S3542C9.s3542c9f2");
    test_class_info(&lv, &cd_S3542C9);
    dp->~S3542C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C9(Test_S3542C9, "S3542C9", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S3542C9C1Ev();
extern void _ZN7S3542C9D2Ev();
Name_Map name_map_S3542C9[] = {
  NSPAIR(_ZN7S3542C9C1Ev),
  NSPAIR(_ZN7S3542C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
static Base_Class bases_S3542C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(208,120), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3542C9[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn208_N7S3542C9D1Ev,_ZThn120_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn208_N7S3542C9D0Ev,_ZThn120_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3542C9[] = {
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
  ABISELECT(-208,-120),
  0,
  0,
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S3542C9[];
static  VTT_ENTRY vtt_S3542C9[] = {
  {&(_ZTV7S3542C9[3]),  3,16},
  {&(_ZTV7S3542C9[12]),  12,16},
};
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S3542C9D0Ev,_ZThn120_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S3542C9D1Ev,_ZThn120_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C9 = {  "S3542C9", // class name
  bases_S3542C9, 3,
  &(vtc_S3542C9[0]), // expected_vtbl_contents
  &(vtt_S3542C9[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S3542C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3542C9),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3542C9),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C10  : S3542C9 {
  int s3542c10f0;
  void *s3542c10f1;
  int s3542c10f2[2];
  virtual  ~S3542C10(); // _ZN8S3542C10D2Ev
  S3542C10(); // tgen
};
//SIG(-1 S3542C10) C1{ BC2{ VBC3{ BC4{ v1 v2 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} BC4 vd Fi FC3 Fi} vd Fi Fp Fi[2]}


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

static void Test_S3542C10()
{
  extern Class_Descriptor cd_S3542C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,54)];
    init_test(&cd_S3542C10, buf);
    S3542C10 *dp, &lv = *(dp=new (buf) S3542C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,212), "sizeof(S3542C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C10)");
    check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(224,136), "S3542C10");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(224,136), "S3542C10");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), 0, "S3542C10");
    check_base_class_offset(lv, (S3542C9*), 0, "S3542C10");
    check_field_offset(lv, s3542c10f0, ABISELECT(196,120), "S3542C10.s3542c10f0");
    check_field_offset(lv, s3542c10f1, ABISELECT(200,124), "S3542C10.s3542c10f1");
    check_field_offset(lv, s3542c10f2, ABISELECT(208,128), "S3542C10.s3542c10f2");
    test_class_info(&lv, &cd_S3542C10);
    dp->~S3542C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C10(Test_S3542C10, "S3542C10", ABISELECT(352,212));

#else // __cplusplus

extern void _ZN8S3542C10C1Ev();
extern void _ZN8S3542C10D2Ev();
Name_Map name_map_S3542C10[] = {
  NSPAIR(_ZN8S3542C10C1Ev),
  NSPAIR(_ZN8S3542C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
static Base_Class bases_S3542C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(224,136), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3542C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3542C10[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S3542C10D1Ev,_ZThn136_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S3542C10D0Ev,_ZThn136_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3542C10[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
  ABISELECT(-224,-136),
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S3542C10[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C10[] = {
  ABISELECT(224,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S3542C9D1Ev,_ZThn136_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn224_N7S3542C9D0Ev,_ZThn136_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__8S3542C10[] = {
  ABISELECT(-224,-136),
  0,
  0,
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
static  VTT_ENTRY vtt_S3542C10[] = {
  {&(_ZTV8S3542C10[3]),  3,16},
  {&(_tg__ZTV7S3542C9__8S3542C10[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__8S3542C10[5]),  5,9},
  {&(_ZTV8S3542C10[12]),  12,16},
};
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C9D0Ev,_ZThn136_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C9D1Ev,_ZThn136_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3542C10D0Ev,_ZThn136_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3542C10D1Ev,_ZThn136_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C10 = {  "S3542C10", // class name
  bases_S3542C10, 4,
  &(vtc_S3542C10[0]), // expected_vtbl_contents
  &(vtt_S3542C10[0]), // expected_vtt_contents
  ABISELECT(352,212), // object size
  NSPAIRA(_ZTI8S3542C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3542C10),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3542C10),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C8  : virtual S3542C5 , virtual S3542C9 , S3542C10 , virtual S3542C6 {
  ::S19558C11 s3542c8f0;
  virtual  ~S3542C8(); // _ZN7S3542C8D2Ev
  virtual void  v4(); // _ZN7S3542C82v4Ev
  S3542C8(); // tgen
};
//SIG(-1 S3542C8) C1{ VBC2{ BC3{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC4{ VBC2 BC3 vd Fi FC2 Fi} BC5{ BC4 vd Fi Fp Fi[2]} VBC3 vd v1 FU6{ m Fi[2] FL}}


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

static void Test_S3542C8()
{
  extern Class_Descriptor cd_S3542C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,95)];
    init_test(&cd_S3542C8, buf);
    S3542C8 *dp, &lv = *(dp=new (buf) S3542C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,376), "sizeof(S3542C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C8)");
    check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(224,144), "S3542C8");
    check_base_class_offset(lv, (S3542C5*), ABISELECT(224,144), "S3542C8");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(224,144), "S3542C8");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*), ABISELECT(224,144), "S3542C8");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(352,220), "S3542C8");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*), ABISELECT(352,220), "S3542C8");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*), 0, "S3542C8");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*), 0, "S3542C8");
    check_base_class_offset(lv, (S3542C10*), 0, "S3542C8");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*), ABISELECT(560,340), "S3542C8");
    check_field_offset(lv, s3542c8f0, ABISELECT(216,136), "S3542C8.s3542c8f0");
    test_class_info(&lv, &cd_S3542C8);
    dp->~S3542C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C8(Test_S3542C8, "S3542C8", ABISELECT(624,376));

#else // __cplusplus

extern void _ZN7S3542C8C1Ev();
extern void _ZN7S3542C8D2Ev();
Name_Map name_map_S3542C8[] = {
  NSPAIR(_ZN7S3542C8C1Ev),
  NSPAIR(_ZN7S3542C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
static Base_Class bases_S3542C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(224,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3542C9,    ABISELECT(352,220), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3542C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3542C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(560,340), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3542C8[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn224_N7S3542C8D1Ev,_ZThn144_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn224_N7S3542C8D0Ev,_ZThn144_N7S3542C8D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn352_N7S3542C8D1Ev,_ZThn220_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn352_N7S3542C8D0Ev,_ZThn220_N7S3542C8D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY vtc_S3542C8[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S3542C8[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C10__7S3542C8[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C10__A1__7S3542C8[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S3542C9D1Ev,_ZThn144_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn224_N7S3542C9D0Ev,_ZThn144_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C10__A1__7S3542C8[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S3542C10D1Ev,_ZThn144_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S3542C10D0Ev,_ZThn144_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C10__7S3542C8[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C8[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__7S3542C8[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
static  VTT_ENTRY vtt_S3542C8[] = {
  {&(_ZTV7S3542C8[5]),  5,35},
  {&(_tg__ZTV8S3542C10__7S3542C8[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C10__A1__7S3542C8[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C10__A1__7S3542C8[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C10__7S3542C8[5]),  5,9},
  {&(_ZTV7S3542C8[15]),  15,35},
  {&(_ZTV7S3542C8[25]),  25,35},
  {&(_ZTV7S3542C8[33]),  33,35},
  {&(_tg__ZTV7S3542C9__7S3542C8[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__7S3542C8[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3542C10D0Ev,_ZThn144_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3542C10D1Ev,_ZThn144_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C9D0Ev,_ZThn144_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C9D1Ev,_ZThn144_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3542C8D0Ev,_ZThn220_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3542C8D1Ev,_ZThn220_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C8D0Ev,_ZThn144_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C8D1Ev,_ZThn144_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C8 = {  "S3542C8", // class name
  bases_S3542C8, 8,
  &(vtc_S3542C8[0]), // expected_vtbl_contents
  &(vtt_S3542C8[0]), // expected_vtt_contents
  ABISELECT(624,376), // object size
  NSPAIRA(_ZTI7S3542C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3542C8),35, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3542C8),10, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C7  : S3542C8 {
  long double s3542c7f0[3];
  int s3542c7f1;
  char s3542c7f2;
  ::S3542C9 s3542c7f3;
  int s3542c7f4:9;
  char s3542c7f5[5];
  int s3542c7f6;
  void *s3542c7f7[9];
  virtual  ~S3542C7(); // _ZN7S3542C7D2Ev
  virtual void  v5(); // _ZN7S3542C72v5Ev
  S3542C7(); // tgen
};
//SIG(-1 S3542C7) C1{ BC2{ VBC3{ BC4{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC4 vd v4 FU7{ m Fi[2] FL}} vd v1 FD[3] Fi Fc FC5 Fi:9 Fc[5] Fi Fp[9]}


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

static void Test_S3542C7()
{
  extern Class_Descriptor cd_S3542C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(71,167)];
    init_test(&cd_S3542C7, buf);
    S3542C7 *dp, &lv = *(dp=new (buf) S3542C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,664), "sizeof(S3542C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C7)");
    check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(720,432), "S3542C7");
    check_base_class_offset(lv, (S3542C5*)(S3542C8*), ABISELECT(720,432), "S3542C7");
    /*is_ambiguous_... S3542C7::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(720,432), "S3542C7");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(720,432), "S3542C7");
    /*is_ambiguous_... S3542C7::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(848,508), "S3542C7");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*), ABISELECT(848,508), "S3542C7");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*), 0, "S3542C7");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*), 0, "S3542C7");
    check_base_class_offset(lv, (S3542C10*)(S3542C8*), 0, "S3542C7");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*), ABISELECT(1056,628), "S3542C7");
    check_base_class_offset(lv, (S3542C8*), 0, "S3542C7");
    check_field_offset(lv, s3542c7f0, ABISELECT(224,144), "S3542C7.s3542c7f0");
    check_field_offset(lv, s3542c7f1, ABISELECT(272,180), "S3542C7.s3542c7f1");
    check_field_offset(lv, s3542c7f2, ABISELECT(276,184), "S3542C7.s3542c7f2");
    check_field_offset(lv, s3542c7f3, ABISELECT(288,188), "S3542C7.s3542c7f3");
    set_bf_and_test(lv, s3542c7f4, ABISELECT(624,384), 0, 9, 1, "S3542C7");
    set_bf_and_test(lv, s3542c7f4, ABISELECT(624,384), 0, 9, hide_sll(1LL<<8), "S3542C7");
    check_field_offset(lv, s3542c7f5, ABISELECT(626,386), "S3542C7.s3542c7f5");
    check_field_offset(lv, s3542c7f6, ABISELECT(632,392), "S3542C7.s3542c7f6");
    check_field_offset(lv, s3542c7f7, ABISELECT(640,396), "S3542C7.s3542c7f7");
    test_class_info(&lv, &cd_S3542C7);
    dp->~S3542C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C7(Test_S3542C7, "S3542C7", ABISELECT(1120,664));

#else // __cplusplus

extern void _ZN7S3542C7C1Ev();
extern void _ZN7S3542C7D2Ev();
Name_Map name_map_S3542C7[] = {
  NSPAIR(_ZN7S3542C7C1Ev),
  NSPAIR(_ZN7S3542C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
static Base_Class bases_S3542C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(720,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(720,432), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(848,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(848,508), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S3542C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3542C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(1056,628), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3542C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3542C7[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C7D1Ev();
extern void _ZN7S3542C7D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn848_N7S3542C7D1Ev,_ZThn508_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn848_N7S3542C7D0Ev,_ZThn508_N7S3542C7D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY vtc_S3542C7[] = {
  ABISELECT(1056,628),
  ABISELECT(848,508),
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev),
  ABISELECT(-848,-508),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-848,-508),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev),
  0,
  0,
  ABISELECT(-1056,-628),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S3542C7[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__7S3542C7[] = {
  ABISELECT(1056,628),
  ABISELECT(848,508),
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C8__7S3542C7[] = {
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C8__A1__7S3542C7[] = {
  ABISELECT(720,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C9D1Ev,_ZThn432_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C9D0Ev,_ZThn432_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A1__7S3542C7[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn720_N8S3542C10D1Ev,_ZThn432_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn720_N8S3542C10D0Ev,_ZThn432_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C8__7S3542C7[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C8__7S3542C7[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn848_N7S3542C8D1Ev,_ZThn508_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn848_N7S3542C8D0Ev,_ZThn508_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C8__7S3542C7[] = {
  ABISELECT(-848,-508),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-848,-508),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C8__7S3542C7[] = {
  0,
  0,
  ABISELECT(-1056,-628),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C7[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__7S3542C7[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
static  VTT_ENTRY vtt_S3542C7[] = {
  {&(_ZTV7S3542C7[5]),  5,36},
  {&(_tg__ZTV7S3542C8__7S3542C7[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C8__7S3542C7[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C8__A1__7S3542C7[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A1__7S3542C7[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C8__7S3542C7[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C8__7S3542C7[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C8__7S3542C7[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C8__7S3542C7[4]),  4,6},
  {&(_ZTV7S3542C7[16]),  16,36},
  {&(_ZTV7S3542C7[26]),  26,36},
  {&(_ZTV7S3542C7[34]),  34,36},
  {&(_tg__ZTV7S3542C9__7S3542C7[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__7S3542C7[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S3542C7[];
extern  VTBL_ENTRY _ZTV7S3542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C7[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S3542C8D0Ev,_ZThn508_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S3542C8D1Ev,_ZThn508_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S3542C10D0Ev,_ZThn432_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N8S3542C10D1Ev,_ZThn432_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C9D0Ev,_ZThn432_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C9D1Ev,_ZThn432_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S3542C7D0Ev,_ZThn508_N7S3542C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N7S3542C7D1Ev,_ZThn508_N7S3542C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C7 = {  "S3542C7", // class name
  bases_S3542C7, 9,
  &(vtc_S3542C7[0]), // expected_vtbl_contents
  &(vtt_S3542C7[0]), // expected_vtt_contents
  ABISELECT(1120,664), // object size
  NSPAIRA(_ZTI7S3542C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3542C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3542C7),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C3  : virtual S3542C4 , S3542C6 , virtual S3542C7 , S3542C8 , S3542C5 {
  char  :0;
  char s3542c3f1;
  int s3542c3f2:10;
  char s3542c3f3;
  int s3542c3f4;
  virtual  ~S3542C3(); // _ZN7S3542C3D2Ev
  virtual void  v6(); // _ZN7S3542C32v6Ev
  virtual void  v7(); // _ZN7S3542C32v7Ev
  S3542C3(); // tgen
};
//SIG(-1 S3542C3) C1{ VBC2{ VBC3{ BC4{ v3 v4 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC4 VBC5{ BC6{ VBC3 VBC7{ VBC3 BC4 vd Fi FC3 Fi} BC8{ BC7 vd Fi Fp Fi[2]} VBC4 vd v5 FU9{ m Fi[2] FL}} vd v6 FD[3] Fi Fc FC7 Fi:9 Fc[5] Fi Fp[9]} BC6 BC3 vd v1 v2 Fc:0 Fc Fi:10 Fc Fi}


 S3542C3 ::~S3542C3(){ note_dtor("S3542C3", this);}
void  S3542C3 ::v6(){vfunc_called(this, "_ZN7S3542C32v6Ev");}
void  S3542C3 ::v7(){vfunc_called(this, "_ZN7S3542C32v7Ev");}
S3542C3 ::S3542C3(){ note_ctor("S3542C3", this);} // tgen

static void Test_S3542C3()
{
  extern Class_Descriptor cd_S3542C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,235)];
    init_test(&cd_S3542C3, buf);
    S3542C3 *dp, &lv = *(dp=new (buf) S3542C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,936), "sizeof(S3542C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C3)");
    /*is_ambiguous_... S3542C3::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(448,272), "S3542C3");
    check_base_class_offset(lv, (S3542C5*)(S3542C4*), ABISELECT(448,272), "S3542C3");
    check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C7*), ABISELECT(448,272), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(448,272), "S3542C3");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(448,272), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*), ABISELECT(448,272), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(448,272), "S3542C3");
    check_base_class_offset(lv, (S3542C4*), ABISELECT(424,264), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*), 0, "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(1296,780), "S3542C3");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C7*), ABISELECT(1296,780), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*), ABISELECT(1296,780), "S3542C3");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(576,348), "S3542C3");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(576,348), "S3542C3");
    check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(576,348), "S3542C3");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C7*), ABISELECT(1504,900), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*), ABISELECT(1504,900), "S3542C3");
    check_base_class_offset(lv, (S3542C8*)(S3542C7*), ABISELECT(576,348), "S3542C3");
    check_base_class_offset(lv, (S3542C7*), ABISELECT(576,348), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(64,36), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(64,36), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*), ABISELECT(64,36), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C8*), ABISELECT(64,36), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(288,180), "S3542C3");
    /*is_ambiguous_... S3542C3::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C5*), ABISELECT(288,180), "S3542C3");
    check_field_offset(lv, s3542c3f1, ABISELECT(416,256), "S3542C3.s3542c3f1");
    set_bf_and_test(lv, s3542c3f2, ABISELECT(417,257), 0, 10, 1, "S3542C3");
    set_bf_and_test(lv, s3542c3f2, ABISELECT(417,257), 0, 10, hide_sll(1LL<<9), "S3542C3");
    check_field_offset(lv, s3542c3f3, ABISELECT(419,259), "S3542C3.s3542c3f3");
    check_field_offset(lv, s3542c3f4, ABISELECT(420,260), "S3542C3.s3542c3f4");
    test_class_info(&lv, &cd_S3542C3);
    dp->~S3542C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C3(Test_S3542C3, "S3542C3", ABISELECT(1568,936));

#else // __cplusplus

extern void _ZN7S3542C3C1Ev();
extern void _ZN7S3542C3D2Ev();
Name_Map name_map_S3542C3[] = {
  NSPAIR(_ZN7S3542C3C1Ev),
  NSPAIR(_ZN7S3542C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C4;
extern VTBL_ENTRY _ZTI7S3542C4[];
extern  VTBL_ENTRY _ZTV7S3542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C4[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C7;
extern VTBL_ENTRY _ZTI7S3542C7[];
extern  VTBL_ENTRY _ZTV7S3542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C7[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
static Base_Class bases_S3542C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(448,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(448,272), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3542C4,    ABISELECT(424,264), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(1296,780), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(1296,780), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(1504,900), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3542C8,    ABISELECT(576,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3542C7,    ABISELECT(576,348), //bcp->offset
    44, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(64,36), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(288,180), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3542C3[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C3D1Ev();
extern void _ZN7S3542C3D0Ev();
extern void _ZN7S3542C32v6Ev();
extern void _ZN7S3542C32v7Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn64_N7S3542C3D1Ev,_ZThn36_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S3542C3D0Ev,_ZThn36_N7S3542C3D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn288_N7S3542C3D1Ev,_ZThn180_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn288_N7S3542C3D0Ev,_ZThn180_N7S3542C3D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn424_N7S3542C3D1Ev,_ZThn264_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn424_N7S3542C3D0Ev,_ZThn264_N7S3542C3D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn448_N7S3542C3D1Ev,_ZThn272_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn448_N7S3542C3D0Ev,_ZThn272_N7S3542C3D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn576_N7S3542C3D1Ev,_ZThn348_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn576_N7S3542C3D0Ev,_ZThn348_N7S3542C3D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn1296_N7S3542C3D1Ev,_ZThn780_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn1296_N7S3542C3D0Ev,_ZThn780_N7S3542C3D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY vtc_S3542C3[] = {
  ABISELECT(1504,900),
  ABISELECT(1296,780),
  ABISELECT(576,348),
  ABISELECT(448,272),
  ABISELECT(424,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v7Ev,
  ABISELECT(1440,864),
  ABISELECT(1232,744),
  ABISELECT(384,236),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C3D1Ev,_ZThn36_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C3D0Ev,_ZThn36_N7S3542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S3542C3D1Ev,_ZThn180_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S3542C3D0Ev,_ZThn180_N7S3542C3D0Ev),
  ABISELECT(-424,-264),
  ABISELECT(24,8),
  ABISELECT(-424,-264),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev),
  ABISELECT(-448,-272),
  0,
  0,
  ABISELECT(-448,-272),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev),
  0,
  0,
  ABISELECT(-576,-348),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-576,-348),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
  ABISELECT(-1296,-780),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1296,-780),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev),
  0,
  0,
  ABISELECT(-1504,-900),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S3542C3[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__A1__7S3542C3[] = {
  ABISELECT(1440,864),
  ABISELECT(1232,744),
  ABISELECT(384,236),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C8__A1__7S3542C3[] = {
  ABISELECT(384,236),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C8__A2__7S3542C3[] = {
  ABISELECT(384,236),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn384_N7S3542C9D1Ev,_ZThn236_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn384_N7S3542C9D0Ev,_ZThn236_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A2__7S3542C3[] = {
  ABISELECT(-384,-236),
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn384_N8S3542C10D1Ev,_ZThn236_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn384_N8S3542C10D0Ev,_ZThn236_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C8__A1__7S3542C3[] = {
  ABISELECT(-384,-236),
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S3542C8D1Ev,_ZThn236_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn384_N7S3542C8D0Ev,_ZThn236_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C8__A1__7S3542C3[] = {
  ABISELECT(-384,-236),
  0,
  0,
  ABISELECT(-384,-236),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn1232_N7S3542C8D1Ev,_ZThn744_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn1232_N7S3542C8D0Ev,_ZThn744_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C8__A1__7S3542C3[] = {
  ABISELECT(-1232,-744),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1232,-744),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C8__A1__7S3542C3[] = {
  0,
  0,
  ABISELECT(-1440,-864),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C4D1Ev();
extern void _ZN7S3542C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C4__7S3542C3[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C4D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C4__7S3542C3[] = {
  ABISELECT(-24,-8),
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C7D1Ev();
extern void _ZN7S3542C7D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__7S3542C3[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C7__7S3542C3[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C87S3542C7__7S3542C3[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C3[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__7S3542C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C87S3542C7__7S3542C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C87S3542C7__7S3542C3[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C87S3542C7__7S3542C3[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C7__7S3542C3[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C7__7S3542C3[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C7__7S3542C3[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C3[] = {
  ABISELECT(-848,-508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__7S3542C3[] = {
  ABISELECT(848,508),
  0,
  0,
  ABISELECT(848,508),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
static  VTT_ENTRY vtt_S3542C3[] = {
  {&(_ZTV7S3542C3[7]),  7,76},
  {&(_tg__ZTV7S3542C8__A1__7S3542C3[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C8__A1__7S3542C3[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C8__A2__7S3542C3[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A2__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C8__A1__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C8__A1__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C8__A1__7S3542C3[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C8__A1__7S3542C3[4]),  4,6},
  {&(_ZTV7S3542C3[33]),  33,76},
  {&(_ZTV7S3542C3[40]),  40,76},
  {&(_ZTV7S3542C3[54]),  54,76},
  {&(_ZTV7S3542C3[66]),  66,76},
  {&(_ZTV7S3542C3[74]),  74,76},
  {&(_ZTV7S3542C3[18]),  18,76},
  {&(_tg__ZTV7S3542C4__7S3542C3[3]),  3,5},
  {&(_tg__ZTV7S3542C5__7S3542C4__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C7__7S3542C3[5]),  5,11},
  {&(_tg__ZTV7S3542C87S3542C7__7S3542C3[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C87S3542C7__7S3542C3[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C3[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C87S3542C7__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C87S3542C7__7S3542C3[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C87S3542C7__7S3542C3[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C7__7S3542C3[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C7__7S3542C3[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C7__7S3542C3[4]),  4,6},
  {&(_tg__ZTV7S3542C9__7S3542C3[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__7S3542C3[5]),  5,9},
};
extern VTBL_ENTRY _ZTI7S3542C3[];
extern  VTBL_ENTRY _ZTV7S3542C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C3[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N7S3542C8D0Ev,_ZThn744_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1232_N7S3542C8D1Ev,_ZThn744_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3542C8D0Ev,_ZThn236_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3542C8D1Ev,_ZThn236_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S3542C10D0Ev,_ZThn236_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S3542C10D1Ev,_ZThn236_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3542C9D0Ev,_ZThn236_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3542C9D1Ev,_ZThn236_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N7S3542C3D0Ev,_ZThn780_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N7S3542C3D1Ev,_ZThn780_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S3542C3D0Ev,_ZThn348_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S3542C3D1Ev,_ZThn348_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S3542C3D0Ev,_ZThn272_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S3542C3D1Ev,_ZThn272_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S3542C3D0Ev,_ZThn264_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn424_N7S3542C3D1Ev,_ZThn264_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C3 = {  "S3542C3", // class name
  bases_S3542C3, 18,
  &(vtc_S3542C3[0]), // expected_vtbl_contents
  &(vtt_S3542C3[0]), // expected_vtt_contents
  ABISELECT(1568,936), // object size
  NSPAIRA(_ZTI7S3542C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3542C3),76, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3542C3),31, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C12  : virtual S3542C8 , S3542C9 {
  char s3542c12f0;
  ::S3542C9 s3542c12f1;
  char s3542c12f2;
  virtual  ~S3542C12(); // _ZN8S3542C12D2Ev
  virtual void  v8(); // _ZN8S3542C122v8Ev
  virtual void  v9(); // _ZN8S3542C122v9Ev
  S3542C12(); // tgen
};
//SIG(-1 S3542C12) C1{ VBC2{ VBC3{ BC4{ v3 v4 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC3 BC4 vd Fi FC3 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC4 vd v5 FU7{ m Fi[2] FL}} BC5 vd v1 v2 Fc FC5 Fc}


 S3542C12 ::~S3542C12(){ note_dtor("S3542C12", this);}
void  S3542C12 ::v8(){vfunc_called(this, "_ZN8S3542C122v8Ev");}
void  S3542C12 ::v9(){vfunc_called(this, "_ZN8S3542C122v9Ev");}
S3542C12 ::S3542C12(){ note_ctor("S3542C12", this);} // tgen

static void Test_S3542C12()
{
  extern Class_Descriptor cd_S3542C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(75,176)];
    init_test(&cd_S3542C12, buf);
    S3542C12 *dp, &lv = *(dp=new (buf) S3542C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1184,700), "sizeof(S3542C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C12)");
    check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(784,468), "S3542C12");
    check_base_class_offset(lv, (S3542C5*)(S3542C8*), ABISELECT(784,468), "S3542C12");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(784,468), "S3542C12");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(784,468), "S3542C12");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(784,468), "S3542C12");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(912,544), "S3542C12");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*), ABISELECT(912,544), "S3542C12");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(560,324), "S3542C12");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(560,324), "S3542C12");
    check_base_class_offset(lv, (S3542C10*)(S3542C8*), ABISELECT(560,324), "S3542C12");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*), ABISELECT(1120,664), "S3542C12");
    check_base_class_offset(lv, (S3542C8*), ABISELECT(560,324), "S3542C12");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), 0, "S3542C12");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*), 0, "S3542C12");
    check_field_offset(lv, s3542c12f0, ABISELECT(196,120), "S3542C12.s3542c12f0");
    check_field_offset(lv, s3542c12f1, ABISELECT(208,124), "S3542C12.s3542c12f1");
    check_field_offset(lv, s3542c12f2, ABISELECT(544,320), "S3542C12.s3542c12f2");
    test_class_info(&lv, &cd_S3542C12);
    dp->~S3542C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C12(Test_S3542C12, "S3542C12", ABISELECT(1184,700));

#else // __cplusplus

extern void _ZN8S3542C12C1Ev();
extern void _ZN8S3542C12D2Ev();
Name_Map name_map_S3542C12[] = {
  NSPAIR(_ZN8S3542C12C1Ev),
  NSPAIR(_ZN8S3542C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
static Base_Class bases_S3542C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(784,468), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(784,468), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(912,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(912,544), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(560,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
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(1120,664), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3542C8,    ABISELECT(560,324), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S3542C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3542C12[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C12D1Ev();
extern void _ZN8S3542C12D0Ev();
extern void _ZN8S3542C122v8Ev();
extern void _ZN8S3542C122v9Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn560_N8S3542C12D1Ev,_ZThn324_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn560_N8S3542C12D0Ev,_ZThn324_N8S3542C12D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn784_N8S3542C12D1Ev,_ZThn468_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn784_N8S3542C12D0Ev,_ZThn468_N8S3542C12D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn912_N8S3542C12D1Ev,_ZThn544_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn912_N8S3542C12D0Ev,_ZThn544_N8S3542C12D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY vtc_S3542C12[] = {
  ABISELECT(1120,664),
  ABISELECT(912,544),
  ABISELECT(560,324),
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v8Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v9Ev,
  0,
  ABISELECT(-560,-324),
  0,
  0,
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev),
  ABISELECT(-912,-544),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-912,-544),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev),
  0,
  0,
  ABISELECT(-1120,-664),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S3542C12[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__A__8S3542C12[] = {
  ABISELECT(784,468),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn784_N7S3542C9D1Ev,_ZThn468_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn784_N7S3542C9D0Ev,_ZThn468_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__A__8S3542C12[] = {
  ABISELECT(-784,-468),
  0,
  0,
  ABISELECT(-784,-468),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__8S3542C12[] = {
  ABISELECT(560,340),
  ABISELECT(352,220),
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C8__8S3542C12[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C8__A1__8S3542C12[] = {
  ABISELECT(224,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S3542C9D1Ev,_ZThn144_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn224_N7S3542C9D0Ev,_ZThn144_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A1__8S3542C12[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S3542C10D1Ev,_ZThn144_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S3542C10D0Ev,_ZThn144_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C8__8S3542C12[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn224_N7S3542C8D1Ev,_ZThn144_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn224_N7S3542C8D0Ev,_ZThn144_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C8__8S3542C12[] = {
  ABISELECT(-224,-144),
  0,
  0,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn352_N7S3542C8D1Ev,_ZThn220_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn352_N7S3542C8D0Ev,_ZThn220_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C8__8S3542C12[] = {
  ABISELECT(-352,-220),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C8__8S3542C12[] = {
  0,
  0,
  ABISELECT(-560,-340),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C12[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__8S3542C12[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
static  VTT_ENTRY vtt_S3542C12[] = {
  {&(_ZTV8S3542C12[6]),  6,51},
  {&(_tg__ZTV7S3542C9__A__8S3542C12[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__A__8S3542C12[5]),  5,9},
  {&(_ZTV8S3542C12[21]),  21,51},
  {&(_ZTV8S3542C12[31]),  31,51},
  {&(_ZTV8S3542C12[41]),  41,51},
  {&(_ZTV8S3542C12[49]),  49,51},
  {&(_tg__ZTV7S3542C8__8S3542C12[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C8__8S3542C12[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C8__A1__8S3542C12[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A1__8S3542C12[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C8__8S3542C12[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C8__8S3542C12[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C8__8S3542C12[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C8__8S3542C12[4]),  4,6},
  {&(_tg__ZTV7S3542C9__8S3542C12[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__8S3542C12[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3542C12[];
extern  VTBL_ENTRY _ZTV8S3542C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C12[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3542C8D0Ev,_ZThn220_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3542C8D1Ev,_ZThn220_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C8D0Ev,_ZThn144_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C8D1Ev,_ZThn144_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3542C10D0Ev,_ZThn144_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S3542C10D1Ev,_ZThn144_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C9D0Ev,_ZThn144_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3542C9D0Ev,_ZThn468_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S3542C9D1Ev,_ZThn144_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3542C9D1Ev,_ZThn468_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S3542C12D0Ev,_ZThn544_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S3542C12D1Ev,_ZThn544_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3542C12D0Ev,_ZThn468_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3542C12D1Ev,_ZThn468_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3542C12D0Ev,_ZThn324_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3542C12D1Ev,_ZThn324_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C12 = {  "S3542C12", // class name
  bases_S3542C12, 11,
  &(vtc_S3542C12[0]), // expected_vtbl_contents
  &(vtt_S3542C12[0]), // expected_vtt_contents
  ABISELECT(1184,700), // object size
  NSPAIRA(_ZTI8S3542C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3542C12),51, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3542C12),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C14  : virtual S3542C6 , S3542C8 , S3542C5 , virtual S3542C4 , S3542C9 {
  int s3542c14f0;
  int s3542c14f1;
  int s3542c14f2;
  virtual  ~S3542C14(); // _ZN8S3542C14D2Ev
  virtual void  v10(); // _ZN8S3542C143v10Ev
  S3542C14(); // tgen
};
//SIG(-1 S3542C14) C1{ VBC2{ v2 v3 Fp Fi FD Fi[2] Fc} BC3{ VBC4{ BC2 vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC5{ VBC4 BC2 vd Fi FC4 Fi} BC6{ BC5 vd Fi Fp Fi[2]} VBC2 vd v4 FU7{ m Fi[2] FL}} BC4 VBC8{ VBC4 Fi} BC5 vd v1 Fi Fi Fi}


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

static void Test_S3542C14()
{
  extern Class_Descriptor cd_S3542C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(62,149)];
    init_test(&cd_S3542C14, buf);
    S3542C14 *dp, &lv = *(dp=new (buf) S3542C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(976,592), "sizeof(S3542C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C14)");
    /*is_ambiguous_... S3542C14::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*), ABISELECT(560,352), "S3542C14");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*), ABISELECT(560,352), "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(624,388), "S3542C14");
    check_base_class_offset(lv, (S3542C5*)(S3542C8*), ABISELECT(624,388), "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(624,388), "S3542C14");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(624,388), "S3542C14");
    check_base_class_offset(lv, (S3542C5*)(S3542C4*), ABISELECT(624,388), "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(624,388), "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(752,464), "S3542C14");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*), ABISELECT(752,464), "S3542C14");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*), 0, "S3542C14");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*), 0, "S3542C14");
    check_base_class_offset(lv, (S3542C10*)(S3542C8*), 0, "S3542C14");
    check_base_class_offset(lv, (S3542C8*), 0, "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(224,144), "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C5*), ABISELECT(224,144), "S3542C14");
    check_base_class_offset(lv, (S3542C4*), ABISELECT(952,584), "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(352,220), "S3542C14");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*), ABISELECT(352,220), "S3542C14");
    check_field_offset(lv, s3542c14f0, ABISELECT(548,340), "S3542C14.s3542c14f0");
    check_field_offset(lv, s3542c14f1, ABISELECT(552,344), "S3542C14.s3542c14f1");
    check_field_offset(lv, s3542c14f2, ABISELECT(556,348), "S3542C14.s3542c14f2");
    test_class_info(&lv, &cd_S3542C14);
    dp->~S3542C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C14(Test_S3542C14, "S3542C14", ABISELECT(976,592));

#else // __cplusplus

extern void _ZN8S3542C14C1Ev();
extern void _ZN8S3542C14D2Ev();
Name_Map name_map_S3542C14[] = {
  NSPAIR(_ZN8S3542C14C1Ev),
  NSPAIR(_ZN8S3542C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C4;
extern VTBL_ENTRY _ZTI7S3542C4[];
extern  VTBL_ENTRY _ZTV7S3542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C4[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
static Base_Class bases_S3542C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(560,352), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    ABISELECT(624,388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(624,388), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(752,464), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(752,464), //bcp->offset
    40, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3542C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3542C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3542C8,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(224,144), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C4,    ABISELECT(952,584), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3542C6,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(352,220), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3542C14[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C14D1Ev();
extern void _ZN8S3542C14D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn224_N8S3542C14D1Ev,_ZThn144_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn224_N8S3542C14D0Ev,_ZThn144_N8S3542C14D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn624_N8S3542C14D1Ev,_ZThn388_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn624_N8S3542C14D0Ev,_ZThn388_N8S3542C14D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn752_N8S3542C14D1Ev,_ZThn464_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn752_N8S3542C14D0Ev,_ZThn464_N8S3542C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn952_N8S3542C14D1Ev,_ZThn584_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn952_N8S3542C14D0Ev,_ZThn584_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3542C14[] = {
  ABISELECT(952,584),
  ABISELECT(560,352),
  ABISELECT(752,464),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S3542C14D1Ev,_ZThn144_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S3542C14D0Ev,_ZThn144_N8S3542C14D0Ev),
  ABISELECT(272,168),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev),
  0,
  0,
  ABISELECT(-560,-352),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev),
  ABISELECT(-752,-464),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-752,-464),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev),
  ABISELECT(-952,-584),
  ABISELECT(-328,-196),
  ABISELECT(-952,-584),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S3542C14[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__8S3542C14[] = {
  ABISELECT(560,352),
  ABISELECT(752,464),
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C8__8S3542C14[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C8__A1__8S3542C14[] = {
  ABISELECT(624,388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn624_N7S3542C9D1Ev,_ZThn388_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn624_N7S3542C9D0Ev,_ZThn388_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A1__8S3542C14[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn624_N8S3542C10D1Ev,_ZThn388_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn624_N8S3542C10D0Ev,_ZThn388_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C8__8S3542C14[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn624_N7S3542C8D1Ev,_ZThn388_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn624_N7S3542C8D0Ev,_ZThn388_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C8__8S3542C14[] = {
  ABISELECT(-624,-388),
  0,
  0,
  ABISELECT(-624,-388),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn752_N7S3542C8D1Ev,_ZThn464_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn752_N7S3542C8D0Ev,_ZThn464_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C8__8S3542C14[] = {
  ABISELECT(-752,-464),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-752,-464),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C8__8S3542C14[] = {
  0,
  0,
  ABISELECT(-560,-352),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__A__8S3542C14[] = {
  ABISELECT(272,168),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn272_N7S3542C9D1Ev,_ZThn168_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn272_N7S3542C9D0Ev,_ZThn168_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__A__8S3542C14[] = {
  ABISELECT(-272,-168),
  0,
  0,
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C14[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__8S3542C14[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C4D1Ev();
extern void _ZN7S3542C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C4__8S3542C14[] = {
  ABISELECT(-328,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C4D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C4__8S3542C14[] = {
  ABISELECT(328,196),
  0,
  0,
  ABISELECT(328,196),
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev),
};
static  VTT_ENTRY vtt_S3542C14[] = {
  {&(_ZTV8S3542C14[6]),  6,56},
  {&(_tg__ZTV7S3542C8__8S3542C14[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C8__8S3542C14[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C8__A1__8S3542C14[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A1__8S3542C14[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C8__8S3542C14[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C8__8S3542C14[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C8__8S3542C14[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C8__8S3542C14[4]),  4,6},
  {&(_tg__ZTV7S3542C9__A__8S3542C14[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__A__8S3542C14[5]),  5,9},
  {&(_ZTV8S3542C14[29]),  29,56},
  {&(_ZTV8S3542C14[36]),  36,56},
  {&(_ZTV8S3542C14[46]),  46,56},
  {&(_ZTV8S3542C14[54]),  54,56},
  {&(_ZTV8S3542C14[21]),  21,56},
  {&(_tg__ZTV7S3542C9__8S3542C14[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__8S3542C14[5]),  5,9},
  {&(_tg__ZTV7S3542C4__8S3542C14[3]),  3,5},
  {&(_tg__ZTV7S3542C5__7S3542C4__8S3542C14[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3542C14[];
extern  VTBL_ENTRY _ZTV8S3542C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C14[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N7S3542C8D0Ev,_ZThn464_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N7S3542C8D1Ev,_ZThn464_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3542C8D0Ev,_ZThn388_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3542C8D1Ev,_ZThn388_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3542C10D0Ev,_ZThn388_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3542C10D1Ev,_ZThn388_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S3542C9D0Ev,_ZThn168_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3542C9D0Ev,_ZThn388_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S3542C9D1Ev,_ZThn168_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn624_N7S3542C9D1Ev,_ZThn388_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn952_N8S3542C14D0Ev,_ZThn584_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn952_N8S3542C14D1Ev,_ZThn584_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S3542C14D0Ev,_ZThn464_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn752_N8S3542C14D1Ev,_ZThn464_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3542C14D0Ev,_ZThn388_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn624_N8S3542C14D1Ev,_ZThn388_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C14 = {  "S3542C14", // class name
  bases_S3542C14, 14,
  &(vtc_S3542C14[0]), // expected_vtbl_contents
  &(vtt_S3542C14[0]), // expected_vtt_contents
  ABISELECT(976,592), // object size
  NSPAIRA(_ZTI8S3542C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3542C14),56, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3542C14),20, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C13  : S3542C14 {
  int s3542c13f0;
  long s3542c13f1;
  int s3542c13f2;
  __tsi64 s3542c13f3;
  virtual  ~S3542C13(); // _ZN8S3542C13D2Ev
  virtual void  v11(); // _ZN8S3542C133v11Ev
  S3542C13(); // tgen
};
//SIG(-1 S3542C13) C1{ BC2{ VBC3{ v2 v3 Fp Fi FD Fi[2] Fc} BC4{ VBC5{ BC3 vd Fp FL Fi Fc:8 Fc Fp Fs FD} VBC6{ VBC5 BC3 vd Fi FC5 Fi} BC7{ BC6 vd Fi Fp Fi[2]} VBC3 vd v4 FU8{ m Fi[2] FL}} BC5 VBC9{ VBC5 Fi} BC6 vd v5 Fi Fi Fi} vd v1 Fi Fl Fi FL}


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

static void Test_S3542C13()
{
  extern Class_Descriptor cd_S3542C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(64,154)];
    init_test(&cd_S3542C13, buf);
    S3542C13 *dp, &lv = *(dp=new (buf) S3542C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1008,612), "sizeof(S3542C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C13)");
    /*is_ambiguous_... S3542C14::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C14*), ABISELECT(592,372), "S3542C13");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C14*), ABISELECT(592,372), "S3542C13");
    /*is_ambiguous_... S3542C13::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(656,408), "S3542C13");
    check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C14*), ABISELECT(656,408), "S3542C13");
    /*is_ambiguous_... S3542C13::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(656,408), "S3542C13");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*), ABISELECT(656,408), "S3542C13");
    check_base_class_offset(lv, (S3542C5*)(S3542C4*), ABISELECT(656,408), "S3542C13");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C14*), ABISELECT(656,408), "S3542C13");
    /*is_ambiguous_... S3542C13::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(784,484), "S3542C13");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C14*), ABISELECT(784,484), "S3542C13");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*), 0, "S3542C13");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*), 0, "S3542C13");
    check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C14*), 0, "S3542C13");
    check_base_class_offset(lv, (S3542C8*)(S3542C14*), 0, "S3542C13");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*)(S3542C14*), ABISELECT(224,144), "S3542C13");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C14*), ABISELECT(224,144), "S3542C13");
    check_base_class_offset(lv, (S3542C4*)(S3542C14*), ABISELECT(984,604), "S3542C13");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C14*), ABISELECT(352,220), "S3542C13");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C14*), ABISELECT(352,220), "S3542C13");
    check_base_class_offset(lv, (S3542C14*), 0, "S3542C13");
    check_field_offset(lv, s3542c13f0, ABISELECT(560,352), "S3542C13.s3542c13f0");
    check_field_offset(lv, s3542c13f1, ABISELECT(568,356), "S3542C13.s3542c13f1");
    check_field_offset(lv, s3542c13f2, ABISELECT(576,360), "S3542C13.s3542c13f2");
    check_field_offset(lv, s3542c13f3, ABISELECT(584,364), "S3542C13.s3542c13f3");
    test_class_info(&lv, &cd_S3542C13);
    dp->~S3542C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C13(Test_S3542C13, "S3542C13", ABISELECT(1008,612));

#else // __cplusplus

extern void _ZN8S3542C13C1Ev();
extern void _ZN8S3542C13D2Ev();
Name_Map name_map_S3542C13[] = {
  NSPAIR(_ZN8S3542C13C1Ev),
  NSPAIR(_ZN8S3542C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C4;
extern VTBL_ENTRY _ZTI7S3542C4[];
extern  VTBL_ENTRY _ZTV7S3542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C4[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C14;
extern VTBL_ENTRY _ZTI8S3542C14[];
extern  VTBL_ENTRY _ZTV8S3542C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C14[];
static Base_Class bases_S3542C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(592,372), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(656,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(656,408), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(784,484), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(784,484), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3542C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3542C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3542C8,    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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(224,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(224,144), //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
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3542C4,    ABISELECT(984,604), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(352,220), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(352,220), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3542C14,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S3542C13[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C13D1Ev();
extern void _ZN8S3542C13D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
extern void _ZN8S3542C133v11Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn224_N8S3542C13D1Ev,_ZThn144_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn224_N8S3542C13D0Ev,_ZThn144_N8S3542C13D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn352_N8S3542C13D1Ev,_ZThn220_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn352_N8S3542C13D0Ev,_ZThn220_N8S3542C13D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn656_N8S3542C13D1Ev,_ZThn408_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn656_N8S3542C13D0Ev,_ZThn408_N8S3542C13D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn784_N8S3542C13D1Ev,_ZThn484_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn784_N8S3542C13D0Ev,_ZThn484_N8S3542C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn984_N8S3542C13D1Ev,_ZThn604_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn984_N8S3542C13D0Ev,_ZThn604_N8S3542C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3542C13[] = {
  ABISELECT(984,604),
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C13D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
  (VTBL_ENTRY)&_ZN8S3542C133v11Ev,
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S3542C13D1Ev,_ZThn144_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N8S3542C13D0Ev,_ZThn144_N8S3542C13D0Ev),
  ABISELECT(304,188),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C13D1Ev,_ZThn220_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C13D0Ev,_ZThn220_N8S3542C13D0Ev),
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev),
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev),
  ABISELECT(-984,-604),
  ABISELECT(-328,-196),
  ABISELECT(-984,-604),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S3542C13[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C14D1Ev();
extern void _ZN8S3542C14D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C14__8S3542C13[] = {
  ABISELECT(984,604),
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C88S3542C14__8S3542C13[] = {
  ABISELECT(592,372),
  ABISELECT(784,484),
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C88S3542C14__8S3542C13[] = {
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C88S3542C14__A1__8S3542C13[] = {
  ABISELECT(656,408),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn656_N7S3542C9D1Ev,_ZThn408_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn656_N7S3542C9D0Ev,_ZThn408_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C88S3542C14__A1__8S3542C13[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn656_N8S3542C10D1Ev,_ZThn408_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn656_N8S3542C10D0Ev,_ZThn408_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C88S3542C14__8S3542C13[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn656_N7S3542C8D1Ev,_ZThn408_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn656_N7S3542C8D0Ev,_ZThn408_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C88S3542C14__8S3542C13[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn784_N7S3542C8D1Ev,_ZThn484_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn784_N7S3542C8D0Ev,_ZThn484_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C88S3542C14__8S3542C13[] = {
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C88S3542C14__8S3542C13[] = {
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C14__A2__8S3542C13[] = {
  ABISELECT(304,188),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn304_N7S3542C9D1Ev,_ZThn188_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn304_N7S3542C9D0Ev,_ZThn188_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C14__A2__8S3542C13[] = {
  ABISELECT(-304,-188),
  0,
  0,
  ABISELECT(-304,-188),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__8S3542C14__8S3542C13[] = {
  0,
  0,
  ABISELECT(-592,-372),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn656_N8S3542C14D1Ev,_ZThn408_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn656_N8S3542C14D0Ev,_ZThn408_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C14__8S3542C13[] = {
  ABISELECT(-656,-408),
  0,
  0,
  ABISELECT(-656,-408),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn784_N8S3542C14D1Ev,_ZThn484_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn784_N8S3542C14D0Ev,_ZThn484_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C14__8S3542C13[] = {
  ABISELECT(-784,-484),
  0,
  0,
  ABISELECT(-128,-76),
  ABISELECT(-784,-484),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn984_N8S3542C14D1Ev,_ZThn604_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn984_N8S3542C14D0Ev,_ZThn604_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__8S3542C14__8S3542C13[] = {
  ABISELECT(-984,-604),
  ABISELECT(-328,-196),
  ABISELECT(-984,-604),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C9__A__8S3542C14__8S3542C13[] = {
  ABISELECT(304,188),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C13[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__8S3542C13[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C4D1Ev();
extern void _ZN7S3542C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C4__8S3542C13[] = {
  ABISELECT(-328,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C4D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C4__8S3542C13[] = {
  ABISELECT(328,196),
  0,
  0,
  ABISELECT(328,196),
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev),
};
static  VTT_ENTRY vtt_S3542C13[] = {
  {&(_ZTV8S3542C13[6]),  6,57},
  {&(_tg__ZTV8S3542C14__8S3542C13[6]),  6,12},
  {&(_tg__ZTV7S3542C88S3542C14__8S3542C13[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C88S3542C14__8S3542C13[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C88S3542C14__A1__8S3542C13[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C88S3542C14__A1__8S3542C13[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C88S3542C14__8S3542C13[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C88S3542C14__8S3542C13[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C88S3542C14__8S3542C13[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C88S3542C14__8S3542C13[4]),  4,6},
  {&(_tg__ZTV7S3542C98S3542C14__A2__8S3542C13[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C14__A2__8S3542C13[5]),  5,9},
  {&(_tg__ZTV7S3542C6__8S3542C14__8S3542C13[4]),  4,6},
  {&(_tg__ZTV7S3542C5__8S3542C14__8S3542C13[5]),  5,9},
  {&(_tg__ZTV7S3542C9__8S3542C14__8S3542C13[6]),  6,10},
  {&(_tg__ZTV7S3542C4__8S3542C14__8S3542C13[4]),  4,6},
  {&(_tg__ZTV7S3542C9__A__8S3542C14__8S3542C13[3]),  3,7},
  {&(_ZTV8S3542C13[30]),  30,57},
  {&(_ZTV8S3542C13[37]),  37,57},
  {&(_ZTV8S3542C13[47]),  47,57},
  {&(_ZTV8S3542C13[55]),  55,57},
  {&(_ZTV8S3542C13[22]),  22,57},
  {&(_tg__ZTV7S3542C9__8S3542C13[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__8S3542C13[5]),  5,9},
  {&(_tg__ZTV7S3542C4__8S3542C13[3]),  3,5},
  {&(_tg__ZTV7S3542C5__7S3542C4__8S3542C13[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S3542C13[];
extern  VTBL_ENTRY _ZTV8S3542C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C13[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S3542C14D0Ev,_ZThn604_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S3542C14D1Ev,_ZThn604_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3542C14D0Ev,_ZThn484_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3542C14D1Ev,_ZThn484_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3542C14D0Ev,_ZThn408_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3542C14D1Ev,_ZThn408_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3542C8D0Ev,_ZThn484_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S3542C8D1Ev,_ZThn484_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3542C8D0Ev,_ZThn408_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3542C8D1Ev,_ZThn408_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3542C10D0Ev,_ZThn408_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3542C10D1Ev,_ZThn408_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3542C9D0Ev,_ZThn188_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3542C9D0Ev,_ZThn408_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3542C9D1Ev,_ZThn188_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S3542C9D1Ev,_ZThn408_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S3542C13D0Ev,_ZThn604_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn984_N8S3542C13D1Ev,_ZThn604_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3542C13D0Ev,_ZThn484_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N8S3542C13D1Ev,_ZThn484_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3542C13D0Ev,_ZThn408_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S3542C13D1Ev,_ZThn408_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C13 = {  "S3542C13", // class name
  bases_S3542C13, 15,
  &(vtc_S3542C13[0]), // expected_vtbl_contents
  &(vtt_S3542C13[0]), // expected_vtt_contents
  ABISELECT(1008,612), // object size
  NSPAIRA(_ZTI8S3542C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3542C13),57, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3542C13),26, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C2  : S3542C3 , S3542C9 , S3542C7 , S3542C12 , S3542C13 {
  char s3542c2f0;
  char s3542c2f1;
  int s3542c2f2;
  long double s3542c2f3[4];
  void *s3542c2f4;
  __tsi64 s3542c2f5:54;
  virtual  ~S3542C2(); // _ZN7S3542C2D2Ev
  virtual void  v12(); // _ZN7S3542C23v12Ev
  S3542C2(); // tgen
};
//SIG(-1 S3542C2) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC5 VBC6{ BC7{ VBC4 VBC8{ VBC4 BC5 vd Fi FC4 Fi} BC9{ BC8 vd Fi Fp Fi[2]} VBC5 vd v4 FU10{ m Fi[2] FL}} vd v5 FD[3] Fi Fc FC8 Fi:9 Fc[5] Fi Fp[9]} BC7 BC4 vd v6 v7 Fc:0 Fc Fi:10 Fc Fi} BC8 BC6 BC11{ VBC7 BC8 vd v8 v9 Fc FC8 Fc} BC12{ BC13{ VBC5 BC7 BC4 VBC3 BC8 vd v10 Fi Fi Fi} vd v11 Fi Fl Fi FL} vd v1 Fc Fc Fi FD[4] Fp FL:54}


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

static void Test_S3542C2()
{
  extern Class_Descriptor cd_S3542C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(249,600)];
    init_test(&cd_S3542C2, buf);
    S3542C2 *dp, &lv = *(dp=new (buf) S3542C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3968,2396), "sizeof(S3542C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C2)");
    /*is_ambiguous_... S3542C2::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(2624,1588), "S3542C2");
    check_base_class_offset(lv, (S3542C5*)(S3542C4*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C7*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C3*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C3*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C7*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C12*), ABISELECT(2624,1588), "S3542C2");
    check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(2624,1588), "S3542C2");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(2624,1588), "S3542C2");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C14*)(S3542C13*), ABISELECT(2624,1588), "S3542C2");
    check_base_class_offset(lv, (S3542C4*)(S3542C3*), ABISELECT(2608,1580), "S3542C2");
    check_base_class_offset(lv, (S3542C4*)(S3542C14*)(S3542C13*), ABISELECT(2608,1580), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C3*), 0, "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(3472,2096), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C7*), ABISELECT(3472,2096), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C3*), ABISELECT(3472,2096), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C7*), ABISELECT(3472,2096), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*), ABISELECT(3472,2096), "S3542C2");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(3472,2096), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2752,1664), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2752,1664), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2752,1664), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C7*), ABISELECT(3680,2216), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C3*), ABISELECT(3680,2216), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C7*), ABISELECT(3680,2216), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*), ABISELECT(3680,2216), "S3542C2");
    /*is_ambiguous_... S3542C14::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C14*)(S3542C13*), ABISELECT(3680,2216), "S3542C2");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(3680,2216), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C8*)(S3542C7*), ABISELECT(2752,1664), "S3542C2");
    check_base_class_offset(lv, (S3542C7*)(S3542C3*), ABISELECT(2752,1664), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C3*), ABISELECT(64,36), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C3*), ABISELECT(64,36), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C3*), ABISELECT(64,36), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C8*)(S3542C3*), ABISELECT(64,36), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*)(S3542C3*), ABISELECT(288,180), "S3542C2");
    /*is_ambiguous_... S3542C3::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C3*), ABISELECT(288,180), "S3542C2");
    check_base_class_offset(lv, (S3542C3*), 0, "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(432,264), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*), ABISELECT(432,264), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(640,384), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(640,384), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(640,384), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C8*)(S3542C7*), ABISELECT(640,384), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C7*), ABISELECT(640,384), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(3744,2252), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(3744,2252), "S3542C2");
    /*is_ambiguous_... S3542C2::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*), ABISELECT(3744,2252), "S3542C2");
    check_base_class_offset(lv, (S3542C8*)(S3542C12*), ABISELECT(3744,2252), "S3542C2");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C12*), ABISELECT(1360,816), "S3542C2");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C12*), ABISELECT(1360,816), "S3542C2");
    check_base_class_offset(lv, (S3542C12*), ABISELECT(1360,816), "S3542C2");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(1920,1140), "S3542C2");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(1920,1140), "S3542C2");
    check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(1920,1140), "S3542C2");
    check_base_class_offset(lv, (S3542C8*)(S3542C14*)(S3542C13*), ABISELECT(1920,1140), "S3542C2");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*)(S3542C14*)(S3542C13*), ABISELECT(2144,1284), "S3542C2");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C14*)(S3542C13*), ABISELECT(2144,1284), "S3542C2");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C14*)(S3542C13*), ABISELECT(2272,1360), "S3542C2");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C14*)(S3542C13*), ABISELECT(2272,1360), "S3542C2");
    check_base_class_offset(lv, (S3542C14*)(S3542C13*), ABISELECT(1920,1140), "S3542C2");
    check_base_class_offset(lv, (S3542C13*), ABISELECT(1920,1140), "S3542C2");
    check_field_offset(lv, s3542c2f0, ABISELECT(2512,1512), "S3542C2.s3542c2f0");
    check_field_offset(lv, s3542c2f1, ABISELECT(2513,1513), "S3542C2.s3542c2f1");
    check_field_offset(lv, s3542c2f2, ABISELECT(2516,1516), "S3542C2.s3542c2f2");
    check_field_offset(lv, s3542c2f3, ABISELECT(2528,1520), "S3542C2.s3542c2f3");
    check_field_offset(lv, s3542c2f4, ABISELECT(2592,1568), "S3542C2.s3542c2f4");
    set_bf_and_test(lv, s3542c2f5, ABISELECT(2600,1572), 0, 54, 1, "S3542C2");
    set_bf_and_test(lv, s3542c2f5, ABISELECT(2600,1572), 0, 54, hide_sll(1LL<<53), "S3542C2");
    test_class_info(&lv, &cd_S3542C2);
    dp->~S3542C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C2(Test_S3542C2, "S3542C2", ABISELECT(3968,2396));

#else // __cplusplus

extern void _ZN7S3542C2C1Ev();
extern void _ZN7S3542C2D2Ev();
Name_Map name_map_S3542C2[] = {
  NSPAIR(_ZN7S3542C2C1Ev),
  NSPAIR(_ZN7S3542C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C4;
extern VTBL_ENTRY _ZTI7S3542C4[];
extern  VTBL_ENTRY _ZTV7S3542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C4[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C7;
extern VTBL_ENTRY _ZTI7S3542C7[];
extern  VTBL_ENTRY _ZTV7S3542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C7[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C3;
extern VTBL_ENTRY _ZTI7S3542C3[];
extern  VTBL_ENTRY _ZTV7S3542C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C3[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C7;
extern VTBL_ENTRY _ZTI7S3542C7[];
extern  VTBL_ENTRY _ZTV7S3542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C7[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C12;
extern VTBL_ENTRY _ZTI8S3542C12[];
extern  VTBL_ENTRY _ZTV8S3542C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C12[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C14;
extern VTBL_ENTRY _ZTI8S3542C14[];
extern  VTBL_ENTRY _ZTV8S3542C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C14[];
extern Class_Descriptor cd_S3542C13;
extern VTBL_ENTRY _ZTI8S3542C13[];
extern  VTBL_ENTRY _ZTV8S3542C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C13[];
static Base_Class bases_S3542C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(2624,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(2624,1588), //bcp->offset
    93, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3542C4,    ABISELECT(2608,1580), //bcp->offset
    87, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(3472,2096), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(3472,2096), //bcp->offset
    118, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(3680,2216), //bcp->offset
    128, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3542C8,    ABISELECT(2752,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3542C7,    ABISELECT(2752,1664), //bcp->offset
    102, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(64,36), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(288,180), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3542C3,    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
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(432,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(432,264), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3542C7,    ABISELECT(640,384), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(3744,2252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(3744,2252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(3744,2252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(3744,2252), //bcp->offset
    134, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(1360,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(1360,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3542C12,    ABISELECT(1360,816), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3542C6,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(2144,1284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(2144,1284), //bcp->offset
    74, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(2272,1360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(2272,1360), //bcp->offset
    80, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3542C14,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3542C13,    ABISELECT(1920,1140), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    70, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3542C2[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C2D1Ev();
extern void _ZN7S3542C2D0Ev();
extern void _ZN7S3542C32v6Ev();
extern void _ZN7S3542C32v7Ev();
extern void _ZN7S3542C23v12Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn64_N7S3542C2D1Ev,_ZThn36_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S3542C2D0Ev,_ZThn36_N7S3542C2D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn288_N7S3542C2D1Ev,_ZThn180_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn288_N7S3542C2D0Ev,_ZThn180_N7S3542C2D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn432_N7S3542C2D1Ev,_ZThn264_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn432_N7S3542C2D0Ev,_ZThn264_N7S3542C2D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn640_N7S3542C2D1Ev,_ZThn384_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn640_N7S3542C2D0Ev,_ZThn384_N7S3542C2D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn1360_N7S3542C2D1Ev,_ZThn816_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn1360_N7S3542C2D0Ev,_ZThn816_N7S3542C2D0Ev)();
extern void _ZN8S3542C122v8Ev();
extern void _ZN8S3542C122v9Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn1920_N7S3542C2D1Ev,_ZThn1140_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn1920_N7S3542C2D0Ev,_ZThn1140_N7S3542C2D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
extern void _ZN8S3542C133v11Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn2144_N7S3542C2D1Ev,_ZThn1284_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2144_N7S3542C2D0Ev,_ZThn1284_N7S3542C2D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn2272_N7S3542C2D1Ev,_ZThn1360_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2272_N7S3542C2D0Ev,_ZThn1360_N7S3542C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3542C2D1Ev,_ZTv0_n16_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2608_N7S3542C2D1Ev,_ZThn1580_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3542C2D0Ev,_ZTv0_n16_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn2608_N7S3542C2D0Ev,_ZThn1580_N7S3542C2D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C2D1Ev,_ZTv0_n20_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2624_N7S3542C2D1Ev,_ZThn1588_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C2D0Ev,_ZTv0_n20_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn2624_N7S3542C2D0Ev,_ZThn1588_N7S3542C2D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C2D1Ev,_ZThn1664_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C2D0Ev,_ZThn1664_N7S3542C2D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C2D1Ev,_ZTv0_n24_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn3472_N7S3542C2D1Ev,_ZThn2096_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C2D0Ev,_ZTv0_n24_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn3472_N7S3542C2D0Ev,_ZThn2096_N7S3542C2D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn3744_N7S3542C2D1Ev,_ZThn2252_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn3744_N7S3542C2D0Ev,_ZThn2252_N7S3542C2D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY vtc_S3542C2[] = {
  ABISELECT(3744,2252),
  ABISELECT(3680,2216),
  ABISELECT(3472,2096),
  ABISELECT(2752,1664),
  ABISELECT(2624,1588),
  ABISELECT(2608,1580),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3542C23v12Ev,
  ABISELECT(3616,2180),
  ABISELECT(3408,2060),
  ABISELECT(2560,1552),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C2D1Ev,_ZThn36_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C2D0Ev,_ZThn36_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S3542C2D1Ev,_ZThn180_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S3542C2D0Ev,_ZThn180_N7S3542C2D0Ev),
  ABISELECT(2192,1324),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3542C2D1Ev,_ZThn264_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3542C2D0Ev,_ZThn264_N7S3542C2D0Ev),
  ABISELECT(3040,1832),
  ABISELECT(2832,1712),
  ABISELECT(1984,1204),
  ABISELECT(-640,-384),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S3542C2D1Ev,_ZThn384_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S3542C2D0Ev,_ZThn384_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
  ABISELECT(2320,1400),
  ABISELECT(2112,1280),
  ABISELECT(2384,1436),
  ABISELECT(1264,772),
  ABISELECT(-1360,-816),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N7S3542C2D1Ev,_ZThn816_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N7S3542C2D0Ev,_ZThn816_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3542C122v8Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v9Ev,
  ABISELECT(688,440),
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N7S3542C2D1Ev,_ZThn1140_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N7S3542C2D0Ev,_ZThn1140_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
  (VTBL_ENTRY)&_ZN8S3542C133v11Ev,
  ABISELECT(-2144,-1284),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2144_N7S3542C2D1Ev,_ZThn1284_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2144_N7S3542C2D0Ev,_ZThn1284_N7S3542C2D0Ev),
  ABISELECT(352,228),
  ABISELECT(-2272,-1360),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N7S3542C2D1Ev,_ZThn1360_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N7S3542C2D0Ev,_ZThn1360_N7S3542C2D0Ev),
  ABISELECT(-2608,-1580),
  ABISELECT(16,8),
  ABISELECT(-2608,-1580),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C2D1Ev,_ZTv0_n16_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C2D0Ev,_ZTv0_n16_N7S3542C2D0Ev),
  ABISELECT(-2624,-1588),
  0,
  0,
  ABISELECT(-2624,-1588),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C2D1Ev,_ZTv0_n20_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C2D0Ev,_ZTv0_n20_N7S3542C2D0Ev),
  0,
  0,
  ABISELECT(-2752,-1664),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2752,-1664),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
  ABISELECT(-3472,-2096),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3472,-2096),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C2D1Ev,_ZTv0_n24_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C2D0Ev,_ZTv0_n24_N7S3542C2D0Ev),
  0,
  0,
  ABISELECT(-3680,-2216),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  0,
  ABISELECT(-3744,-2252),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-3744,-2252),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern VTBL_ENTRY _ZTV7S3542C2[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C3D1Ev();
extern void _ZN7S3542C3D0Ev();
extern void _ZN7S3542C32v6Ev();
extern void _ZN7S3542C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C3__7S3542C2[] = {
  ABISELECT(3680,2216),
  ABISELECT(3472,2096),
  ABISELECT(2752,1664),
  ABISELECT(2624,1588),
  ABISELECT(2608,1580),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v7Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C3__A1__7S3542C2[] = {
  ABISELECT(3616,2180),
  ABISELECT(3408,2060),
  ABISELECT(2560,1552),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C87S3542C3__A1__7S3542C2[] = {
  ABISELECT(2560,1552),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C87S3542C3__A2__7S3542C2[] = {
  ABISELECT(2560,1552),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn2560_N7S3542C9D1Ev,_ZThn1552_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn2560_N7S3542C9D0Ev,_ZThn1552_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C3__A2__7S3542C2[] = {
  ABISELECT(-2560,-1552),
  0,
  0,
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn2560_N8S3542C10D1Ev,_ZThn1552_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn2560_N8S3542C10D0Ev,_ZThn1552_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C87S3542C3__A1__7S3542C2[] = {
  ABISELECT(-2560,-1552),
  0,
  0,
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn2560_N7S3542C8D1Ev,_ZThn1552_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn2560_N7S3542C8D0Ev,_ZThn1552_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C87S3542C3__A1__7S3542C2[] = {
  ABISELECT(-2560,-1552),
  0,
  0,
  ABISELECT(-2560,-1552),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn3408_N7S3542C8D1Ev,_ZThn2060_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn3408_N7S3542C8D0Ev,_ZThn2060_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C87S3542C3__A1__7S3542C2[] = {
  ABISELECT(-3408,-2060),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3408,-2060),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C87S3542C3__A1__7S3542C2[] = {
  0,
  0,
  ABISELECT(-3616,-2180),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn2608_N7S3542C3D1Ev,_ZThn1580_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn2608_N7S3542C3D0Ev,_ZThn1580_N7S3542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__7S3542C3__7S3542C2[] = {
  ABISELECT(-2608,-1580),
  ABISELECT(16,8),
  ABISELECT(-2608,-1580),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn2624_N7S3542C3D1Ev,_ZThn1588_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn2624_N7S3542C3D0Ev,_ZThn1588_N7S3542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C3__7S3542C2[] = {
  ABISELECT(-2624,-1588),
  0,
  0,
  ABISELECT(-2624,-1588),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C3D1Ev,_ZThn1664_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C3D0Ev,_ZThn1664_N7S3542C3D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__7S3542C3__7S3542C2[] = {
  0,
  0,
  ABISELECT(-2752,-1664),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2752,-1664),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn3472_N7S3542C3D1Ev,_ZThn2096_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn3472_N7S3542C3D0Ev,_ZThn2096_N7S3542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C3__7S3542C2[] = {
  ABISELECT(-3472,-2096),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3472,-2096),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A4__7S3542C3__7S3542C2[] = {
  0,
  0,
  ABISELECT(-3680,-2216),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn64_N7S3542C3D1Ev,_ZThn36_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S3542C3D0Ev,_ZThn36_N7S3542C3D0Ev)();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__A1__7S3542C3__7S3542C2[] = {
  ABISELECT(3616,2180),
  ABISELECT(3408,2060),
  ABISELECT(2560,1552),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C3D1Ev,_ZThn36_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C3D0Ev,_ZThn36_N7S3542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__A__7S3542C2[] = {
  ABISELECT(2192,1324),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn2192_N7S3542C9D1Ev,_ZThn1324_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn2192_N7S3542C9D0Ev,_ZThn1324_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__A__7S3542C2[] = {
  ABISELECT(-2192,-1324),
  0,
  0,
  ABISELECT(-2192,-1324),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C7D1Ev();
extern void _ZN7S3542C7D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__A__7S3542C2[] = {
  ABISELECT(3040,1832),
  ABISELECT(2832,1712),
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C7__A2__7S3542C2[] = {
  ABISELECT(3040,1832),
  ABISELECT(2832,1712),
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C87S3542C7__A2__7S3542C2[] = {
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A4__7S3542C2[] = {
  ABISELECT(1984,1204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn1984_N7S3542C9D1Ev,_ZThn1204_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn1984_N7S3542C9D0Ev,_ZThn1204_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A4__7S3542C2[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn1984_N8S3542C10D1Ev,_ZThn1204_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn1984_N8S3542C10D0Ev,_ZThn1204_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__A2__7S3542C2[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn1984_N7S3542C8D1Ev,_ZThn1204_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn1984_N7S3542C8D0Ev,_ZThn1204_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C87S3542C7__A2__7S3542C2[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn2832_N7S3542C8D1Ev,_ZThn1712_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn2832_N7S3542C8D0Ev,_ZThn1712_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C87S3542C7__A2__7S3542C2[] = {
  ABISELECT(-2832,-1712),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2832,-1712),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C87S3542C7__A2__7S3542C2[] = {
  0,
  0,
  ABISELECT(-3040,-1832),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn1984_N7S3542C7D1Ev,_ZThn1204_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn1984_N7S3542C7D0Ev,_ZThn1204_N7S3542C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C7__A__7S3542C2[] = {
  ABISELECT(-1984,-1204),
  0,
  0,
  ABISELECT(-1984,-1204),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn2832_N7S3542C7D1Ev,_ZThn1712_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn2832_N7S3542C7D0Ev,_ZThn1712_N7S3542C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C7__A__7S3542C2[] = {
  ABISELECT(-2832,-1712),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2832,-1712),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C7__A__7S3542C2[] = {
  0,
  0,
  ABISELECT(-3040,-1832),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C12D1Ev();
extern void _ZN8S3542C12D0Ev();
extern void _ZN8S3542C122v8Ev();
extern void _ZN8S3542C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C12__7S3542C2[] = {
  ABISELECT(2320,1400),
  ABISELECT(2112,1280),
  ABISELECT(2384,1436),
  ABISELECT(1264,772),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v8Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v9Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C12__A6__7S3542C2[] = {
  ABISELECT(1264,772),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn1264_N7S3542C9D1Ev,_ZThn772_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn1264_N7S3542C9D0Ev,_ZThn772_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C12__A6__7S3542C2[] = {
  ABISELECT(-1264,-772),
  0,
  0,
  ABISELECT(-1264,-772),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn2384_N8S3542C12D1Ev,_ZThn1436_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn2384_N8S3542C12D0Ev,_ZThn1436_N8S3542C12D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__8S3542C12__7S3542C2[] = {
  0,
  ABISELECT(-2384,-1436),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-2384,-1436),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn1264_N8S3542C12D1Ev,_ZThn772_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn1264_N8S3542C12D0Ev,_ZThn772_N8S3542C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C12__7S3542C2[] = {
  ABISELECT(-1264,-772),
  0,
  0,
  ABISELECT(-1264,-772),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn2112_N8S3542C12D1Ev,_ZThn1280_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn2112_N8S3542C12D0Ev,_ZThn1280_N8S3542C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C12__7S3542C2[] = {
  ABISELECT(-2112,-1280),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2112,-1280),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__8S3542C12__7S3542C2[] = {
  0,
  0,
  ABISELECT(-2320,-1400),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C13D1Ev();
extern void _ZN8S3542C13D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
extern void _ZN8S3542C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C13__7S3542C2[] = {
  ABISELECT(688,440),
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C13D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
  (VTBL_ENTRY)&_ZN8S3542C133v11Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C14D1Ev();
extern void _ZN8S3542C14D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C148S3542C13__7S3542C2[] = {
  ABISELECT(688,440),
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C88S3542C148S3542C13__A4__7S3542C2[] = {
  ABISELECT(1760,1076),
  ABISELECT(1552,956),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C88S3542C148S3542C13__A4__7S3542C2[] = {
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C88S3542C148S3542C13__A7__7S3542C2[] = {
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn704_N7S3542C9D1Ev,_ZThn448_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn704_N7S3542C9D0Ev,_ZThn448_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C88S3542C148S3542C13__A7__7S3542C2[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn704_N8S3542C10D1Ev,_ZThn448_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn704_N8S3542C10D0Ev,_ZThn448_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C88S3542C148S3542C13__A4__7S3542C2[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn704_N7S3542C8D1Ev,_ZThn448_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn704_N7S3542C8D0Ev,_ZThn448_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C88S3542C148S3542C13__A4__7S3542C2[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn1552_N7S3542C8D1Ev,_ZThn956_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn1552_N7S3542C8D0Ev,_ZThn956_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C88S3542C148S3542C13__A4__7S3542C2[] = {
  ABISELECT(-1552,-956),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-956),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C88S3542C148S3542C13__A4__7S3542C2[] = {
  0,
  0,
  ABISELECT(-1760,-1076),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C148S3542C13__A8__7S3542C2[] = {
  ABISELECT(352,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn352_N7S3542C9D1Ev,_ZThn228_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn352_N7S3542C9D0Ev,_ZThn228_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C148S3542C13__A8__7S3542C2[] = {
  ABISELECT(-352,-228),
  0,
  0,
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__8S3542C148S3542C13__7S3542C2[] = {
  0,
  0,
  ABISELECT(-1760,-1076),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn704_N8S3542C14D1Ev,_ZThn448_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn704_N8S3542C14D0Ev,_ZThn448_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C148S3542C13__7S3542C2[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn1552_N8S3542C14D1Ev,_ZThn956_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn1552_N8S3542C14D0Ev,_ZThn956_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C148S3542C13__7S3542C2[] = {
  ABISELECT(-1552,-956),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-956),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn688_N8S3542C14D1Ev,_ZThn440_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn688_N8S3542C14D0Ev,_ZThn440_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__8S3542C148S3542C13__7S3542C2[] = {
  ABISELECT(-688,-440),
  ABISELECT(16,8),
  ABISELECT(-688,-440),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C9__A__8S3542C148S3542C13__7S3542C2[] = {
  ABISELECT(352,228),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__8S3542C13__7S3542C2[] = {
  0,
  0,
  ABISELECT(-1760,-1076),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn704_N8S3542C13D1Ev,_ZThn448_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn704_N8S3542C13D0Ev,_ZThn448_N8S3542C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C13__7S3542C2[] = {
  ABISELECT(-704,-448),
  0,
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn1552_N8S3542C13D1Ev,_ZThn956_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn1552_N8S3542C13D0Ev,_ZThn956_N8S3542C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C13__7S3542C2[] = {
  ABISELECT(-1552,-956),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1552,-956),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn688_N8S3542C13D1Ev,_ZThn440_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn688_N8S3542C13D0Ev,_ZThn440_N8S3542C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__8S3542C13__7S3542C2[] = {
  ABISELECT(-688,-440),
  ABISELECT(16,8),
  ABISELECT(-688,-440),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn352_N8S3542C13D1Ev,_ZThn220_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn352_N8S3542C13D0Ev,_ZThn220_N8S3542C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C14__A2__8S3542C13__7S3542C2[] = {
  ABISELECT(352,228),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C13D1Ev,_ZThn220_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C13D0Ev,_ZThn220_N8S3542C13D0Ev),
};
extern void _ZN7S3542C4D1Ev();
extern void _ZN7S3542C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C4__7S3542C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C4D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C4__7S3542C2[] = {
  ABISELECT(-16,-8),
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C7D1Ev();
extern void _ZN7S3542C7D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__7S3542C2[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C7__7S3542C2[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C87S3542C7__7S3542C2[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C2[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__7S3542C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C87S3542C7__7S3542C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C87S3542C7__7S3542C2[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C87S3542C7__7S3542C2[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C7__7S3542C2[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C7__7S3542C2[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C7__7S3542C2[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C2[] = {
  ABISELECT(-848,-508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__7S3542C2[] = {
  ABISELECT(848,508),
  0,
  0,
  ABISELECT(848,508),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__A3__7S3542C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C8__A3__7S3542C2[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C8__A5__7S3542C2[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A5__7S3542C2[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C8__A3__7S3542C2[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C8__A3__7S3542C2[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C8__A3__7S3542C2[] = {
  ABISELECT(272,156),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C8__A3__7S3542C2[] = {
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
static  VTT_ENTRY vtt_S3542C2[] = {
  {&(_ZTV7S3542C2[8]),  8,148},
  {&(_tg__ZTV7S3542C3__7S3542C2[7]),  7,13},
  {&(_tg__ZTV7S3542C87S3542C3__A1__7S3542C2[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C87S3542C3__A1__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C87S3542C3__A2__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C3__A2__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C87S3542C3__A1__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C87S3542C3__A1__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C87S3542C3__A1__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C87S3542C3__A1__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C4__7S3542C3__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C3__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C7__7S3542C3__7S3542C2[10]),  10,16},
  {&(_tg__ZTV7S3542C9__7S3542C3__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A4__7S3542C3__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C8__A1__7S3542C3__7S3542C2[5]),  5,10},
  {&(_tg__ZTV7S3542C9__A__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__A__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C7__A__7S3542C2[5]),  5,11},
  {&(_tg__ZTV7S3542C87S3542C7__A2__7S3542C2[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C87S3542C7__A2__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A4__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A4__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__A2__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C87S3542C7__A2__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C87S3542C7__A2__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C87S3542C7__A2__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C7__A__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C7__A__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C7__A__7S3542C2[4]),  4,6},
  {&(_tg__ZTV8S3542C12__7S3542C2[6]),  6,12},
  {&(_tg__ZTV7S3542C98S3542C12__A6__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C12__A6__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C8__8S3542C12__7S3542C2[9]),  9,14},
  {&(_tg__ZTV7S3542C5__8S3542C12__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__8S3542C12__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__8S3542C12__7S3542C2[4]),  4,6},
  {&(_tg__ZTV8S3542C13__7S3542C2[6]),  6,13},
  {&(_tg__ZTV8S3542C148S3542C13__7S3542C2[6]),  6,12},
  {&(_tg__ZTV7S3542C88S3542C148S3542C13__A4__7S3542C2[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C88S3542C148S3542C13__A4__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C88S3542C148S3542C13__A7__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C88S3542C148S3542C13__A7__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C88S3542C148S3542C13__A4__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C88S3542C148S3542C13__A4__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C88S3542C148S3542C13__A4__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C88S3542C148S3542C13__A4__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C98S3542C148S3542C13__A8__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C148S3542C13__A8__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C6__8S3542C148S3542C13__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C5__8S3542C148S3542C13__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__8S3542C148S3542C13__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C4__8S3542C148S3542C13__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C9__A__8S3542C148S3542C13__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C6__8S3542C13__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C5__8S3542C13__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__8S3542C13__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C4__8S3542C13__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C98S3542C14__A2__8S3542C13__7S3542C2[3]),  3,7},
  {&(_ZTV7S3542C2[91]),  91,148},
  {&(_ZTV7S3542C2[98]),  98,148},
  {&(_ZTV7S3542C2[112]),  112,148},
  {&(_ZTV7S3542C2[124]),  124,148},
  {&(_ZTV7S3542C2[132]),  132,148},
  {&(_ZTV7S3542C2[20]),  20,148},
  {&(_ZTV7S3542C2[34]),  34,148},
  {&(_ZTV7S3542C2[43]),  43,148},
  {&(_ZTV7S3542C2[55]),  55,148},
  {&(_ZTV7S3542C2[143]),  143,148},
  {&(_ZTV7S3542C2[67]),  67,148},
  {&(_ZTV7S3542C2[83]),  83,148},
  {&(_tg__ZTV7S3542C4__7S3542C2[3]),  3,5},
  {&(_tg__ZTV7S3542C5__7S3542C4__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C7__7S3542C2[5]),  5,11},
  {&(_tg__ZTV7S3542C87S3542C7__7S3542C2[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C87S3542C7__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C87S3542C7__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C87S3542C7__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C87S3542C7__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C7__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C7__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C7__7S3542C2[4]),  4,6},
  {&(_tg__ZTV7S3542C9__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C8__A3__7S3542C2[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C8__A3__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C8__A5__7S3542C2[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A5__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C8__A3__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C8__A3__7S3542C2[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C8__A3__7S3542C2[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C8__A3__7S3542C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3542C2[];
extern  VTBL_ENTRY _ZTV7S3542C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C2[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N8S3542C13D0Ev,_ZThn440_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N8S3542C13D1Ev,_ZThn440_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S3542C13D0Ev,_ZThn956_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S3542C13D1Ev,_ZThn956_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S3542C13D0Ev,_ZThn448_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S3542C13D1Ev,_ZThn448_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N8S3542C14D0Ev,_ZThn440_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N8S3542C14D1Ev,_ZThn440_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S3542C14D0Ev,_ZThn956_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S3542C14D1Ev,_ZThn956_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S3542C14D0Ev,_ZThn448_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S3542C14D1Ev,_ZThn448_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S3542C12D0Ev,_ZThn1280_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S3542C12D1Ev,_ZThn1280_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S3542C12D0Ev,_ZThn772_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S3542C12D1Ev,_ZThn772_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2384_N8S3542C12D0Ev,_ZThn1436_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2384_N8S3542C12D1Ev,_ZThn1436_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N7S3542C7D0Ev,_ZThn1712_N7S3542C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N7S3542C7D1Ev,_ZThn1712_N7S3542C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N7S3542C7D0Ev,_ZThn1204_N7S3542C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N7S3542C7D1Ev,_ZThn1204_N7S3542C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S3542C3D0Ev,_ZThn2096_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S3542C3D1Ev,_ZThn2096_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C3D0Ev,_ZThn1664_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C3D1Ev,_ZThn1664_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N7S3542C3D0Ev,_ZThn1588_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N7S3542C3D1Ev,_ZThn1588_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N7S3542C3D0Ev,_ZThn1580_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N7S3542C3D1Ev,_ZThn1580_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N7S3542C8D0Ev,_ZThn956_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N7S3542C8D0Ev,_ZThn1712_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3408_N7S3542C8D0Ev,_ZThn2060_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N7S3542C8D1Ev,_ZThn956_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N7S3542C8D1Ev,_ZThn1712_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3408_N7S3542C8D1Ev,_ZThn2060_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S3542C8D0Ev,_ZThn448_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N7S3542C8D0Ev,_ZThn1204_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N7S3542C8D0Ev,_ZThn1552_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S3542C8D1Ev,_ZThn448_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N7S3542C8D1Ev,_ZThn1204_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N7S3542C8D1Ev,_ZThn1552_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S3542C10D0Ev,_ZThn448_N8S3542C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S3542C10D0Ev,_ZThn1204_N8S3542C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N8S3542C10D0Ev,_ZThn1552_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N8S3542C10D1Ev,_ZThn448_N8S3542C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N8S3542C10D1Ev,_ZThn1204_N8S3542C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N8S3542C10D1Ev,_ZThn1552_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3542C9D0Ev,_ZThn228_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S3542C9D0Ev,_ZThn448_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N7S3542C9D0Ev,_ZThn772_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N7S3542C9D0Ev,_ZThn1204_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2192_N7S3542C9D0Ev,_ZThn1324_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N7S3542C9D0Ev,_ZThn1552_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3542C9D1Ev,_ZThn228_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S3542C9D1Ev,_ZThn448_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N7S3542C9D1Ev,_ZThn772_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1984_N7S3542C9D1Ev,_ZThn1204_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2192_N7S3542C9D1Ev,_ZThn1324_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N7S3542C9D1Ev,_ZThn1552_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C2D0Ev,_ZTv0_n24_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S3542C2D0Ev,_ZThn2096_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C2D1Ev,_ZTv0_n24_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S3542C2D1Ev,_ZThn2096_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S3542C2D0Ev,_ZThn2252_N7S3542C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C2D0Ev,_ZThn1664_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S3542C2D1Ev,_ZThn2252_N7S3542C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C2D1Ev,_ZThn1664_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C2D0Ev,_ZTv0_n20_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N7S3542C2D0Ev,_ZThn1588_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C2D1Ev,_ZTv0_n20_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2624_N7S3542C2D1Ev,_ZThn1588_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C2D0Ev,_ZTv0_n16_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N7S3542C2D0Ev,_ZThn1580_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C2D1Ev,_ZTv0_n16_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N7S3542C2D1Ev,_ZThn1580_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C2 = {  "S3542C2", // class name
  bases_S3542C2, 43,
  &(vtc_S3542C2[0]), // expected_vtbl_contents
  &(vtt_S3542C2[0]), // expected_vtt_contents
  ABISELECT(3968,2396), // object size
  NSPAIRA(_ZTI7S3542C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3542C2),148, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3542C2),95, //virtual table table var
  43, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3542C1  : S3542C2 {
  __tsi64 s3542c1f0;
  char  :0;
  ::S3542C6 s3542c1f2;
  void *s3542c1f3;
  int s3542c1f4;
  void *s3542c1f5;
  void *s3542c1f6;
  short s3542c1f7;
  virtual void  v1(); // _ZN7S3542C12v1Ev
  ~S3542C1(); // tgen
  S3542C1(); // tgen
};
//SIG(1 S3542C1) C1{ BC2{ BC3{ VBC4{ VBC5{ BC6{ v2 v3 Fp Fi FD Fi[2] Fc} vd Fp FL Fi Fc:8 Fc Fp Fs FD} Fi} BC6 VBC7{ BC8{ VBC5 VBC9{ VBC5 BC6 vd Fi FC5 Fi} BC10{ BC9 vd Fi Fp Fi[2]} VBC6 vd v4 FU11{ m Fi[2] FL}} vd v5 FD[3] Fi Fc FC9 Fi:9 Fc[5] Fi Fp[9]} BC8 BC5 vd v6 v7 Fc:0 Fc Fi:10 Fc Fi} BC9 BC7 BC12{ VBC8 BC9 vd v8 v9 Fc FC9 Fc} BC13{ BC14{ VBC6 BC8 BC5 VBC4 BC9 vd v10 Fi Fi Fi} vd v11 Fi Fl Fi FL} vd v12 Fc Fc Fi FD[4] Fp FL:54} v1 FL Fc:0 FC6 Fp Fi Fp Fp Fs}


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

static void Test_S3542C1()
{
  extern Class_Descriptor cd_S3542C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(257,616)];
    init_test(&cd_S3542C1, buf);
    S3542C1 *dp, &lv = *(dp=new (buf) S3542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4096,2460), "sizeof(S3542C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3542C1)");
    /*is_ambiguous_... S3542C1::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*), ABISELECT(2752,1652), "S3542C1");
    check_base_class_offset(lv, (S3542C5*)(S3542C4*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C7*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C8*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C12*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    check_base_class_offset(lv, (S3542C5*)(S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C9*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2752,1652), "S3542C1");
    check_base_class_offset(lv, (S3542C4*)(S3542C3*)(S3542C2*), ABISELECT(2728,1644), "S3542C1");
    check_base_class_offset(lv, (S3542C4*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2728,1644), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C3*)(S3542C2*), 0, "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*), ABISELECT(3600,2160), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C7*), ABISELECT(3600,2160), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(3600,2160), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(3600,2160), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*), ABISELECT(3600,2160), "S3542C1");
    /*is_ambiguous_... S3542C8::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(3600,2160), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2880,1728), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2880,1728), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C7*), ABISELECT(2880,1728), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C7*), ABISELECT(3808,2280), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(3808,2280), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(3808,2280), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*), ABISELECT(3808,2280), "S3542C1");
    /*is_ambiguous_... S3542C14::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(3808,2280), "S3542C1");
    /*is_ambiguous_... S3542C8::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(3808,2280), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C8*)(S3542C7*), ABISELECT(2880,1728), "S3542C1");
    check_base_class_offset(lv, (S3542C7*)(S3542C3*)(S3542C2*), ABISELECT(2880,1728), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(64,36), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(64,36), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(64,36), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C8*)(S3542C3*)(S3542C2*), ABISELECT(64,36), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*)(S3542C3*)(S3542C2*), ABISELECT(288,180), "S3542C1");
    /*is_ambiguous_... S3542C3::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C3*)(S3542C2*), ABISELECT(288,180), "S3542C1");
    check_base_class_offset(lv, (S3542C3*)(S3542C2*), 0, "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C2*), ABISELECT(432,264), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C2*), ABISELECT(432,264), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(640,384), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(640,384), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(640,384), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C8*)(S3542C7*)(S3542C2*), ABISELECT(640,384), "S3542C1");
    /*is_ambiguous_... S3542C2::S3542C7 */ AMB_check_base_class_offset(lv, (S3542C7*)(S3542C2*), ABISELECT(640,384), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(3872,2316), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*), ABISELECT(3872,2316), "S3542C1");
    /*is_ambiguous_... S3542C1::S3542C8 */ AMB_check_base_class_offset(lv, (S3542C10*)(S3542C8*), ABISELECT(3872,2316), "S3542C1");
    check_base_class_offset(lv, (S3542C8*)(S3542C12*)(S3542C2*), ABISELECT(3872,2316), "S3542C1");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C12*)(S3542C2*), ABISELECT(1360,816), "S3542C1");
    /*is_ambiguous_... S3542C12::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C12*)(S3542C2*), ABISELECT(1360,816), "S3542C1");
    check_base_class_offset(lv, (S3542C12*)(S3542C2*), ABISELECT(1360,816), "S3542C1");
    /*is_ambiguous_... S3542C9::S3542C6 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(1920,1140), "S3542C1");
    check_base_class_offset(lv, (S3542C9*)(S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(1920,1140), "S3542C1");
    check_base_class_offset(lv, (S3542C10*)(S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(1920,1140), "S3542C1");
    check_base_class_offset(lv, (S3542C8*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(1920,1140), "S3542C1");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C5*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2144,1284), "S3542C1");
    /*is_ambiguous_... S3542C14::S3542C5 */ AMB_check_base_class_offset(lv, (S3542C5*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2144,1284), "S3542C1");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C6*)(S3542C9*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2272,1360), "S3542C1");
    /*is_ambiguous_... S3542C14::S3542C9 */ AMB_check_base_class_offset(lv, (S3542C9*)(S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(2272,1360), "S3542C1");
    check_base_class_offset(lv, (S3542C14*)(S3542C13*)(S3542C2*), ABISELECT(1920,1140), "S3542C1");
    check_base_class_offset(lv, (S3542C13*)(S3542C2*), ABISELECT(1920,1140), "S3542C1");
    check_base_class_offset(lv, (S3542C2*), 0, "S3542C1");
    check_field_offset(lv, s3542c1f0, ABISELECT(2608,1580), "S3542C1.s3542c1f0");
    check_field_offset(lv, s3542c1f2, ABISELECT(2624,1588), "S3542C1.s3542c1f2");
    check_field_offset(lv, s3542c1f3, ABISELECT(2688,1624), "S3542C1.s3542c1f3");
    check_field_offset(lv, s3542c1f4, ABISELECT(2696,1628), "S3542C1.s3542c1f4");
    check_field_offset(lv, s3542c1f5, ABISELECT(2704,1632), "S3542C1.s3542c1f5");
    check_field_offset(lv, s3542c1f6, ABISELECT(2712,1636), "S3542C1.s3542c1f6");
    check_field_offset(lv, s3542c1f7, ABISELECT(2720,1640), "S3542C1.s3542c1f7");
    test_class_info(&lv, &cd_S3542C1);
    dp->~S3542C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3542C1(Test_S3542C1, "S3542C1", ABISELECT(4096,2460));

#else // __cplusplus

extern void _ZN7S3542C1C1Ev();
extern void _ZN7S3542C1D1Ev();
Name_Map name_map_S3542C1[] = {
  NSPAIR(_ZN7S3542C1C1Ev),
  NSPAIR(_ZN7S3542C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C4;
extern VTBL_ENTRY _ZTI7S3542C4[];
extern  VTBL_ENTRY _ZTV7S3542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C4[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C7;
extern VTBL_ENTRY _ZTI7S3542C7[];
extern  VTBL_ENTRY _ZTV7S3542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C7[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C3;
extern VTBL_ENTRY _ZTI7S3542C3[];
extern  VTBL_ENTRY _ZTV7S3542C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C3[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C7;
extern VTBL_ENTRY _ZTI7S3542C7[];
extern  VTBL_ENTRY _ZTV7S3542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C7[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C12;
extern VTBL_ENTRY _ZTI8S3542C12[];
extern  VTBL_ENTRY _ZTV8S3542C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C12[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C10;
extern VTBL_ENTRY _ZTI8S3542C10[];
extern  VTBL_ENTRY _ZTV8S3542C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C10[];
extern Class_Descriptor cd_S3542C8;
extern VTBL_ENTRY _ZTI7S3542C8[];
extern  VTBL_ENTRY _ZTV7S3542C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C8[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C5;
extern VTBL_ENTRY _ZTI7S3542C5[];
extern  VTBL_ENTRY _ZTV7S3542C5[];
extern Class_Descriptor cd_S3542C6;
extern VTBL_ENTRY _ZTI7S3542C6[];
extern  VTBL_ENTRY _ZTV7S3542C6[];
extern Class_Descriptor cd_S3542C9;
extern VTBL_ENTRY _ZTI7S3542C9[];
extern  VTBL_ENTRY _ZTV7S3542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C9[];
extern Class_Descriptor cd_S3542C14;
extern VTBL_ENTRY _ZTI8S3542C14[];
extern  VTBL_ENTRY _ZTV8S3542C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C14[];
extern Class_Descriptor cd_S3542C13;
extern VTBL_ENTRY _ZTI8S3542C13[];
extern  VTBL_ENTRY _ZTV8S3542C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3542C13[];
extern Class_Descriptor cd_S3542C2;
extern VTBL_ENTRY _ZTI7S3542C2[];
extern  VTBL_ENTRY _ZTV7S3542C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C2[];
static Base_Class bases_S3542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3542C6,    ABISELECT(2752,1652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(2752,1652), //bcp->offset
    94, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    74, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3542C4,    ABISELECT(2728,1644), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    73, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3542C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(3600,2160), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(3600,2160), //bcp->offset
    119, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    76, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(2880,1728), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3542C9,    ABISELECT(2880,1728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(2880,1728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(3808,2280), //bcp->offset
    129, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    77, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3542C8,    ABISELECT(2880,1728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3542C7,    ABISELECT(2880,1728), //bcp->offset
    103, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    75, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(64,36), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    78, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(288,180), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3542C3,    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
    23, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(432,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(432,264), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    79, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(640,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3542C7,    ABISELECT(640,384), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    80, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(3872,2316), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(3872,2316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(3872,2316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(3872,2316), //bcp->offset
    135, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    82, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S3542C6,    ABISELECT(1360,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(1360,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3542C12,    ABISELECT(1360,816), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    81, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3542C10,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3542C8,    ABISELECT(1920,1140), //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
    37, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(2144,1284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3542C5,    ABISELECT(2144,1284), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3542C6,    ABISELECT(2272,1360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3542C9,    ABISELECT(2272,1360), //bcp->offset
    81, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    84, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S3542C14,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3542C13,    ABISELECT(1920,1140), //bcp->offset
    62, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    83, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3542C2,    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
    44, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3542C1[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C1D1Ev();
extern void _ZN7S3542C1D0Ev();
extern void _ZN7S3542C32v6Ev();
extern void _ZN7S3542C32v7Ev();
extern void _ZN7S3542C23v12Ev();
extern void _ZN7S3542C12v1Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn64_N7S3542C1D1Ev,_ZThn36_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S3542C1D0Ev,_ZThn36_N7S3542C1D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn288_N7S3542C1D1Ev,_ZThn180_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S3542C1D0Ev,_ZThn180_N7S3542C1D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn432_N7S3542C1D1Ev,_ZThn264_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn432_N7S3542C1D0Ev,_ZThn264_N7S3542C1D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn640_N7S3542C1D1Ev,_ZThn384_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn640_N7S3542C1D0Ev,_ZThn384_N7S3542C1D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn1360_N7S3542C1D1Ev,_ZThn816_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn1360_N7S3542C1D0Ev,_ZThn816_N7S3542C1D0Ev)();
extern void _ZN8S3542C122v8Ev();
extern void _ZN8S3542C122v9Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn1920_N7S3542C1D1Ev,_ZThn1140_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn1920_N7S3542C1D0Ev,_ZThn1140_N7S3542C1D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
extern void _ZN8S3542C133v11Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn2144_N7S3542C1D1Ev,_ZThn1284_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn2144_N7S3542C1D0Ev,_ZThn1284_N7S3542C1D0Ev)();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn2272_N7S3542C1D1Ev,_ZThn1360_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn2272_N7S3542C1D0Ev,_ZThn1360_N7S3542C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3542C1D1Ev,_ZTv0_n16_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn2728_N7S3542C1D1Ev,_ZThn1644_N7S3542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3542C1D0Ev,_ZTv0_n16_N7S3542C1D0Ev)();
extern void ABISELECT(_ZThn2728_N7S3542C1D0Ev,_ZThn1644_N7S3542C1D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C1D1Ev,_ZTv0_n20_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C1D1Ev,_ZThn1652_N7S3542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C1D0Ev,_ZTv0_n20_N7S3542C1D0Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C1D0Ev,_ZThn1652_N7S3542C1D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C1D1Ev,_ZTv0_n32_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn2880_N7S3542C1D1Ev,_ZThn1728_N7S3542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C1D0Ev,_ZTv0_n32_N7S3542C1D0Ev)();
extern void ABISELECT(_ZThn2880_N7S3542C1D0Ev,_ZThn1728_N7S3542C1D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C1D1Ev,_ZTv0_n24_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn3600_N7S3542C1D1Ev,_ZThn2160_N7S3542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C1D0Ev,_ZTv0_n24_N7S3542C1D0Ev)();
extern void ABISELECT(_ZThn3600_N7S3542C1D0Ev,_ZThn2160_N7S3542C1D0Ev)() __attribute__((weak));
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C1D1Ev,_ZTv0_n32_N7S3542C1D1Ev)();
extern void ABISELECT(_ZThn3872_N7S3542C1D1Ev,_ZThn2316_N7S3542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C1D0Ev,_ZTv0_n32_N7S3542C1D0Ev)();
extern void ABISELECT(_ZThn3872_N7S3542C1D0Ev,_ZThn2316_N7S3542C1D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY vtc_S3542C1[] = {
  ABISELECT(3872,2316),
  ABISELECT(3808,2280),
  ABISELECT(3600,2160),
  ABISELECT(2880,1728),
  ABISELECT(2752,1652),
  ABISELECT(2728,1644),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3542C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3542C12v1Ev,
  ABISELECT(3744,2244),
  ABISELECT(3536,2124),
  ABISELECT(2688,1616),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C1D1Ev,_ZThn36_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C1D0Ev,_ZThn36_N7S3542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S3542C1D1Ev,_ZThn180_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S3542C1D0Ev,_ZThn180_N7S3542C1D0Ev),
  ABISELECT(2320,1388),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3542C1D1Ev,_ZThn264_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3542C1D0Ev,_ZThn264_N7S3542C1D0Ev),
  ABISELECT(3168,1896),
  ABISELECT(2960,1776),
  ABISELECT(2112,1268),
  ABISELECT(-640,-384),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S3542C1D1Ev,_ZThn384_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S3542C1D0Ev,_ZThn384_N7S3542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
  ABISELECT(2448,1464),
  ABISELECT(2240,1344),
  ABISELECT(2512,1500),
  ABISELECT(1392,836),
  ABISELECT(-1360,-816),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N7S3542C1D1Ev,_ZThn816_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N7S3542C1D0Ev,_ZThn816_N7S3542C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3542C122v8Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v9Ev,
  ABISELECT(808,504),
  ABISELECT(1888,1140),
  ABISELECT(1680,1020),
  ABISELECT(832,512),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N7S3542C1D1Ev,_ZThn1140_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N7S3542C1D0Ev,_ZThn1140_N7S3542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
  (VTBL_ENTRY)&_ZN8S3542C133v11Ev,
  ABISELECT(-2144,-1284),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2144_N7S3542C1D1Ev,_ZThn1284_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2144_N7S3542C1D0Ev,_ZThn1284_N7S3542C1D0Ev),
  ABISELECT(480,292),
  ABISELECT(-2272,-1360),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N7S3542C1D1Ev,_ZThn1360_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N7S3542C1D0Ev,_ZThn1360_N7S3542C1D0Ev),
  ABISELECT(-2728,-1644),
  ABISELECT(24,8),
  ABISELECT(-2728,-1644),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C1D1Ev,_ZTv0_n16_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C1D0Ev,_ZTv0_n16_N7S3542C1D0Ev),
  ABISELECT(-2752,-1652),
  0,
  0,
  ABISELECT(-2752,-1652),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C1D1Ev,_ZTv0_n20_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C1D0Ev,_ZTv0_n20_N7S3542C1D0Ev),
  0,
  0,
  ABISELECT(-2880,-1728),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2880,-1728),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C1D1Ev,_ZTv0_n32_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C1D0Ev,_ZTv0_n32_N7S3542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
  ABISELECT(-3600,-2160),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3600,-2160),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C1D1Ev,_ZTv0_n24_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C1D0Ev,_ZTv0_n24_N7S3542C1D0Ev),
  0,
  0,
  ABISELECT(-3808,-2280),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  0,
  ABISELECT(-3872,-2316),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-3872,-2316),
  (VTBL_ENTRY)&(_ZTI7S3542C1[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C1D1Ev,_ZTv0_n32_N7S3542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C1D0Ev,_ZTv0_n32_N7S3542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern VTBL_ENTRY _ZTV7S3542C1[];
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C2D1Ev();
extern void _ZN7S3542C2D0Ev();
extern void _ZN7S3542C32v6Ev();
extern void _ZN7S3542C32v7Ev();
extern void _ZN7S3542C23v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C2__7S3542C1[] = {
  ABISELECT(3872,2316),
  ABISELECT(3808,2280),
  ABISELECT(3600,2160),
  ABISELECT(2880,1728),
  ABISELECT(2752,1652),
  ABISELECT(2728,1644),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3542C23v12Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C3D1Ev();
extern void _ZN7S3542C3D0Ev();
extern void _ZN7S3542C32v6Ev();
extern void _ZN7S3542C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C37S3542C2__7S3542C1[] = {
  ABISELECT(3808,2280),
  ABISELECT(3600,2160),
  ABISELECT(2880,1728),
  ABISELECT(2752,1652),
  ABISELECT(2728,1644),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3542C32v7Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C37S3542C2__A1__7S3542C1[] = {
  ABISELECT(3744,2244),
  ABISELECT(3536,2124),
  ABISELECT(2688,1616),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C87S3542C37S3542C2__A1__7S3542C1[] = {
  ABISELECT(2688,1616),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C87S3542C37S3542C2__A2__7S3542C1[] = {
  ABISELECT(2688,1616),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn2688_N7S3542C9D1Ev,_ZThn1616_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn2688_N7S3542C9D0Ev,_ZThn1616_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C37S3542C2__A2__7S3542C1[] = {
  ABISELECT(-2688,-1616),
  0,
  0,
  ABISELECT(-2688,-1616),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn2688_N8S3542C10D1Ev,_ZThn1616_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn2688_N8S3542C10D0Ev,_ZThn1616_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C87S3542C37S3542C2__A1__7S3542C1[] = {
  ABISELECT(-2688,-1616),
  0,
  0,
  ABISELECT(-2688,-1616),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn2688_N7S3542C8D1Ev,_ZThn1616_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn2688_N7S3542C8D0Ev,_ZThn1616_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C87S3542C37S3542C2__A1__7S3542C1[] = {
  ABISELECT(-2688,-1616),
  0,
  0,
  ABISELECT(-2688,-1616),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn3536_N7S3542C8D1Ev,_ZThn2124_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn3536_N7S3542C8D0Ev,_ZThn2124_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C87S3542C37S3542C2__A1__7S3542C1[] = {
  ABISELECT(-3536,-2124),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3536,-2124),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C87S3542C37S3542C2__A1__7S3542C1[] = {
  0,
  0,
  ABISELECT(-3744,-2244),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn2728_N7S3542C3D1Ev,_ZThn1644_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn2728_N7S3542C3D0Ev,_ZThn1644_N7S3542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__7S3542C37S3542C2__7S3542C1[] = {
  ABISELECT(-2728,-1644),
  ABISELECT(24,8),
  ABISELECT(-2728,-1644),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C3D1Ev,_ZThn1652_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C3D0Ev,_ZThn1652_N7S3542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C37S3542C2__7S3542C1[] = {
  ABISELECT(-2752,-1652),
  0,
  0,
  ABISELECT(-2752,-1652),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn2880_N7S3542C3D1Ev,_ZThn1728_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn2880_N7S3542C3D0Ev,_ZThn1728_N7S3542C3D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__7S3542C37S3542C2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-2880,-1728),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2880,-1728),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn3600_N7S3542C3D1Ev,_ZThn2160_N7S3542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev)();
extern void ABISELECT(_ZThn3600_N7S3542C3D0Ev,_ZThn2160_N7S3542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C37S3542C2__7S3542C1[] = {
  ABISELECT(-3600,-2160),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3600,-2160),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A4__7S3542C37S3542C2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-3808,-2280),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn64_N7S3542C3D1Ev,_ZThn36_N7S3542C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S3542C3D0Ev,_ZThn36_N7S3542C3D0Ev)();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__A1__7S3542C37S3542C2__7S3542C1[] = {
  ABISELECT(3744,2244),
  ABISELECT(3536,2124),
  ABISELECT(2688,1616),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3542C3[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C3D1Ev,_ZThn36_N7S3542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C3D0Ev,_ZThn36_N7S3542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C97S3542C2__A3__7S3542C1[] = {
  ABISELECT(2320,1388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn2320_N7S3542C9D1Ev,_ZThn1388_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn2320_N7S3542C9D0Ev,_ZThn1388_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C97S3542C2__A3__7S3542C1[] = {
  ABISELECT(-2320,-1388),
  0,
  0,
  ABISELECT(-2320,-1388),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C7D1Ev();
extern void _ZN7S3542C7D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C77S3542C2__A1__7S3542C1[] = {
  ABISELECT(3168,1896),
  ABISELECT(2960,1776),
  ABISELECT(2112,1268),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C77S3542C2__A2__7S3542C1[] = {
  ABISELECT(3168,1896),
  ABISELECT(2960,1776),
  ABISELECT(2112,1268),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C87S3542C77S3542C2__A2__7S3542C1[] = {
  ABISELECT(2112,1268),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C87S3542C77S3542C2__A4__7S3542C1[] = {
  ABISELECT(2112,1268),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn2112_N7S3542C9D1Ev,_ZThn1268_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn2112_N7S3542C9D0Ev,_ZThn1268_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C77S3542C2__A4__7S3542C1[] = {
  ABISELECT(-2112,-1268),
  0,
  0,
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn2112_N8S3542C10D1Ev,_ZThn1268_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn2112_N8S3542C10D0Ev,_ZThn1268_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C87S3542C77S3542C2__A2__7S3542C1[] = {
  ABISELECT(-2112,-1268),
  0,
  0,
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn2112_N7S3542C8D1Ev,_ZThn1268_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn2112_N7S3542C8D0Ev,_ZThn1268_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C87S3542C77S3542C2__A2__7S3542C1[] = {
  ABISELECT(-2112,-1268),
  0,
  0,
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn2960_N7S3542C8D1Ev,_ZThn1776_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn2960_N7S3542C8D0Ev,_ZThn1776_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C87S3542C77S3542C2__A2__7S3542C1[] = {
  ABISELECT(-2960,-1776),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2960,-1776),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C87S3542C77S3542C2__A2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-3168,-1896),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn2112_N7S3542C7D1Ev,_ZThn1268_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn2112_N7S3542C7D0Ev,_ZThn1268_N7S3542C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C77S3542C2__A1__7S3542C1[] = {
  ABISELECT(-2112,-1268),
  0,
  0,
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn2960_N7S3542C7D1Ev,_ZThn1776_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn2960_N7S3542C7D0Ev,_ZThn1776_N7S3542C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C77S3542C2__A1__7S3542C1[] = {
  ABISELECT(-2960,-1776),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2960,-1776),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C77S3542C2__A1__7S3542C1[] = {
  0,
  0,
  ABISELECT(-3168,-1896),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C12D1Ev();
extern void _ZN8S3542C12D0Ev();
extern void _ZN8S3542C122v8Ev();
extern void _ZN8S3542C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C127S3542C2__7S3542C1[] = {
  ABISELECT(2448,1464),
  ABISELECT(2240,1344),
  ABISELECT(2512,1500),
  ABISELECT(1392,836),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v8Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v9Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C127S3542C2__A6__7S3542C1[] = {
  ABISELECT(1392,836),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn1392_N7S3542C9D1Ev,_ZThn836_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn1392_N7S3542C9D0Ev,_ZThn836_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C127S3542C2__A6__7S3542C1[] = {
  ABISELECT(-1392,-836),
  0,
  0,
  ABISELECT(-1392,-836),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn2512_N8S3542C12D1Ev,_ZThn1500_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn2512_N8S3542C12D0Ev,_ZThn1500_N8S3542C12D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__8S3542C127S3542C2__7S3542C1[] = {
  0,
  ABISELECT(-2512,-1500),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-2512,-1500),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn1392_N8S3542C12D1Ev,_ZThn836_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn1392_N8S3542C12D0Ev,_ZThn836_N8S3542C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C127S3542C2__7S3542C1[] = {
  ABISELECT(-1392,-836),
  0,
  0,
  ABISELECT(-1392,-836),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev)();
extern void ABISELECT(_ZThn2240_N8S3542C12D1Ev,_ZThn1344_N8S3542C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev)();
extern void ABISELECT(_ZThn2240_N8S3542C12D0Ev,_ZThn1344_N8S3542C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C127S3542C2__7S3542C1[] = {
  ABISELECT(-2240,-1344),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-2240,-1344),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__8S3542C127S3542C2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-2448,-1464),
  (VTBL_ENTRY)&(_ZTI8S3542C12[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C13D1Ev();
extern void _ZN8S3542C13D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
extern void _ZN8S3542C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(808,504),
  ABISELECT(1888,1140),
  ABISELECT(1680,1020),
  ABISELECT(832,512),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C13D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
  (VTBL_ENTRY)&_ZN8S3542C133v11Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C14D1Ev();
extern void _ZN8S3542C14D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C148S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(808,504),
  ABISELECT(1888,1140),
  ABISELECT(1680,1020),
  ABISELECT(832,512),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C14D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[] = {
  ABISELECT(1888,1140),
  ABISELECT(1680,1020),
  ABISELECT(832,512),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[] = {
  ABISELECT(832,512),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C88S3542C148S3542C137S3542C2__A7__7S3542C1[] = {
  ABISELECT(832,512),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn832_N7S3542C9D1Ev,_ZThn512_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn832_N7S3542C9D0Ev,_ZThn512_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C88S3542C148S3542C137S3542C2__A7__7S3542C1[] = {
  ABISELECT(-832,-512),
  0,
  0,
  ABISELECT(-832,-512),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZThn832_N8S3542C10D1Ev,_ZThn512_N8S3542C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
extern void ABISELECT(_ZThn832_N8S3542C10D0Ev,_ZThn512_N8S3542C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[] = {
  ABISELECT(-832,-512),
  0,
  0,
  ABISELECT(-832,-512),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn832_N7S3542C8D1Ev,_ZThn512_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn832_N7S3542C8D0Ev,_ZThn512_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[] = {
  ABISELECT(-832,-512),
  0,
  0,
  ABISELECT(-832,-512),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn1680_N7S3542C8D1Ev,_ZThn1020_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn1680_N7S3542C8D0Ev,_ZThn1020_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[] = {
  ABISELECT(-1680,-1020),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1680,-1020),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[] = {
  0,
  0,
  ABISELECT(-1888,-1140),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C148S3542C137S3542C2__A8__7S3542C1[] = {
  ABISELECT(480,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZThn480_N7S3542C9D1Ev,_ZThn292_N7S3542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
extern void ABISELECT(_ZThn480_N7S3542C9D0Ev,_ZThn292_N7S3542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C148S3542C137S3542C2__A8__7S3542C1[] = {
  ABISELECT(-480,-292),
  0,
  0,
  ABISELECT(-480,-292),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__8S3542C148S3542C137S3542C2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-1888,-1140),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn832_N8S3542C14D1Ev,_ZThn512_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn832_N8S3542C14D0Ev,_ZThn512_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C148S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(-832,-512),
  0,
  0,
  ABISELECT(-832,-512),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn1680_N8S3542C14D1Ev,_ZThn1020_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn1680_N8S3542C14D0Ev,_ZThn1020_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C148S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(-1680,-1020),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1680,-1020),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn808_N8S3542C14D1Ev,_ZThn504_N8S3542C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev)();
extern void ABISELECT(_ZThn808_N8S3542C14D0Ev,_ZThn504_N8S3542C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__8S3542C148S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(-808,-504),
  ABISELECT(24,8),
  ABISELECT(-808,-504),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev)();
extern void ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C9__A__8S3542C148S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(480,292),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3542C14[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D1Ev,_ZThn220_N8S3542C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C14D0Ev,_ZThn220_N8S3542C14D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__8S3542C137S3542C2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-1888,-1140),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn832_N8S3542C13D1Ev,_ZThn512_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn832_N8S3542C13D0Ev,_ZThn512_N8S3542C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(-832,-512),
  0,
  0,
  ABISELECT(-832,-512),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn1680_N8S3542C13D1Ev,_ZThn1020_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn1680_N8S3542C13D0Ev,_ZThn1020_N8S3542C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__8S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(-1680,-1020),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-1680,-1020),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn808_N8S3542C13D1Ev,_ZThn504_N8S3542C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev)();
extern void ABISELECT(_ZThn808_N8S3542C13D0Ev,_ZThn504_N8S3542C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__8S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(-808,-504),
  ABISELECT(24,8),
  ABISELECT(-808,-504),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn352_N8S3542C13D1Ev,_ZThn220_N8S3542C13D1Ev)();
extern void ABISELECT(_ZThn352_N8S3542C13D0Ev,_ZThn220_N8S3542C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C14__A2__8S3542C137S3542C2__7S3542C1[] = {
  ABISELECT(480,292),
  ABISELECT(-352,-220),
  (VTBL_ENTRY)&(_ZTI8S3542C13[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C13D1Ev,_ZThn220_N8S3542C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3542C13D0Ev,_ZThn220_N8S3542C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3542C2D1Ev,_ZTv0_n16_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2728_N7S3542C2D1Ev,_ZThn1644_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3542C2D0Ev,_ZTv0_n16_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn2728_N7S3542C2D0Ev,_ZThn1644_N7S3542C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C4__7S3542C2__7S3542C1[] = {
  ABISELECT(-2728,-1644),
  ABISELECT(24,8),
  ABISELECT(-2728,-1644),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C2D1Ev,_ZTv0_n16_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3542C2D0Ev,_ZTv0_n16_N7S3542C2D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C2D1Ev,_ZTv0_n20_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C2D1Ev,_ZThn1652_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C2D0Ev,_ZTv0_n20_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn2752_N7S3542C2D0Ev,_ZThn1652_N7S3542C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C2__7S3542C1[] = {
  ABISELECT(-2752,-1652),
  0,
  0,
  ABISELECT(-2752,-1652),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C2D1Ev,_ZTv0_n20_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C2D0Ev,_ZTv0_n20_N7S3542C2D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2880_N7S3542C2D1Ev,_ZThn1728_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn2880_N7S3542C2D0Ev,_ZThn1728_N7S3542C2D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__7S3542C2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-2880,-1728),
  0,
  0,
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  ABISELECT(-2880,-1728),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C2D1Ev,_ZTv0_n24_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn3600_N7S3542C2D1Ev,_ZThn2160_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C2D0Ev,_ZTv0_n24_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn3600_N7S3542C2D0Ev,_ZThn2160_N7S3542C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C2__7S3542C1[] = {
  ABISELECT(-3600,-2160),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-3600,-2160),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C2D1Ev,_ZTv0_n24_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C2D0Ev,_ZTv0_n24_N7S3542C2D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A4__7S3542C2__7S3542C1[] = {
  0,
  0,
  ABISELECT(-3808,-2280),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn64_N7S3542C2D1Ev,_ZThn36_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S3542C2D0Ev,_ZThn36_N7S3542C2D0Ev)();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C3__A1__7S3542C2__7S3542C1[] = {
  ABISELECT(3744,2244),
  ABISELECT(3536,2124),
  ABISELECT(2688,1616),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C2D1Ev,_ZThn36_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3542C2D0Ev,_ZThn36_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn432_N7S3542C2D1Ev,_ZThn264_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn432_N7S3542C2D0Ev,_ZThn264_N7S3542C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C9__A__7S3542C2__7S3542C1[] = {
  ABISELECT(2320,1388),
  ABISELECT(-432,-264),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3542C2D1Ev,_ZThn264_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn432_N7S3542C2D0Ev,_ZThn264_N7S3542C2D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn640_N7S3542C2D1Ev,_ZThn384_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn640_N7S3542C2D0Ev,_ZThn384_N7S3542C2D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__A__7S3542C2__7S3542C1[] = {
  ABISELECT(3168,1896),
  ABISELECT(2960,1776),
  ABISELECT(2112,1268),
  ABISELECT(-640,-384),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S3542C2D1Ev,_ZThn384_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S3542C2D0Ev,_ZThn384_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn1360_N7S3542C2D1Ev,_ZThn816_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn1360_N7S3542C2D0Ev,_ZThn816_N7S3542C2D0Ev)();
extern void _ZN8S3542C122v8Ev();
extern void _ZN8S3542C122v9Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C12__7S3542C2__7S3542C1[] = {
  ABISELECT(2448,1464),
  ABISELECT(2240,1344),
  ABISELECT(2512,1500),
  ABISELECT(1392,836),
  ABISELECT(-1360,-816),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N7S3542C2D1Ev,_ZThn816_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N7S3542C2D0Ev,_ZThn816_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3542C122v8Ev,
  (VTBL_ENTRY)&_ZN8S3542C122v9Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn3872_N7S3542C2D1Ev,_ZThn2316_N7S3542C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev)();
extern void ABISELECT(_ZThn3872_N7S3542C2D0Ev,_ZThn2316_N7S3542C2D0Ev)() __attribute__((weak));
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__A3__7S3542C2__7S3542C1[] = {
  0,
  ABISELECT(-3872,-2316),
  0,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  ABISELECT(-3872,-2316),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn1920_N7S3542C2D1Ev,_ZThn1140_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn1920_N7S3542C2D0Ev,_ZThn1140_N7S3542C2D0Ev)();
extern void _ZN7S3542C82v4Ev();
extern void _ZN8S3542C143v10Ev();
extern void _ZN8S3542C133v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C13__7S3542C2__7S3542C1[] = {
  ABISELECT(808,504),
  ABISELECT(1888,1140),
  ABISELECT(1680,1020),
  ABISELECT(832,512),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N7S3542C2D1Ev,_ZThn1140_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N7S3542C2D0Ev,_ZThn1140_N7S3542C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN8S3542C143v10Ev,
  (VTBL_ENTRY)&_ZN8S3542C133v11Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZThn2272_N7S3542C2D1Ev,_ZThn1360_N7S3542C2D1Ev)();
extern void ABISELECT(_ZThn2272_N7S3542C2D0Ev,_ZThn1360_N7S3542C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C148S3542C13__A8__7S3542C2__7S3542C1[] = {
  ABISELECT(480,292),
  ABISELECT(-2272,-1360),
  (VTBL_ENTRY)&(_ZTI7S3542C2[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N7S3542C2D1Ev,_ZThn1360_N7S3542C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2272_N7S3542C2D0Ev,_ZThn1360_N7S3542C2D0Ev),
};
extern void _ZN7S3542C4D1Ev();
extern void _ZN7S3542C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C4__7S3542C1[] = {
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C4D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C4__7S3542C1[] = {
  ABISELECT(-24,-8),
  0,
  0,
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S3542C4[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C7D1Ev();
extern void _ZN7S3542C7D0Ev();
extern void _ZN7S3542C82v4Ev();
extern void _ZN7S3542C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C7__7S3542C1[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3542C72v5Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C87S3542C7__7S3542C1[] = {
  ABISELECT(928,552),
  ABISELECT(720,432),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C87S3542C7__7S3542C1[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C1[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__7S3542C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C87S3542C7__7S3542C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C87S3542C7__7S3542C1[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C87S3542C7__7S3542C1[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C7__7S3542C1[] = {
  ABISELECT(128,76),
  0,
  0,
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev)();
extern void ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C7__7S3542C1[] = {
  ABISELECT(-720,-432),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(-720,-432),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C7__7S3542C1[] = {
  0,
  0,
  ABISELECT(-928,-552),
  (VTBL_ENTRY)&(_ZTI7S3542C7[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C1[] = {
  ABISELECT(-848,-508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C9__7S3542C1[] = {
  ABISELECT(848,508),
  0,
  0,
  ABISELECT(848,508),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C8D1Ev();
extern void _ZN7S3542C8D0Ev();
extern void _ZN7S3542C82v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C8__A3__7S3542C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-272,-156),
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3542C82v4Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN8S3542C10D1Ev();
extern void _ZN8S3542C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3542C107S3542C8__A3__7S3542C1[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3542C10D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void _ZN7S3542C9D1Ev();
extern void _ZN7S3542C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C98S3542C107S3542C8__A5__7S3542C1[] = {
  ABISELECT(-1120,-664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3542C9D0Ev,
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A5__7S3542C1[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI7S3542C9[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__8S3542C107S3542C8__A3__7S3542C1[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI8S3542C10[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C5__7S3542C8__A3__7S3542C1[] = {
  ABISELECT(1120,664),
  0,
  0,
  ABISELECT(1120,664),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3542C9__7S3542C8__A3__7S3542C1[] = {
  ABISELECT(272,156),
  0,
  0,
  ABISELECT(-848,-508),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev),
};
extern void _ZN7S3542C62v2Ev();
extern void _ZN7S3542C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3542C6__A3__7S3542C8__A3__7S3542C1[] = {
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S3542C8[0]),
  (VTBL_ENTRY)&_ZN7S3542C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3542C62v3Ev,
};
static  VTT_ENTRY vtt_S3542C1[] = {
  {&(_ZTV7S3542C1[8]),  8,149},
  {&(_tg__ZTV7S3542C2__7S3542C1[8]),  8,15},
  {&(_tg__ZTV7S3542C37S3542C2__7S3542C1[7]),  7,13},
  {&(_tg__ZTV7S3542C87S3542C37S3542C2__A1__7S3542C1[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C87S3542C37S3542C2__A1__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C87S3542C37S3542C2__A2__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C37S3542C2__A2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C87S3542C37S3542C2__A1__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C87S3542C37S3542C2__A1__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C87S3542C37S3542C2__A1__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C87S3542C37S3542C2__A1__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C4__7S3542C37S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C37S3542C2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C7__7S3542C37S3542C2__7S3542C1[10]),  10,16},
  {&(_tg__ZTV7S3542C9__7S3542C37S3542C2__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A4__7S3542C37S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C8__A1__7S3542C37S3542C2__7S3542C1[5]),  5,10},
  {&(_tg__ZTV7S3542C97S3542C2__A3__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C97S3542C2__A3__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C77S3542C2__A1__7S3542C1[5]),  5,11},
  {&(_tg__ZTV7S3542C87S3542C77S3542C2__A2__7S3542C1[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C87S3542C77S3542C2__A2__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C87S3542C77S3542C2__A4__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C77S3542C2__A4__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C87S3542C77S3542C2__A2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C87S3542C77S3542C2__A2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C87S3542C77S3542C2__A2__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C87S3542C77S3542C2__A2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C77S3542C2__A1__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C77S3542C2__A1__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C77S3542C2__A1__7S3542C1[4]),  4,6},
  {&(_tg__ZTV8S3542C127S3542C2__7S3542C1[6]),  6,12},
  {&(_tg__ZTV7S3542C98S3542C127S3542C2__A6__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C127S3542C2__A6__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C8__8S3542C127S3542C2__7S3542C1[9]),  9,14},
  {&(_tg__ZTV7S3542C5__8S3542C127S3542C2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__8S3542C127S3542C2__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__8S3542C127S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV8S3542C137S3542C2__7S3542C1[6]),  6,13},
  {&(_tg__ZTV8S3542C148S3542C137S3542C2__7S3542C1[6]),  6,12},
  {&(_tg__ZTV7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C88S3542C148S3542C137S3542C2__A7__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C88S3542C148S3542C137S3542C2__A7__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C88S3542C148S3542C137S3542C2__A4__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C98S3542C148S3542C137S3542C2__A8__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C148S3542C137S3542C2__A8__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C6__8S3542C148S3542C137S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C5__8S3542C148S3542C137S3542C2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__8S3542C148S3542C137S3542C2__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C4__8S3542C148S3542C137S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C9__A__8S3542C148S3542C137S3542C2__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C6__8S3542C137S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C5__8S3542C137S3542C2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__8S3542C137S3542C2__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C4__8S3542C137S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C98S3542C14__A2__8S3542C137S3542C2__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C4__7S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C2__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C7__7S3542C2__7S3542C1[10]),  10,16},
  {&(_tg__ZTV7S3542C9__7S3542C2__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A4__7S3542C2__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C87S3542C3__A1__7S3542C2__7S3542C1[5]),  5,10},
  {&(_tg__ZTV7S3542C9__A__7S3542C2__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C7__A__7S3542C2__7S3542C1[5]),  5,11},
  {&(_tg__ZTV8S3542C12__7S3542C2__7S3542C1[6]),  6,12},
  {&(_tg__ZTV7S3542C8__A3__7S3542C2__7S3542C1[9]),  9,14},
  {&(_tg__ZTV8S3542C13__7S3542C2__7S3542C1[6]),  6,13},
  {&(_tg__ZTV7S3542C98S3542C148S3542C13__A8__7S3542C2__7S3542C1[3]),  3,7},
  {&(_ZTV7S3542C1[92]),  92,149},
  {&(_ZTV7S3542C1[99]),  99,149},
  {&(_ZTV7S3542C1[113]),  113,149},
  {&(_ZTV7S3542C1[125]),  125,149},
  {&(_ZTV7S3542C1[133]),  133,149},
  {&(_ZTV7S3542C1[21]),  21,149},
  {&(_ZTV7S3542C1[35]),  35,149},
  {&(_ZTV7S3542C1[44]),  44,149},
  {&(_ZTV7S3542C1[56]),  56,149},
  {&(_ZTV7S3542C1[144]),  144,149},
  {&(_ZTV7S3542C1[68]),  68,149},
  {&(_ZTV7S3542C1[84]),  84,149},
  {&(_tg__ZTV7S3542C4__7S3542C1[3]),  3,5},
  {&(_tg__ZTV7S3542C5__7S3542C4__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C7__7S3542C1[5]),  5,11},
  {&(_tg__ZTV7S3542C87S3542C7__7S3542C1[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C87S3542C7__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C87S3542C7__A1__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C87S3542C7__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C87S3542C7__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C87S3542C7__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C87S3542C7__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C5__7S3542C7__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C7__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C7__7S3542C1[4]),  4,6},
  {&(_tg__ZTV7S3542C9__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C9__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C8__A3__7S3542C1[5]),  5,10},
  {&(_tg__ZTV8S3542C107S3542C8__A3__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C98S3542C107S3542C8__A5__7S3542C1[3]),  3,7},
  {&(_tg__ZTV7S3542C5__7S3542C98S3542C107S3542C8__A5__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__8S3542C107S3542C8__A3__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C5__7S3542C8__A3__7S3542C1[5]),  5,9},
  {&(_tg__ZTV7S3542C9__7S3542C8__A3__7S3542C1[6]),  6,10},
  {&(_tg__ZTV7S3542C6__A3__7S3542C8__A3__7S3542C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3542C1[];
extern  VTBL_ENTRY _ZTV7S3542C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3542C1[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D0Ev,_ZTv0_n20_N7S3542C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3542C4D0Ev,_ZThn8_N7S3542C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C4D1Ev,_ZTv0_n20_N7S3542C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3542C4D1Ev,_ZThn8_N7S3542C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C2D0Ev,_ZTv0_n24_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3600_N7S3542C2D0Ev,_ZThn2160_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C2D1Ev,_ZTv0_n24_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3600_N7S3542C2D1Ev,_ZThn2160_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C2D0Ev,_ZTv0_n32_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3872_N7S3542C2D0Ev,_ZThn2316_N7S3542C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N7S3542C2D0Ev,_ZThn1728_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C2D1Ev,_ZTv0_n32_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3872_N7S3542C2D1Ev,_ZThn2316_N7S3542C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N7S3542C2D1Ev,_ZThn1728_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C2D0Ev,_ZTv0_n20_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C2D0Ev,_ZThn1652_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C2D1Ev,_ZTv0_n20_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C2D1Ev,_ZThn1652_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C2D0Ev,_ZTv0_n16_N7S3542C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2728_N7S3542C2D0Ev,_ZThn1644_N7S3542C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C2D1Ev,_ZTv0_n16_N7S3542C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2728_N7S3542C2D1Ev,_ZThn1644_N7S3542C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C13D0Ev,_ZTv0_n16_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N8S3542C13D0Ev,_ZThn504_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C13D1Ev,_ZTv0_n16_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N8S3542C13D1Ev,_ZThn504_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C13D0Ev,_ZTv0_n24_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S3542C13D0Ev,_ZThn1020_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C13D1Ev,_ZTv0_n24_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S3542C13D1Ev,_ZThn1020_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C13D0Ev,_ZTv0_n20_N8S3542C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3542C13D0Ev,_ZThn512_N8S3542C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C13D1Ev,_ZTv0_n20_N8S3542C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3542C13D1Ev,_ZThn512_N8S3542C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D0Ev,_ZTv0_n16_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N8S3542C14D0Ev,_ZThn504_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3542C14D1Ev,_ZTv0_n16_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N8S3542C14D1Ev,_ZThn504_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D0Ev,_ZTv0_n24_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S3542C14D0Ev,_ZThn1020_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C14D1Ev,_ZTv0_n24_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N8S3542C14D1Ev,_ZThn1020_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D0Ev,_ZTv0_n20_N8S3542C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3542C14D0Ev,_ZThn512_N8S3542C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C14D1Ev,_ZTv0_n20_N8S3542C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3542C14D1Ev,_ZThn512_N8S3542C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C12D0Ev,_ZTv0_n24_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S3542C12D0Ev,_ZThn1344_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3542C12D1Ev,_ZTv0_n24_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2240_N8S3542C12D1Ev,_ZThn1344_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C12D0Ev,_ZTv0_n20_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S3542C12D0Ev,_ZThn836_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C12D1Ev,_ZTv0_n20_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S3542C12D1Ev,_ZThn836_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3542C12D0Ev,_ZTv0_n32_N8S3542C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2512_N8S3542C12D0Ev,_ZThn1500_N8S3542C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3542C12D1Ev,_ZTv0_n32_N8S3542C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2512_N8S3542C12D1Ev,_ZThn1500_N8S3542C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D0Ev,_ZTv0_n24_N7S3542C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D0Ev,_ZThn432_N7S3542C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2960_N7S3542C7D0Ev,_ZThn1776_N7S3542C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C7D1Ev,_ZTv0_n24_N7S3542C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C7D1Ev,_ZThn432_N7S3542C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2960_N7S3542C7D1Ev,_ZThn1776_N7S3542C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C7D0Ev,_ZTv0_n20_N7S3542C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S3542C7D0Ev,_ZThn1268_N7S3542C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C7D1Ev,_ZTv0_n20_N7S3542C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S3542C7D1Ev,_ZThn1268_N7S3542C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C3D0Ev,_ZTv0_n24_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3600_N7S3542C3D0Ev,_ZThn2160_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C3D1Ev,_ZTv0_n24_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3600_N7S3542C3D1Ev,_ZThn2160_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C3D0Ev,_ZTv0_n32_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N7S3542C3D0Ev,_ZThn1728_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C3D1Ev,_ZTv0_n32_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N7S3542C3D1Ev,_ZThn1728_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C3D0Ev,_ZTv0_n20_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C3D0Ev,_ZThn1652_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C3D1Ev,_ZTv0_n20_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C3D1Ev,_ZThn1652_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C3D0Ev,_ZTv0_n16_N7S3542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2728_N7S3542C3D0Ev,_ZThn1644_N7S3542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C3D1Ev,_ZTv0_n16_N7S3542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2728_N7S3542C3D1Ev,_ZThn1644_N7S3542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D0Ev,_ZTv0_n24_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D0Ev,_ZThn432_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N7S3542C8D0Ev,_ZThn1020_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2960_N7S3542C8D0Ev,_ZThn1776_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3536_N7S3542C8D0Ev,_ZThn2124_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C8D1Ev,_ZTv0_n24_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn720_N7S3542C8D1Ev,_ZThn432_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1680_N7S3542C8D1Ev,_ZThn1020_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2960_N7S3542C8D1Ev,_ZThn1776_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3536_N7S3542C8D1Ev,_ZThn2124_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D0Ev,_ZTv0_n20_N7S3542C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S3542C8D0Ev,_ZThn512_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S3542C8D0Ev,_ZThn1268_N7S3542C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N7S3542C8D0Ev,_ZThn1616_N7S3542C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C8D1Ev,_ZTv0_n20_N7S3542C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S3542C8D1Ev,_ZThn512_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S3542C8D1Ev,_ZThn1268_N7S3542C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N7S3542C8D1Ev,_ZThn1616_N7S3542C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D0Ev,_ZTv0_n20_N8S3542C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3542C10D0Ev,_ZThn512_N8S3542C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S3542C10D0Ev,_ZThn1268_N8S3542C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S3542C10D0Ev,_ZThn1616_N8S3542C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3542C10D1Ev,_ZTv0_n20_N8S3542C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3542C10D1Ev,_ZThn512_N8S3542C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S3542C10D1Ev,_ZThn1268_N8S3542C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S3542C10D1Ev,_ZThn1616_N8S3542C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D0Ev,_ZTv0_n20_N7S3542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N7S3542C9D0Ev,_ZThn292_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S3542C9D0Ev,_ZThn512_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S3542C9D0Ev,_ZThn836_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S3542C9D0Ev,_ZThn1268_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N7S3542C9D0Ev,_ZThn1388_N7S3542C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N7S3542C9D0Ev,_ZThn1616_N7S3542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C9D1Ev,_ZTv0_n20_N7S3542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N7S3542C9D1Ev,_ZThn292_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N7S3542C9D1Ev,_ZThn512_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S3542C9D1Ev,_ZThn836_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S3542C9D1Ev,_ZThn1268_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N7S3542C9D1Ev,_ZThn1388_N7S3542C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N7S3542C9D1Ev,_ZThn1616_N7S3542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C1D0Ev,_ZTv0_n24_N7S3542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3600_N7S3542C1D0Ev,_ZThn2160_N7S3542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3542C1D1Ev,_ZTv0_n24_N7S3542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3600_N7S3542C1D1Ev,_ZThn2160_N7S3542C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C1D0Ev,_ZTv0_n32_N7S3542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3872_N7S3542C1D0Ev,_ZThn2316_N7S3542C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N7S3542C1D0Ev,_ZThn1728_N7S3542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3542C1D1Ev,_ZTv0_n32_N7S3542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3872_N7S3542C1D1Ev,_ZThn2316_N7S3542C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2880_N7S3542C1D1Ev,_ZThn1728_N7S3542C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C1D0Ev,_ZTv0_n20_N7S3542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C1D0Ev,_ZThn1652_N7S3542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3542C1D1Ev,_ZTv0_n20_N7S3542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S3542C1D1Ev,_ZThn1652_N7S3542C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C1D0Ev,_ZTv0_n16_N7S3542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2728_N7S3542C1D0Ev,_ZThn1644_N7S3542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3542C1D1Ev,_ZTv0_n16_N7S3542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2728_N7S3542C1D1Ev,_ZThn1644_N7S3542C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3542C1 = {  "S3542C1", // class name
  bases_S3542C1, 44,
  &(vtc_S3542C1[0]), // expected_vtbl_contents
  &(vtt_S3542C1[0]), // expected_vtt_contents
  ABISELECT(4096,2460), // object size
  NSPAIRA(_ZTI7S3542C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3542C1),149, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3542C1),108, //virtual table table var
  44, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S753C4  : S1686C4_nt {
  virtual void  v4(); // _ZN6S753C42v4Ev
  virtual void  v5(); // _ZN6S753C42v5Ev
  virtual void  v6(); // _ZN6S753C42v6Ev
  virtual void  v7(); // _ZN6S753C42v7Ev
  virtual void  v8(); // _ZN6S753C42v8Ev
  ~S753C4(); // tgen
  S753C4(); // tgen
};
//SIG(-1 S753C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S753C4 ::v4(){vfunc_called(this, "_ZN6S753C42v4Ev");}
void  S753C4 ::v5(){vfunc_called(this, "_ZN6S753C42v5Ev");}
void  S753C4 ::v6(){vfunc_called(this, "_ZN6S753C42v6Ev");}
void  S753C4 ::v7(){vfunc_called(this, "_ZN6S753C42v7Ev");}
void  S753C4 ::v8(){vfunc_called(this, "_ZN6S753C42v8Ev");}
S753C4 ::~S753C4(){ note_dtor("S753C4", this);} // tgen
S753C4 ::S753C4(){ note_ctor("S753C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S753C4C1Ev();
extern void _ZN6S753C4D1Ev();
Name_Map name_map_S753C4[] = {
  NSPAIR(_ZN6S753C4C1Ev),
  NSPAIR(_ZN6S753C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
static Base_Class bases_S753C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S753C4[];
extern void _ZN6S753C4D1Ev();
extern void _ZN6S753C4D0Ev();
extern void _ZN6S753C42v4Ev();
extern void _ZN6S753C42v5Ev();
extern void _ZN6S753C42v6Ev();
extern void _ZN6S753C42v7Ev();
extern void _ZN6S753C42v8Ev();
static  VTBL_ENTRY vtc_S753C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S753C4[0]),
  (VTBL_ENTRY)&_ZN6S753C4D1Ev,
  (VTBL_ENTRY)&_ZN6S753C4D0Ev,
  (VTBL_ENTRY)&_ZN6S753C42v4Ev,
  (VTBL_ENTRY)&_ZN6S753C42v5Ev,
  (VTBL_ENTRY)&_ZN6S753C42v6Ev,
  (VTBL_ENTRY)&_ZN6S753C42v7Ev,
  (VTBL_ENTRY)&_ZN6S753C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S753C4[];
extern  VTBL_ENTRY _ZTV6S753C4[];
Class_Descriptor cd_S753C4 = {  "S753C4", // class name
  bases_S753C4, 1,
  &(vtc_S753C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S753C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S753C4),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  S753C3  : S753C4 {
  void *s753c3f0[3];
  ::S1686C5_nt s753c3f1;
  virtual void  v9(); // _ZN6S753C32v9Ev
  virtual void  v10(); // _ZN6S753C33v10Ev
  virtual void  v11(); // _ZN6S753C33v11Ev
  virtual void  v12(); // _ZN6S753C33v12Ev
  virtual void  v13(); // _ZN6S753C33v13Ev
  virtual void  v14(); // _ZN6S753C33v14Ev
  virtual void  v15(); // _ZN6S753C33v15Ev
  virtual void  v16(); // _ZN6S753C33v16Ev
  virtual void  v17(); // _ZN6S753C33v17Ev
  virtual void  v18(); // _ZN6S753C33v18Ev
  virtual void  v19(); // _ZN6S753C33v19Ev
  ~S753C3(); // tgen
  S753C3(); // tgen
};
//SIG(-1 S753C3) 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  S753C3 ::v9(){vfunc_called(this, "_ZN6S753C32v9Ev");}
void  S753C3 ::v10(){vfunc_called(this, "_ZN6S753C33v10Ev");}
void  S753C3 ::v11(){vfunc_called(this, "_ZN6S753C33v11Ev");}
void  S753C3 ::v12(){vfunc_called(this, "_ZN6S753C33v12Ev");}
void  S753C3 ::v13(){vfunc_called(this, "_ZN6S753C33v13Ev");}
void  S753C3 ::v14(){vfunc_called(this, "_ZN6S753C33v14Ev");}
void  S753C3 ::v15(){vfunc_called(this, "_ZN6S753C33v15Ev");}
void  S753C3 ::v16(){vfunc_called(this, "_ZN6S753C33v16Ev");}
void  S753C3 ::v17(){vfunc_called(this, "_ZN6S753C33v17Ev");}
void  S753C3 ::v18(){vfunc_called(this, "_ZN6S753C33v18Ev");}
void  S753C3 ::v19(){vfunc_called(this, "_ZN6S753C33v19Ev");}
S753C3 ::~S753C3(){ note_dtor("S753C3", this);} // tgen
S753C3 ::S753C3(){ note_ctor("S753C3", this);} // tgen

static void Test_S753C3()
{
  extern Class_Descriptor cd_S753C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S753C3, buf);
    S753C3 *dp, &lv = *(dp=new (buf) S753C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S753C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S753C3)");
    check_base_class_offset(lv, (S1686C4_nt*)(S753C4*), 0, "S753C3");
    check_base_class_offset(lv, (S753C4*), 0, "S753C3");
    check_field_offset(lv, s753c3f0, ABISELECT(16,8), "S753C3.s753c3f0");
    check_field_offset(lv, s753c3f1, ABISELECT(40,20), "S753C3.s753c3f1");
    test_class_info(&lv, &cd_S753C3);
    dp->~S753C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS753C3(Test_S753C3, "S753C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S753C3C1Ev();
extern void _ZN6S753C3D1Ev();
Name_Map name_map_S753C3[] = {
  NSPAIR(_ZN6S753C3C1Ev),
  NSPAIR(_ZN6S753C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S753C4;
extern VTBL_ENTRY _ZTI6S753C4[];
extern  VTBL_ENTRY _ZTV6S753C4[];
static Base_Class bases_S753C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S753C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S753C3[];
extern void _ZN6S753C3D1Ev();
extern void _ZN6S753C3D0Ev();
extern void _ZN6S753C42v4Ev();
extern void _ZN6S753C42v5Ev();
extern void _ZN6S753C42v6Ev();
extern void _ZN6S753C42v7Ev();
extern void _ZN6S753C42v8Ev();
extern void _ZN6S753C32v9Ev();
extern void _ZN6S753C33v10Ev();
extern void _ZN6S753C33v11Ev();
extern void _ZN6S753C33v12Ev();
extern void _ZN6S753C33v13Ev();
extern void _ZN6S753C33v14Ev();
extern void _ZN6S753C33v15Ev();
extern void _ZN6S753C33v16Ev();
extern void _ZN6S753C33v17Ev();
extern void _ZN6S753C33v18Ev();
extern void _ZN6S753C33v19Ev();
static  VTBL_ENTRY vtc_S753C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S753C3[0]),
  (VTBL_ENTRY)&_ZN6S753C3D1Ev,
  (VTBL_ENTRY)&_ZN6S753C3D0Ev,
  (VTBL_ENTRY)&_ZN6S753C42v4Ev,
  (VTBL_ENTRY)&_ZN6S753C42v5Ev,
  (VTBL_ENTRY)&_ZN6S753C42v6Ev,
  (VTBL_ENTRY)&_ZN6S753C42v7Ev,
  (VTBL_ENTRY)&_ZN6S753C42v8Ev,
  (VTBL_ENTRY)&_ZN6S753C32v9Ev,
  (VTBL_ENTRY)&_ZN6S753C33v10Ev,
  (VTBL_ENTRY)&_ZN6S753C33v11Ev,
  (VTBL_ENTRY)&_ZN6S753C33v12Ev,
  (VTBL_ENTRY)&_ZN6S753C33v13Ev,
  (VTBL_ENTRY)&_ZN6S753C33v14Ev,
  (VTBL_ENTRY)&_ZN6S753C33v15Ev,
  (VTBL_ENTRY)&_ZN6S753C33v16Ev,
  (VTBL_ENTRY)&_ZN6S753C33v17Ev,
  (VTBL_ENTRY)&_ZN6S753C33v18Ev,
  (VTBL_ENTRY)&_ZN6S753C33v19Ev,
};
extern VTBL_ENTRY _ZTI6S753C3[];
extern  VTBL_ENTRY _ZTV6S753C3[];
Class_Descriptor cd_S753C3 = {  "S753C3", // class name
  bases_S753C3, 2,
  &(vtc_S753C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S753C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S753C3),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  S753C9_nt  {
  void *s753c9f0;
  void  mf753c9(); // _ZN9S753C9_nt7mf753c9Ev
};
//SIG(-1 S753C9_nt) C1{ m Fp}


void  S753C9_nt ::mf753c9(){}

//skip512 S753C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S753C2_nt  : S753C3 {
  ::S1686C5_nt s753c2f0;
  ::S753C9_nt s753c2f1;
  void *s753c2f2[3];
  virtual void  v20(); // _ZN9S753C2_nt3v20Ev
  virtual void  v21(); // _ZN9S753C2_nt3v21Ev
  virtual void  v22(); // _ZN9S753C2_nt3v22Ev
  virtual void  v23(); // _ZN9S753C2_nt3v23Ev
  virtual void  v24(); // _ZN9S753C2_nt3v24Ev
  virtual void  v25(); // _ZN9S753C2_nt3v25Ev
  virtual void  v26(); // _ZN9S753C2_nt3v26Ev
  virtual void  v27(); // _ZN9S753C2_nt3v27Ev
  ~S753C2_nt(); // tgen
  S753C2_nt(); // tgen
};
//SIG(-1 S753C2_nt) 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  S753C2_nt ::v20(){vfunc_called(this, "_ZN9S753C2_nt3v20Ev");}
void  S753C2_nt ::v21(){vfunc_called(this, "_ZN9S753C2_nt3v21Ev");}
void  S753C2_nt ::v22(){vfunc_called(this, "_ZN9S753C2_nt3v22Ev");}
void  S753C2_nt ::v23(){vfunc_called(this, "_ZN9S753C2_nt3v23Ev");}
void  S753C2_nt ::v24(){vfunc_called(this, "_ZN9S753C2_nt3v24Ev");}
void  S753C2_nt ::v25(){vfunc_called(this, "_ZN9S753C2_nt3v25Ev");}
void  S753C2_nt ::v26(){vfunc_called(this, "_ZN9S753C2_nt3v26Ev");}
void  S753C2_nt ::v27(){vfunc_called(this, "_ZN9S753C2_nt3v27Ev");}
S753C2_nt ::~S753C2_nt(){ note_dtor("S753C2_nt", this);} // tgen
S753C2_nt ::S753C2_nt(){ note_ctor("S753C2_nt", this);} // tgen

//skip512 S753C2_nt

#else // __cplusplus

extern void _ZN9S753C2_ntC1Ev();
extern void _ZN9S753C2_ntD1Ev();
Name_Map name_map_S753C2_nt[] = {
  NSPAIR(_ZN9S753C2_ntC1Ev),
  NSPAIR(_ZN9S753C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S753C4;
extern VTBL_ENTRY _ZTI6S753C4[];
extern  VTBL_ENTRY _ZTV6S753C4[];
extern Class_Descriptor cd_S753C3;
extern VTBL_ENTRY _ZTI6S753C3[];
extern  VTBL_ENTRY _ZTV6S753C3[];
static Base_Class bases_S753C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S753C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S753C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S753C2_nt[];
extern void _ZN9S753C2_ntD1Ev();
extern void _ZN9S753C2_ntD0Ev();
extern void _ZN6S753C42v4Ev();
extern void _ZN6S753C42v5Ev();
extern void _ZN6S753C42v6Ev();
extern void _ZN6S753C42v7Ev();
extern void _ZN6S753C42v8Ev();
extern void _ZN6S753C32v9Ev();
extern void _ZN6S753C33v10Ev();
extern void _ZN6S753C33v11Ev();
extern void _ZN6S753C33v12Ev();
extern void _ZN6S753C33v13Ev();
extern void _ZN6S753C33v14Ev();
extern void _ZN6S753C33v15Ev();
extern void _ZN6S753C33v16Ev();
extern void _ZN6S753C33v17Ev();
extern void _ZN6S753C33v18Ev();
extern void _ZN6S753C33v19Ev();
extern void _ZN9S753C2_nt3v20Ev();
extern void _ZN9S753C2_nt3v21Ev();
extern void _ZN9S753C2_nt3v22Ev();
extern void _ZN9S753C2_nt3v23Ev();
extern void _ZN9S753C2_nt3v24Ev();
extern void _ZN9S753C2_nt3v25Ev();
extern void _ZN9S753C2_nt3v26Ev();
extern void _ZN9S753C2_nt3v27Ev();
static  VTBL_ENTRY vtc_S753C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S753C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S753C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S753C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S753C42v4Ev,
  (VTBL_ENTRY)&_ZN6S753C42v5Ev,
  (VTBL_ENTRY)&_ZN6S753C42v6Ev,
  (VTBL_ENTRY)&_ZN6S753C42v7Ev,
  (VTBL_ENTRY)&_ZN6S753C42v8Ev,
  (VTBL_ENTRY)&_ZN6S753C32v9Ev,
  (VTBL_ENTRY)&_ZN6S753C33v10Ev,
  (VTBL_ENTRY)&_ZN6S753C33v11Ev,
  (VTBL_ENTRY)&_ZN6S753C33v12Ev,
  (VTBL_ENTRY)&_ZN6S753C33v13Ev,
  (VTBL_ENTRY)&_ZN6S753C33v14Ev,
  (VTBL_ENTRY)&_ZN6S753C33v15Ev,
  (VTBL_ENTRY)&_ZN6S753C33v16Ev,
  (VTBL_ENTRY)&_ZN6S753C33v17Ev,
  (VTBL_ENTRY)&_ZN6S753C33v18Ev,
  (VTBL_ENTRY)&_ZN6S753C33v19Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v27Ev,
};
extern VTBL_ENTRY _ZTI9S753C2_nt[];
VTBL_ENTRY *P__ZTI9S753C2_nt = _ZTI9S753C2_nt; 
extern  VTBL_ENTRY _ZTV9S753C2_nt[];
Class_Descriptor cd_S753C2_nt = {  "S753C2_nt", // class name
  bases_S753C2_nt, 3,
  &(vtc_S753C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI9S753C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S753C2_nt),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  S753C1  : S753C2_nt , S7368C49 {
  ::S7368C32 s753c1f0;
  void *s753c1f1[3];
  virtual  ~S753C1(); // _ZN6S753C1D1Ev
  virtual void  v1(); // _ZN6S753C12v1Ev
  virtual void  v2(); // _ZN6S753C12v2Ev
  virtual void  v3(); // _ZN6S753C12v3Ev
  S753C1(); // tgen
};
//SIG(1 S753C1) 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 m FC11{ m Fp Fi[2] FC12{ m}}} vd v1 v2 v3 FC13{ vd m FC14{ BC15{ vd m Fc} vd FL} FC16{ BC15 vd Fi FC17{ m Fp Fi FC18{ m}} FC19{ BC15 vd FL[2]} FC17 FC20{ BC15 vd FC17 FC17 FC17 FC21{ m Fp Fi[2] FC22{ m}} FC23{ m Fp Fi[2] FC18}}}} Fp[3]}


 S753C1 ::~S753C1(){ note_dtor("S753C1", this);}
void  S753C1 ::v1(){vfunc_called(this, "_ZN6S753C12v1Ev");}
void  S753C1 ::v2(){vfunc_called(this, "_ZN6S753C12v2Ev");}
void  S753C1 ::v3(){vfunc_called(this, "_ZN6S753C12v3Ev");}
S753C1 ::S753C1(){ note_ctor("S753C1", this);} // tgen

static void Test_S753C1()
{
  extern Class_Descriptor cd_S753C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,69)];
    init_test(&cd_S753C1, buf);
    S753C1 *dp, &lv = *(dp=new (buf) S753C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,272), "sizeof(S753C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S753C1)");
    check_base_class_offset(lv, (S1686C4_nt*)(S753C4*)(S753C3*)(S753C2_nt*), 0, "S753C1");
    check_base_class_offset(lv, (S753C4*)(S753C3*)(S753C2_nt*), 0, "S753C1");
    check_base_class_offset(lv, (S753C3*)(S753C2_nt*), 0, "S753C1");
    check_base_class_offset(lv, (S753C2_nt*), 0, "S753C1");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(152,84), "S753C1");
    check_field_offset(lv, s753c1f0, ABISELECT(184,104), "S753C1.s753c1f0");
    check_field_offset(lv, s753c1f1, ABISELECT(408,260), "S753C1.s753c1f1");
    test_class_info(&lv, &cd_S753C1);
    dp->~S753C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS753C1(Test_S753C1, "S753C1", ABISELECT(432,272));

#else // __cplusplus

extern void _ZN6S753C1C1Ev();
extern void _ZN6S753C1D1Ev();
Name_Map name_map_S753C1[] = {
  NSPAIR(_ZN6S753C1C1Ev),
  NSPAIR(_ZN6S753C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S753C4;
extern VTBL_ENTRY _ZTI6S753C4[];
extern  VTBL_ENTRY _ZTV6S753C4[];
extern Class_Descriptor cd_S753C3;
extern VTBL_ENTRY _ZTI6S753C3[];
extern  VTBL_ENTRY _ZTV6S753C3[];
extern Class_Descriptor cd_S753C2_nt;
extern VTBL_ENTRY _ZTI9S753C2_nt[];
extern  VTBL_ENTRY _ZTV9S753C2_nt[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S753C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S753C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S753C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S753C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7368C49,    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 _ZTI6S753C1[];
extern void _ZN6S753C1D1Ev();
extern void _ZN6S753C1D0Ev();
extern void _ZN6S753C42v4Ev();
extern void _ZN6S753C42v5Ev();
extern void _ZN6S753C42v6Ev();
extern void _ZN6S753C42v7Ev();
extern void _ZN6S753C42v8Ev();
extern void _ZN6S753C32v9Ev();
extern void _ZN6S753C33v10Ev();
extern void _ZN6S753C33v11Ev();
extern void _ZN6S753C33v12Ev();
extern void _ZN6S753C33v13Ev();
extern void _ZN6S753C33v14Ev();
extern void _ZN6S753C33v15Ev();
extern void _ZN6S753C33v16Ev();
extern void _ZN6S753C33v17Ev();
extern void _ZN6S753C33v18Ev();
extern void _ZN6S753C33v19Ev();
extern void _ZN9S753C2_nt3v20Ev();
extern void _ZN9S753C2_nt3v21Ev();
extern void _ZN9S753C2_nt3v22Ev();
extern void _ZN9S753C2_nt3v23Ev();
extern void _ZN9S753C2_nt3v24Ev();
extern void _ZN9S753C2_nt3v25Ev();
extern void _ZN9S753C2_nt3v26Ev();
extern void _ZN9S753C2_nt3v27Ev();
extern void _ZN6S753C12v1Ev();
extern void _ZN6S753C12v2Ev();
extern void _ZN6S753C12v3Ev();
extern void ABISELECT(_ZThn152_N6S753C1D1Ev,_ZThn84_N6S753C1D1Ev)();
extern void ABISELECT(_ZThn152_N6S753C1D0Ev,_ZThn84_N6S753C1D0Ev)();
static  VTBL_ENTRY vtc_S753C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S753C1[0]),
  (VTBL_ENTRY)&_ZN6S753C1D1Ev,
  (VTBL_ENTRY)&_ZN6S753C1D0Ev,
  (VTBL_ENTRY)&_ZN6S753C42v4Ev,
  (VTBL_ENTRY)&_ZN6S753C42v5Ev,
  (VTBL_ENTRY)&_ZN6S753C42v6Ev,
  (VTBL_ENTRY)&_ZN6S753C42v7Ev,
  (VTBL_ENTRY)&_ZN6S753C42v8Ev,
  (VTBL_ENTRY)&_ZN6S753C32v9Ev,
  (VTBL_ENTRY)&_ZN6S753C33v10Ev,
  (VTBL_ENTRY)&_ZN6S753C33v11Ev,
  (VTBL_ENTRY)&_ZN6S753C33v12Ev,
  (VTBL_ENTRY)&_ZN6S753C33v13Ev,
  (VTBL_ENTRY)&_ZN6S753C33v14Ev,
  (VTBL_ENTRY)&_ZN6S753C33v15Ev,
  (VTBL_ENTRY)&_ZN6S753C33v16Ev,
  (VTBL_ENTRY)&_ZN6S753C33v17Ev,
  (VTBL_ENTRY)&_ZN6S753C33v18Ev,
  (VTBL_ENTRY)&_ZN6S753C33v19Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S753C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN6S753C12v1Ev,
  (VTBL_ENTRY)&_ZN6S753C12v2Ev,
  (VTBL_ENTRY)&_ZN6S753C12v3Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S753C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S753C1D1Ev,_ZThn84_N6S753C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S753C1D0Ev,_ZThn84_N6S753C1D0Ev),
};
extern VTBL_ENTRY _ZTI6S753C1[];
extern  VTBL_ENTRY _ZTV6S753C1[];
Class_Descriptor cd_S753C1 = {  "S753C1", // class name
  bases_S753C1, 5,
  &(vtc_S753C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,272), // object size
  NSPAIRA(_ZTI6S753C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S753C1),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  S3559C5  {
  void *s3559c5f0;
  virtual void  v2(); // _ZN7S3559C52v2Ev
  virtual void  v3(); // _ZN7S3559C52v3Ev
  ~S3559C5(); // tgen
  S3559C5(); // tgen
};
//SIG(-1 S3559C5) C1{ v1 v2 Fp}


void  S3559C5 ::v2(){vfunc_called(this, "_ZN7S3559C52v2Ev");}
void  S3559C5 ::v3(){vfunc_called(this, "_ZN7S3559C52v3Ev");}
S3559C5 ::~S3559C5(){ note_dtor("S3559C5", this);} // tgen
S3559C5 ::S3559C5(){ note_ctor("S3559C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3559C5C1Ev();
extern void _ZN7S3559C5D1Ev();
Name_Map name_map_S3559C5[] = {
  NSPAIR(_ZN7S3559C5C1Ev),
  NSPAIR(_ZN7S3559C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3559C5[];
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY vtc_S3559C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C5[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
Class_Descriptor cd_S3559C5 = {  "S3559C5", // class name
  0,0,//no base classes
  &(vtc_S3559C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3559C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3559C5),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  S3559C7  : virtual S3559C5 {
  void *s3559c7f0;
  virtual  ~S3559C7(); // _ZN7S3559C7D2Ev
  virtual void  v4(); // _ZN7S3559C72v4Ev
  virtual void  v5(); // _ZN7S3559C72v5Ev
  S3559C7(); // tgen
};
//SIG(-1 S3559C7) C1{ VBC2{ v3 v4 Fp} vd v1 v2 Fp}


 S3559C7 ::~S3559C7(){ note_dtor("S3559C7", this);}
void  S3559C7 ::v4(){vfunc_called(this, "_ZN7S3559C72v4Ev");}
void  S3559C7 ::v5(){vfunc_called(this, "_ZN7S3559C72v5Ev");}
S3559C7 ::S3559C7(){ note_ctor("S3559C7", this);} // tgen

static void Test_S3559C7()
{
  extern Class_Descriptor cd_S3559C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3559C7, buf);
    S3559C7 *dp, &lv = *(dp=new (buf) S3559C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3559C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3559C7)");
    check_base_class_offset(lv, (S3559C5*), ABISELECT(16,8), "S3559C7");
    check_field_offset(lv, s3559c7f0, ABISELECT(8,4), "S3559C7.s3559c7f0");
    test_class_info(&lv, &cd_S3559C7);
    dp->~S3559C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C7(Test_S3559C7, "S3559C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3559C7C1Ev();
extern void _ZN7S3559C7D2Ev();
Name_Map name_map_S3559C7[] = {
  NSPAIR(_ZN7S3559C7C1Ev),
  NSPAIR(_ZN7S3559C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
static Base_Class bases_S3559C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3559C7[];
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY vtc_S3559C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S3559C7[];
static  VTT_ENTRY vtt_S3559C7[] = {
  {&(_ZTV7S3559C7[3]),  3,13},
  {&(_ZTV7S3559C7[11]),  11,13},
};
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
Class_Descriptor cd_S3559C7 = {  "S3559C7", // class name
  bases_S3559C7, 1,
  &(vtc_S3559C7[0]), // expected_vtbl_contents
  &(vtt_S3559C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3559C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3559C7),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3559C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C8  {
  virtual void  v6(); // _ZN7S3559C82v6Ev
  ~S3559C8(); // tgen
  S3559C8(); // tgen
};
//SIG(-1 S3559C8) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S3559C8C1Ev();
extern void _ZN7S3559C8D1Ev();
Name_Map name_map_S3559C8[] = {
  NSPAIR(_ZN7S3559C8C1Ev),
  NSPAIR(_ZN7S3559C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3559C8[];
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY vtc_S3559C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C8[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
Class_Descriptor cd_S3559C8 = {  "S3559C8", // class name
  0,0,//no base classes
  &(vtc_S3559C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3559C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3559C8),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  S3559C6  : virtual S3559C5 , S3559C7 , S3559C8 {
  __tsi64 s3559c6f0;
  int s3559c6f1;
  void *s3559c6f2[8];
  int s3559c6f3[2];
  long double s3559c6f4;
  int s3559c6f5;
  virtual  ~S3559C6(); // _ZN7S3559C6D2Ev
  virtual void  v7(); // _ZN7S3559C62v7Ev
  virtual void  v8(); // _ZN7S3559C62v8Ev
  virtual void  v9(); // _ZN7S3559C62v9Ev
  S3559C6(); // tgen
};
//SIG(-1 S3559C6) C1{ VBC2{ v4 v5 Fp} BC3{ VBC2 vd v6 v7 Fp} BC4{ v8} vd v1 v2 v3 FL Fi Fp[8] Fi[2] FD Fi}


 S3559C6 ::~S3559C6(){ note_dtor("S3559C6", this);}
void  S3559C6 ::v7(){vfunc_called(this, "_ZN7S3559C62v7Ev");}
void  S3559C6 ::v8(){vfunc_called(this, "_ZN7S3559C62v8Ev");}
void  S3559C6 ::v9(){vfunc_called(this, "_ZN7S3559C62v9Ev");}
S3559C6 ::S3559C6(){ note_ctor("S3559C6", this);} // tgen

static void Test_S3559C6()
{
  extern Class_Descriptor cd_S3559C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,23)];
    init_test(&cd_S3559C6, buf);
    S3559C6 *dp, &lv = *(dp=new (buf) S3559C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S3559C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C6)");
    check_base_class_offset(lv, (S3559C5*), ABISELECT(136,80), "S3559C6");
    check_base_class_offset(lv, (S3559C5*)(S3559C7*), ABISELECT(136,80), "S3559C6");
    check_base_class_offset(lv, (S3559C7*), 0, "S3559C6");
    check_base_class_offset(lv, (S3559C8*), ABISELECT(16,8), "S3559C6");
    check_field_offset(lv, s3559c6f0, ABISELECT(24,12), "S3559C6.s3559c6f0");
    check_field_offset(lv, s3559c6f1, ABISELECT(32,20), "S3559C6.s3559c6f1");
    check_field_offset(lv, s3559c6f2, ABISELECT(40,24), "S3559C6.s3559c6f2");
    check_field_offset(lv, s3559c6f3, ABISELECT(104,56), "S3559C6.s3559c6f3");
    check_field_offset(lv, s3559c6f4, ABISELECT(112,64), "S3559C6.s3559c6f4");
    check_field_offset(lv, s3559c6f5, ABISELECT(128,76), "S3559C6.s3559c6f5");
    test_class_info(&lv, &cd_S3559C6);
    dp->~S3559C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C6(Test_S3559C6, "S3559C6", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN7S3559C6C1Ev();
extern void _ZN7S3559C6D2Ev();
Name_Map name_map_S3559C6[] = {
  NSPAIR(_ZN7S3559C6C1Ev),
  NSPAIR(_ZN7S3559C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
static Base_Class bases_S3559C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    ABISELECT(136,80), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C8,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3559C6[];
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY vtc_S3559C6[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S3559C6[];
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C7__7S3559C6[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C7__7S3559C6[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
static  VTT_ENTRY vtt_S3559C6[] = {
  {&(_ZTV7S3559C6[3]),  3,19},
  {&(_tg__ZTV7S3559C7__7S3559C6[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C7__7S3559C6[4]),  4,6},
  {&(_ZTV7S3559C6[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
Class_Descriptor cd_S3559C6 = {  "S3559C6", // class name
  bases_S3559C6, 3,
  &(vtc_S3559C6[0]), // expected_vtbl_contents
  &(vtt_S3559C6[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI7S3559C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3559C6),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3559C6),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C9  {
  void *s3559c9f0;
  char s3559c9f1;
  virtual void  v10(); // _ZN7S3559C93v10Ev
  virtual void  v11(); // _ZN7S3559C93v11Ev
  virtual void  v12(); // _ZN7S3559C93v12Ev
  virtual void  v13(); // _ZN7S3559C93v13Ev
  ~S3559C9(); // tgen
  S3559C9(); // tgen
};
//SIG(-1 S3559C9) C1{ v1 v2 v3 v4 Fp Fc}


void  S3559C9 ::v10(){vfunc_called(this, "_ZN7S3559C93v10Ev");}
void  S3559C9 ::v11(){vfunc_called(this, "_ZN7S3559C93v11Ev");}
void  S3559C9 ::v12(){vfunc_called(this, "_ZN7S3559C93v12Ev");}
void  S3559C9 ::v13(){vfunc_called(this, "_ZN7S3559C93v13Ev");}
S3559C9 ::~S3559C9(){ note_dtor("S3559C9", this);} // tgen
S3559C9 ::S3559C9(){ note_ctor("S3559C9", this);} // tgen

static void Test_S3559C9()
{
  extern Class_Descriptor cd_S3559C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3559C9, buf);
    S3559C9 *dp, &lv = *(dp=new (buf) S3559C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3559C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3559C9)");
    check_field_offset(lv, s3559c9f0, ABISELECT(8,4), "S3559C9.s3559c9f0");
    check_field_offset(lv, s3559c9f1, ABISELECT(16,8), "S3559C9.s3559c9f1");
    test_class_info(&lv, &cd_S3559C9);
    dp->~S3559C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C9(Test_S3559C9, "S3559C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3559C9C1Ev();
extern void _ZN7S3559C9D1Ev();
Name_Map name_map_S3559C9[] = {
  NSPAIR(_ZN7S3559C9C1Ev),
  NSPAIR(_ZN7S3559C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3559C9[];
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY vtc_S3559C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C9[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern VTBL_ENTRY _ZTI7S3559C9[];
extern  VTBL_ENTRY _ZTV7S3559C9[];
Class_Descriptor cd_S3559C9 = {  "S3559C9", // class name
  0,0,//no base classes
  &(vtc_S3559C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3559C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3559C9),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  S3559C4  : virtual S3559C5 , S3559C6 , S3559C8 , virtual S3559C9 {
  long double s3559c4f0;
  virtual void  v14(); // _ZN7S3559C43v14Ev
  virtual void  v15(); // _ZN7S3559C43v15Ev
  virtual void  v16(); // _ZN7S3559C43v16Ev
  virtual void  v17(); // _ZN7S3559C43v17Ev
  virtual void  v18(); // _ZN7S3559C43v18Ev
  ~S3559C4(); // tgen
  S3559C4(); // tgen
};
//SIG(-1 S3559C4) C1{ VBC2{ v6 v7 Fp} BC3{ VBC2 BC4{ VBC2 vd v8 v9 Fp} BC5{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} BC5 VBC6{ v14 v15 v16 v17 Fp Fc} v1 v2 v3 v4 v5 FD}


void  S3559C4 ::v14(){vfunc_called(this, "_ZN7S3559C43v14Ev");}
void  S3559C4 ::v15(){vfunc_called(this, "_ZN7S3559C43v15Ev");}
void  S3559C4 ::v16(){vfunc_called(this, "_ZN7S3559C43v16Ev");}
void  S3559C4 ::v17(){vfunc_called(this, "_ZN7S3559C43v17Ev");}
void  S3559C4 ::v18(){vfunc_called(this, "_ZN7S3559C43v18Ev");}
S3559C4 ::~S3559C4(){ note_dtor("S3559C4", this);} // tgen
S3559C4 ::S3559C4(){ note_ctor("S3559C4", this);} // tgen

static void Test_S3559C4()
{
  extern Class_Descriptor cd_S3559C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,30)];
    init_test(&cd_S3559C4, buf);
    S3559C4 *dp, &lv = *(dp=new (buf) S3559C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,116), "sizeof(S3559C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C4)");
    check_base_class_offset(lv, (S3559C5*), ABISELECT(160,96), "S3559C4");
    check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(160,96), "S3559C4");
    check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(160,96), "S3559C4");
    check_base_class_offset(lv, (S3559C7*)(S3559C6*), 0, "S3559C4");
    check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(16,8), "S3559C4");
    check_base_class_offset(lv, (S3559C6*), 0, "S3559C4");
    /*is_ambiguous_... S3559C4::S3559C8 */ AMB_check_base_class_offset(lv, (S3559C8*), ABISELECT(136,80), "S3559C4");
    check_base_class_offset(lv, (S3559C9*), ABISELECT(176,104), "S3559C4");
    check_field_offset(lv, s3559c4f0, ABISELECT(144,84), "S3559C4.s3559c4f0");
    test_class_info(&lv, &cd_S3559C4);
    dp->~S3559C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C4(Test_S3559C4, "S3559C4", ABISELECT(208,116));

#else // __cplusplus

extern void _ZN7S3559C4C1Ev();
extern void _ZN7S3559C4D1Ev();
Name_Map name_map_S3559C4[] = {
  NSPAIR(_ZN7S3559C4C1Ev),
  NSPAIR(_ZN7S3559C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C9;
extern VTBL_ENTRY _ZTI7S3559C9[];
extern  VTBL_ENTRY _ZTV7S3559C9[];
static Base_Class bases_S3559C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    ABISELECT(160,96), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //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_S3559C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C8,    ABISELECT(136,80), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C9,    ABISELECT(176,104), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3559C4[];
extern void _ZN7S3559C4D1Ev();
extern void _ZN7S3559C4D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY vtc_S3559C4[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern VTBL_ENTRY _ZTV7S3559C4[];
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__7S3559C4[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__7S3559C4[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__7S3559C4[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__7S3559C4[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
static  VTT_ENTRY vtt_S3559C4[] = {
  {&(_ZTV7S3559C4[4]),  4,38},
  {&(_tg__ZTV7S3559C6__7S3559C4[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__7S3559C4[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__7S3559C4[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__7S3559C4[4]),  4,6},
  {&(_ZTV7S3559C4[26]),  26,38},
  {&(_ZTV7S3559C4[34]),  34,38},
};
extern VTBL_ENTRY _ZTI7S3559C4[];
extern  VTBL_ENTRY _ZTV7S3559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C4[];
Class_Descriptor cd_S3559C4 = {  "S3559C4", // class name
  bases_S3559C4, 6,
  &(vtc_S3559C4[0]), // expected_vtbl_contents
  &(vtt_S3559C4[0]), // expected_vtt_contents
  ABISELECT(208,116), // object size
  NSPAIRA(_ZTI7S3559C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3559C4),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3559C4),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C11  {
  int s3559c11f0[9];
  virtual void  v19(); // _ZN8S3559C113v19Ev
  ~S3559C11(); // tgen
  S3559C11(); // tgen
};
//SIG(-1 S3559C11) C1{ v1 Fi[9]}


void  S3559C11 ::v19(){vfunc_called(this, "_ZN8S3559C113v19Ev");}
S3559C11 ::~S3559C11(){ note_dtor("S3559C11", this);} // tgen
S3559C11 ::S3559C11(){ note_ctor("S3559C11", this);} // tgen

static void Test_S3559C11()
{
  extern Class_Descriptor cd_S3559C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S3559C11, buf);
    S3559C11 *dp, &lv = *(dp=new (buf) S3559C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S3559C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3559C11)");
    check_field_offset(lv, s3559c11f0, ABISELECT(8,4), "S3559C11.s3559c11f0");
    test_class_info(&lv, &cd_S3559C11);
    dp->~S3559C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C11(Test_S3559C11, "S3559C11", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S3559C11C1Ev();
extern void _ZN8S3559C11D1Ev();
Name_Map name_map_S3559C11[] = {
  NSPAIR(_ZN8S3559C11C1Ev),
  NSPAIR(_ZN8S3559C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3559C11[];
extern void _ZN8S3559C113v19Ev();
static  VTBL_ENTRY vtc_S3559C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C11[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
};
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
Class_Descriptor cd_S3559C11 = {  "S3559C11", // class name
  0,0,//no base classes
  &(vtc_S3559C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S3559C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3559C11),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  S3559C10  : S3559C11 , S3559C8 {
  long double s3559c10f0;
  virtual void  v20(); // _ZN8S3559C103v20Ev
  virtual void  v21(); // _ZN8S3559C103v21Ev
  virtual void  v22(); // _ZN8S3559C103v22Ev
  virtual void  v23(); // _ZN8S3559C103v23Ev
  ~S3559C10(); // tgen
  S3559C10(); // tgen
};
//SIG(-1 S3559C10) C1{ BC2{ v5 Fi[9]} BC3{ v6} v1 v2 v3 v4 FD}


void  S3559C10 ::v20(){vfunc_called(this, "_ZN8S3559C103v20Ev");}
void  S3559C10 ::v21(){vfunc_called(this, "_ZN8S3559C103v21Ev");}
void  S3559C10 ::v22(){vfunc_called(this, "_ZN8S3559C103v22Ev");}
void  S3559C10 ::v23(){vfunc_called(this, "_ZN8S3559C103v23Ev");}
S3559C10 ::~S3559C10(){ note_dtor("S3559C10", this);} // tgen
S3559C10 ::S3559C10(){ note_ctor("S3559C10", this);} // tgen

static void Test_S3559C10()
{
  extern Class_Descriptor cd_S3559C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,15)];
    init_test(&cd_S3559C10, buf);
    S3559C10 *dp, &lv = *(dp=new (buf) S3559C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S3559C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C10)");
    check_base_class_offset(lv, (S3559C11*), 0, "S3559C10");
    check_base_class_offset(lv, (S3559C8*), ABISELECT(48,40), "S3559C10");
    check_field_offset(lv, s3559c10f0, ABISELECT(64,44), "S3559C10.s3559c10f0");
    test_class_info(&lv, &cd_S3559C10);
    dp->~S3559C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C10(Test_S3559C10, "S3559C10", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S3559C10C1Ev();
extern void _ZN8S3559C10D1Ev();
Name_Map name_map_S3559C10[] = {
  NSPAIR(_ZN8S3559C10C1Ev),
  NSPAIR(_ZN8S3559C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C11;
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
static Base_Class bases_S3559C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3559C8,    ABISELECT(48,40), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3559C10[];
extern void _ZN8S3559C113v19Ev();
extern void _ZN8S3559C103v20Ev();
extern void _ZN8S3559C103v21Ev();
extern void _ZN8S3559C103v22Ev();
extern void _ZN8S3559C103v23Ev();
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY vtc_S3559C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C10[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v20Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v21Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v22Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v23Ev,
  ABISELECT(-48,-40),
  (VTBL_ENTRY)&(_ZTI8S3559C10[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern VTBL_ENTRY _ZTI8S3559C10[];
extern  VTBL_ENTRY _ZTV8S3559C10[];
Class_Descriptor cd_S3559C10 = {  "S3559C10", // class name
  bases_S3559C10, 2,
  &(vtc_S3559C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S3559C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3559C10),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C12  {
  void *s3559c12f0;
  virtual void  v24(); // _ZN8S3559C123v24Ev
  virtual void  v25(); // _ZN8S3559C123v25Ev
  ~S3559C12(); // tgen
  S3559C12(); // tgen
};
//SIG(-1 S3559C12) C1{ v1 v2 Fp}


void  S3559C12 ::v24(){vfunc_called(this, "_ZN8S3559C123v24Ev");}
void  S3559C12 ::v25(){vfunc_called(this, "_ZN8S3559C123v25Ev");}
S3559C12 ::~S3559C12(){ note_dtor("S3559C12", this);} // tgen
S3559C12 ::S3559C12(){ note_ctor("S3559C12", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S3559C12C1Ev();
extern void _ZN8S3559C12D1Ev();
Name_Map name_map_S3559C12[] = {
  NSPAIR(_ZN8S3559C12C1Ev),
  NSPAIR(_ZN8S3559C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3559C12[];
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
static  VTBL_ENTRY vtc_S3559C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C12[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
};
extern VTBL_ENTRY _ZTI8S3559C12[];
extern  VTBL_ENTRY _ZTV8S3559C12[];
Class_Descriptor cd_S3559C12 = {  "S3559C12", // class name
  0,0,//no base classes
  &(vtc_S3559C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S3559C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3559C12),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  S3559C13  : virtual S3559C9 , virtual S3559C6 {
  int s3559c13f0:4;
  virtual void  v26(); // _ZN8S3559C133v26Ev
  ~S3559C13(); // tgen
  S3559C13(); // tgen
};
//SIG(-1 S3559C13) C1{ VBC2{ v2 v3 v4 v5 Fp Fc} VBC3{ VBC4{ v6 v7 Fp} BC5{ VBC4 vd v8 v9 Fp} BC6{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} v1 Fi:4}


void  S3559C13 ::v26(){vfunc_called(this, "_ZN8S3559C133v26Ev");}
S3559C13 ::~S3559C13(){ note_dtor("S3559C13", this);} // tgen
S3559C13 ::S3559C13(){ note_ctor("S3559C13", this);} // tgen

static void Test_S3559C13()
{
  extern Class_Descriptor cd_S3559C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,28)];
    init_test(&cd_S3559C13, buf);
    S3559C13 *dp, &lv = *(dp=new (buf) S3559C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S3559C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C13)");
    check_base_class_offset(lv, (S3559C9*), ABISELECT(16,8), "S3559C13");
    check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(184,100), "S3559C13");
    check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(184,100), "S3559C13");
    check_base_class_offset(lv, (S3559C7*)(S3559C6*), ABISELECT(48,20), "S3559C13");
    check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(64,28), "S3559C13");
    check_base_class_offset(lv, (S3559C6*), ABISELECT(48,20), "S3559C13");
    set_bf_and_test(lv, s3559c13f0, ABISELECT(8,4), 0, 4, 1, "S3559C13");
    set_bf_and_test(lv, s3559c13f0, ABISELECT(8,4), 0, 4, hide_sll(1LL<<3), "S3559C13");
    test_class_info(&lv, &cd_S3559C13);
    dp->~S3559C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C13(Test_S3559C13, "S3559C13", ABISELECT(208,108));

#else // __cplusplus

extern void _ZN8S3559C13C1Ev();
extern void _ZN8S3559C13D1Ev();
Name_Map name_map_S3559C13[] = {
  NSPAIR(_ZN8S3559C13C1Ev),
  NSPAIR(_ZN8S3559C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C9;
extern VTBL_ENTRY _ZTI7S3559C9[];
extern  VTBL_ENTRY _ZTV7S3559C9[];
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
static Base_Class bases_S3559C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C5,    ABISELECT(184,100), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(64,28), //bcp->offset
    35, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(48,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3559C13[];
extern void _ZN8S3559C133v26Ev();
extern void _ZN8S3559C13D1Ev();
extern void _ZN8S3559C13D0Ev();
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
extern void ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S3559C13D1Ev,_ZThn20_N8S3559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S3559C13D0Ev,_ZThn20_N8S3559C13D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY vtc_S3559C13[] = {
  ABISELECT(184,100),
  ABISELECT(48,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-20),
  ABISELECT(136,80),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S3559C13[];
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C13[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__8S3559C13[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__8S3559C13[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__8S3559C13[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
static  VTT_ENTRY vtt_S3559C13[] = {
  {&(_ZTV8S3559C13[5]),  5,44},
  {&(_ZTV8S3559C13[14]),  14,44},
  {&(_ZTV8S3559C13[28]),  28,44},
  {&(_ZTV8S3559C13[42]),  42,44},
  {&(_ZTV8S3559C13[37]),  37,44},
  {&(_tg__ZTV7S3559C6__8S3559C13[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__8S3559C13[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__8S3559C13[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__8S3559C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3559C13[];
extern  VTBL_ENTRY _ZTV8S3559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C13[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3559C13D0Ev,_ZThn20_N8S3559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3559C13D1Ev,_ZThn20_N8S3559C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3559C13 = {  "S3559C13", // class name
  bases_S3559C13, 5,
  &(vtc_S3559C13[0]), // expected_vtbl_contents
  &(vtt_S3559C13[0]), // expected_vtt_contents
  ABISELECT(208,108), // object size
  NSPAIRA(_ZTI8S3559C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3559C13),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3559C13),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C3  : virtual S3559C4 , S3559C8 , S3559C10 , virtual S3559C12 , virtual S3559C13 {
  ::S7676C14_nt s3559c3f0[9];
  virtual  ~S3559C3(); // _ZN7S3559C3D2Ev
  virtual void  v27(); // _ZN7S3559C33v27Ev
  virtual void  v28(); // _ZN7S3559C33v28Ev
  virtual void  v29(); // _ZN7S3559C33v29Ev
  S3559C3(); // tgen
};
//SIG(-1 S3559C3) C1{ VBC2{ VBC3{ v4 v5 Fp} BC4{ VBC3 BC5{ VBC3 vd v6 v7 Fp} BC6{ v8} vd v9 v10 v11 FL Fi Fp[8] Fi[2] FD Fi} BC6 VBC7{ v12 v13 v14 v15 Fp Fc} v16 v17 v18 v19 v20 FD} BC6 BC8{ BC9{ v21 Fi[9]} BC6 v22 v23 v24 v25 FD} VBC10{ v26 v27 Fp} VBC11{ VBC7 VBC4 v28 Fi:4} vd v1 v2 v3 FU12{ m}[9]}


 S3559C3 ::~S3559C3(){ note_dtor("S3559C3", this);}
void  S3559C3 ::v27(){vfunc_called(this, "_ZN7S3559C33v27Ev");}
void  S3559C3 ::v28(){vfunc_called(this, "_ZN7S3559C33v28Ev");}
void  S3559C3 ::v29(){vfunc_called(this, "_ZN7S3559C33v29Ev");}
S3559C3 ::S3559C3(){ note_ctor("S3559C3", this);} // tgen

static void Test_S3559C3()
{
  extern Class_Descriptor cd_S3559C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(32,72)];
    init_test(&cd_S3559C3, buf);
    S3559C3 *dp, &lv = *(dp=new (buf) S3559C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,284), "sizeof(S3559C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C3)");
    check_base_class_offset(lv, (S3559C5*)(S3559C4*), ABISELECT(272,168), "S3559C3");
    check_base_class_offset(lv, (S3559C5*)(S3559C6*)(S3559C4*), ABISELECT(272,168), "S3559C3");
    check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*)(S3559C4*), ABISELECT(272,168), "S3559C3");
    /*is_ambiguous_... S3559C3::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(272,168), "S3559C3");
    /*is_ambiguous_... S3559C3::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(272,168), "S3559C3");
    check_base_class_offset(lv, (S3559C7*)(S3559C6*)(S3559C4*), ABISELECT(112,72), "S3559C3");
    check_base_class_offset(lv, (S3559C8*)(S3559C6*)(S3559C4*), ABISELECT(128,80), "S3559C3");
    check_base_class_offset(lv, (S3559C6*)(S3559C4*), ABISELECT(112,72), "S3559C3");
    /*is_ambiguous_... S3559C4::S3559C8 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C4*), ABISELECT(248,152), "S3559C3");
    check_base_class_offset(lv, (S3559C9*)(S3559C4*), ABISELECT(288,176), "S3559C3");
    check_base_class_offset(lv, (S3559C9*)(S3559C13*), ABISELECT(288,176), "S3559C3");
    check_base_class_offset(lv, (S3559C4*), ABISELECT(112,72), "S3559C3");
    /*is_ambiguous_... S3559C3::S3559C8 */ AMB_check_base_class_offset(lv, (S3559C8*), 0, "S3559C3");
    check_base_class_offset(lv, (S3559C11*)(S3559C10*), ABISELECT(16,4), "S3559C3");
    check_base_class_offset(lv, (S3559C8*)(S3559C10*), ABISELECT(64,44), "S3559C3");
    check_base_class_offset(lv, (S3559C10*), ABISELECT(16,4), "S3559C3");
    check_base_class_offset(lv, (S3559C12*), ABISELECT(312,188), "S3559C3");
    /*is_ambiguous_... S3559C3::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C6*), ABISELECT(352,204), "S3559C3");
    /*is_ambiguous_... S3559C3::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(368,212), "S3559C3");
    check_base_class_offset(lv, (S3559C6*)(S3559C13*), ABISELECT(352,204), "S3559C3");
    check_base_class_offset(lv, (S3559C13*), ABISELECT(328,196), "S3559C3");
    check_field_offset(lv, s3559c3f0, ABISELECT(96,60), "S3559C3.s3559c3f0");
    test_class_info(&lv, &cd_S3559C3);
    dp->~S3559C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C3(Test_S3559C3, "S3559C3", ABISELECT(496,284));

#else // __cplusplus

extern void _ZN7S3559C3C1Ev();
extern void _ZN7S3559C3D2Ev();
Name_Map name_map_S3559C3[] = {
  NSPAIR(_ZN7S3559C3C1Ev),
  NSPAIR(_ZN7S3559C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C9;
extern VTBL_ENTRY _ZTI7S3559C9[];
extern  VTBL_ENTRY _ZTV7S3559C9[];
extern Class_Descriptor cd_S3559C4;
extern VTBL_ENTRY _ZTI7S3559C4[];
extern  VTBL_ENTRY _ZTV7S3559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C4[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C11;
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C10;
extern VTBL_ENTRY _ZTI8S3559C10[];
extern  VTBL_ENTRY _ZTV8S3559C10[];
extern Class_Descriptor cd_S3559C12;
extern VTBL_ENTRY _ZTI8S3559C12[];
extern  VTBL_ENTRY _ZTV8S3559C12[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C13;
extern VTBL_ENTRY _ZTI8S3559C13[];
extern  VTBL_ENTRY _ZTV8S3559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C13[];
static Base_Class bases_S3559C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    ABISELECT(272,168), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(128,80), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(248,152), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3559C9,    ABISELECT(288,176), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3559C4,    ABISELECT(112,72), //bcp->offset
    24, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3559C11,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(64,44), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3559C10,    ABISELECT(16,4), //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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C12,    ABISELECT(312,188), //bcp->offset
    74, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C7,    ABISELECT(352,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(368,212), //bcp->offset
    107, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(352,204), //bcp->offset
    90, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3559C13,    ABISELECT(328,196), //bcp->offset
    80, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3559C3[];
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C3D1Ev();
extern void _ZN7S3559C3D0Ev();
extern void _ZN7S3559C33v27Ev();
extern void _ZN7S3559C33v28Ev();
extern void _ZN7S3559C33v29Ev();
extern void _ZN8S3559C113v19Ev();
extern void _ZN8S3559C103v20Ev();
extern void _ZN8S3559C103v21Ev();
extern void _ZN8S3559C103v22Ev();
extern void _ZN8S3559C103v23Ev();
extern void _ZN7S3559C82v6Ev();
extern void ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn112_N7S3559C3D1Ev,_ZThn72_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn112_N7S3559C3D0Ev,_ZThn72_N7S3559C3D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
extern void _ZN8S3559C133v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn328_N7S3559C3D1Ev,_ZThn196_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn328_N7S3559C3D0Ev,_ZThn196_N7S3559C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn352_N7S3559C3D1Ev,_ZThn204_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn352_N7S3559C3D0Ev,_ZThn204_N7S3559C3D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY vtc_S3559C3[] = {
  ABISELECT(352,204),
  ABISELECT(328,196),
  ABISELECT(312,188),
  ABISELECT(288,176),
  ABISELECT(272,168),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  (VTBL_ENTRY)&_ZN7S3559C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v29Ev,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v20Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v21Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v22Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v23Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-72),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-176),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
  0,
  0,
  ABISELECT(-312,-188),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
  ABISELECT(-328,-196),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-328,-196),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-352,-204),
  ABISELECT(-80,-36),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern VTBL_ENTRY _ZTV7S3559C3[];
extern void _ZN7S3559C4D1Ev();
extern void _ZN7S3559C4D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C4__7S3559C3[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C67S3559C4__7S3559C3[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C67S3559C4__7S3559C3[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C67S3559C4__7S3559C3[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C67S3559C4__7S3559C3[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C4__7S3559C3[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__7S3559C4__7S3559C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C133v26Ev();
extern void _ZN8S3559C13D1Ev();
extern void _ZN8S3559C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C13__7S3559C3[] = {
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D0Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__8S3559C13__7S3559C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S3559C13D1Ev,_ZThn8_N8S3559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S3559C13D0Ev,_ZThn8_N8S3559C13D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C13__7S3559C3[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  ABISELECT(-80,-36),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__8S3559C13__7S3559C3[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__8S3559C13__7S3559C3[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__7S3559C3[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__A1__7S3559C3[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__A1__7S3559C3[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__A1__7S3559C3[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
static  VTT_ENTRY vtt_S3559C3[] = {
  {&(_ZTV7S3559C3[8]),  8,110},
  {&(_ZTV7S3559C3[40]),  40,110},
  {&(_ZTV7S3559C3[62]),  62,110},
  {&(_ZTV7S3559C3[54]),  54,110},
  {&(_ZTV7S3559C3[57]),  57,110},
  {&(_ZTV7S3559C3[70]),  70,110},
  {&(_ZTV7S3559C3[78]),  78,110},
  {&(_ZTV7S3559C3[87]),  87,110},
  {&(_ZTV7S3559C3[100]),  100,110},
  {&(_ZTV7S3559C3[109]),  109,110},
  {&(_tg__ZTV7S3559C4__7S3559C3[4]),  4,16},
  {&(_tg__ZTV7S3559C67S3559C4__7S3559C3[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C67S3559C4__7S3559C3[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C67S3559C4__7S3559C3[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C67S3559C4__7S3559C3[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C4__7S3559C3[4]),  4,6},
  {&(_tg__ZTV7S3559C9__7S3559C4__7S3559C3[6]),  6,10},
  {&(_tg__ZTV8S3559C13__7S3559C3[5]),  5,8},
  {&(_tg__ZTV7S3559C9__8S3559C13__7S3559C3[6]),  6,10},
  {&(_tg__ZTV7S3559C6__8S3559C13__7S3559C3[10]),  10,17},
  {&(_tg__ZTV7S3559C5__8S3559C13__7S3559C3[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C6__8S3559C13__7S3559C3[2]),  2,3},
  {&(_tg__ZTV7S3559C6__A1__7S3559C3[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__A1__7S3559C3[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__A1__7S3559C3[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__A1__7S3559C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3559C3[];
extern  VTBL_ENTRY _ZTV7S3559C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C3[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3559C13D0Ev,_ZThn8_N8S3559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3559C13D1Ev,_ZThn8_N8S3559C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3559C3D0Ev,_ZThn204_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S3559C3D1Ev,_ZThn204_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S3559C3D0Ev,_ZThn196_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S3559C3D1Ev,_ZThn196_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3559C3D0Ev,_ZThn72_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3559C3D1Ev,_ZThn72_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3559C3 = {  "S3559C3", // class name
  bases_S3559C3, 16,
  &(vtc_S3559C3[0]), // expected_vtbl_contents
  &(vtt_S3559C3[0]), // expected_vtt_contents
  ABISELECT(496,284), // object size
  NSPAIRA(_ZTI7S3559C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3559C3),110, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3559C3),26, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C16  : S3559C5 , virtual S3559C6 , S3559C7 {
  char s3559c16f0;
  int s3559c16f1;
  virtual  ~S3559C16(); // _ZN8S3559C16D2Ev
  virtual void  v30(); // _ZN8S3559C163v30Ev
  virtual void  v31(); // _ZN8S3559C163v31Ev
  virtual void  v32(); // _ZN8S3559C163v32Ev
  virtual void  v33(); // _ZN8S3559C163v33Ev
  S3559C16(); // tgen
};
//SIG(-1 S3559C16) C1{ BC2{ v5 v6 Fp} VBC3{ VBC2 BC4{ VBC2 vd v7 v8 Fp} BC5{ v9} vd v10 v11 v12 FL Fi Fp[8] Fi[2] FD Fi} BC4 vd v1 v2 v3 v4 Fc Fi}


 S3559C16 ::~S3559C16(){ note_dtor("S3559C16", this);}
void  S3559C16 ::v30(){vfunc_called(this, "_ZN8S3559C163v30Ev");}
void  S3559C16 ::v31(){vfunc_called(this, "_ZN8S3559C163v31Ev");}
void  S3559C16 ::v32(){vfunc_called(this, "_ZN8S3559C163v32Ev");}
void  S3559C16 ::v33(){vfunc_called(this, "_ZN8S3559C163v33Ev");}
S3559C16 ::S3559C16(){ note_ctor("S3559C16", this);} // tgen

static void Test_S3559C16()
{
  extern Class_Descriptor cd_S3559C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,29)];
    init_test(&cd_S3559C16, buf);
    S3559C16 *dp, &lv = *(dp=new (buf) S3559C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S3559C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C16)");
    /*is_ambiguous_... S3559C16::S3559C5 */ AMB_check_base_class_offset(lv, (S3559C5*), 0, "S3559C16");
    check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(184,104), "S3559C16");
    check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(184,104), "S3559C16");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*), ABISELECT(184,104), "S3559C16");
    check_base_class_offset(lv, (S3559C7*)(S3559C6*), ABISELECT(48,24), "S3559C16");
    check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(64,32), "S3559C16");
    check_base_class_offset(lv, (S3559C6*), ABISELECT(48,24), "S3559C16");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C7*), ABISELECT(16,8), "S3559C16");
    check_field_offset(lv, s3559c16f0, ABISELECT(32,16), "S3559C16.s3559c16f0");
    check_field_offset(lv, s3559c16f1, ABISELECT(36,20), "S3559C16.s3559c16f1");
    test_class_info(&lv, &cd_S3559C16);
    dp->~S3559C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C16(Test_S3559C16, "S3559C16", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN8S3559C16C1Ev();
extern void _ZN8S3559C16D2Ev();
Name_Map name_map_S3559C16[] = {
  NSPAIR(_ZN8S3559C16C1Ev),
  NSPAIR(_ZN8S3559C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
static Base_Class bases_S3559C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3559C5,    ABISELECT(184,104), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(64,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(48,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C7,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3559C16[];
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN8S3559C16D1Ev();
extern void _ZN8S3559C16D0Ev();
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
extern void ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev)();
extern void ABISELECT(_ZThn48_N8S3559C16D1Ev,_ZThn24_N8S3559C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev)();
extern void ABISELECT(_ZThn48_N8S3559C16D0Ev,_ZThn24_N8S3559C16D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY vtc_S3559C16[] = {
  ABISELECT(184,104),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D0Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
  ABISELECT(168,96),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(136,80),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern VTBL_ENTRY _ZTV8S3559C16[];
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C7__A1__8S3559C16[] = {
  ABISELECT(168,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C7__A1__8S3559C16[] = {
  0,
  0,
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C16[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__8S3559C16[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__8S3559C16[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__8S3559C16[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
static  VTT_ENTRY vtt_S3559C16[] = {
  {&(_ZTV8S3559C16[4]),  4,45},
  {&(_tg__ZTV7S3559C7__A1__8S3559C16[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C7__A1__8S3559C16[4]),  4,6},
  {&(_ZTV8S3559C16[29]),  29,45},
  {&(_ZTV8S3559C16[43]),  43,45},
  {&(_ZTV8S3559C16[38]),  38,45},
  {&(_ZTV8S3559C16[15]),  15,45},
  {&(_tg__ZTV7S3559C6__8S3559C16[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__8S3559C16[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__8S3559C16[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__8S3559C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3559C16[];
extern  VTBL_ENTRY _ZTV8S3559C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C16[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3559C16D0Ev,_ZThn24_N8S3559C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3559C16D1Ev,_ZThn24_N8S3559C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3559C16 = {  "S3559C16", // class name
  bases_S3559C16, 6,
  &(vtc_S3559C16[0]), // expected_vtbl_contents
  &(vtt_S3559C16[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI8S3559C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3559C16),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3559C16),11, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C15  : S3559C6 , virtual S3559C9 , virtual S3559C12 , virtual S3559C16 {
  virtual  ~S3559C15(); // _ZN8S3559C15D2Ev
  virtual void  v34(); // _ZN8S3559C153v34Ev
  virtual void  v35(); // _ZN8S3559C153v35Ev
  virtual void  v36(); // _ZN8S3559C153v36Ev
  S3559C15(); // tgen
};
//SIG(-1 S3559C15) C1{ BC2{ VBC3{ v4 v5 Fp} BC4{ VBC3 vd v6 v7 Fp} BC5{ v8} vd v9 v10 v11 FL Fi Fp[8] Fi[2] FD Fi} VBC6{ v12 v13 v14 v15 Fp Fc} VBC7{ v16 v17 Fp} VBC8{ BC3 VBC2 BC4 vd v18 v19 v20 v21 Fc Fi} vd v1 v2 v3}


 S3559C15 ::~S3559C15(){ note_dtor("S3559C15", this);}
void  S3559C15 ::v34(){vfunc_called(this, "_ZN8S3559C153v34Ev");}
void  S3559C15 ::v35(){vfunc_called(this, "_ZN8S3559C153v35Ev");}
void  S3559C15 ::v36(){vfunc_called(this, "_ZN8S3559C153v36Ev");}
S3559C15 ::S3559C15(){ note_ctor("S3559C15", this);} // tgen

static void Test_S3559C15()
{
  extern Class_Descriptor cd_S3559C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,54)];
    init_test(&cd_S3559C15, buf);
    S3559C15 *dp, &lv = *(dp=new (buf) S3559C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,212), "sizeof(S3559C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C15)");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(136,80), "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(136,80), "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(136,80), "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(136,80), "S3559C15");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C16*), ABISELECT(136,80), "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C6*), 0, "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(16,8), "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C6*), 0, "S3559C15");
    check_base_class_offset(lv, (S3559C9*), ABISELECT(152,88), "S3559C15");
    check_base_class_offset(lv, (S3559C12*), ABISELECT(176,100), "S3559C15");
    /*is_ambiguous_... S3559C16::S3559C5 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C16*), ABISELECT(192,108), "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C6*), ABISELECT(240,132), "S3559C15");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(256,140), "S3559C15");
    check_base_class_offset(lv, (S3559C6*)(S3559C16*), ABISELECT(240,132), "S3559C15");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C16*), ABISELECT(208,116), "S3559C15");
    check_base_class_offset(lv, (S3559C16*), ABISELECT(192,108), "S3559C15");
    test_class_info(&lv, &cd_S3559C15);
    dp->~S3559C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C15(Test_S3559C15, "S3559C15", ABISELECT(384,212));

#else // __cplusplus

extern void _ZN8S3559C15C1Ev();
extern void _ZN8S3559C15D2Ev();
Name_Map name_map_S3559C15[] = {
  NSPAIR(_ZN8S3559C15C1Ev),
  NSPAIR(_ZN8S3559C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C9;
extern VTBL_ENTRY _ZTI7S3559C9[];
extern  VTBL_ENTRY _ZTV7S3559C9[];
extern Class_Descriptor cd_S3559C12;
extern VTBL_ENTRY _ZTI8S3559C12[];
extern  VTBL_ENTRY _ZTV8S3559C12[];
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C16;
extern VTBL_ENTRY _ZTI8S3559C16[];
extern  VTBL_ENTRY _ZTV8S3559C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C16[];
static Base_Class bases_S3559C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    ABISELECT(136,80), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3559C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C6,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C9,    ABISELECT(152,88), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C12,    ABISELECT(176,100), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C5,    ABISELECT(192,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3559C7,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(256,140), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(240,132), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(208,116), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3559C16,    ABISELECT(192,108), //bcp->offset
    42, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3559C15[];
extern void _ZN8S3559C15D1Ev();
extern void _ZN8S3559C15D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN8S3559C153v34Ev();
extern void _ZN8S3559C153v35Ev();
extern void _ZN8S3559C153v36Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev)();
extern void ABISELECT(_ZThn192_N8S3559C15D1Ev,_ZThn108_N8S3559C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev)();
extern void ABISELECT(_ZThn192_N8S3559C15D0Ev,_ZThn108_N8S3559C15D0Ev)() __attribute__((weak));
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
extern void ABISELECT(_ZTvn16_n56_N8S3559C15D1Ev,_ZTvn8_n28_N8S3559C15D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S3559C15D0Ev,_ZTvn8_n28_N8S3559C15D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S3559C15D1Ev,_ZTv0_n16_N8S3559C15D1Ev)();
extern void ABISELECT(_ZThn240_N8S3559C15D1Ev,_ZThn132_N8S3559C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3559C15D0Ev,_ZTv0_n16_N8S3559C15D0Ev)();
extern void ABISELECT(_ZThn240_N8S3559C15D0Ev,_ZThn132_N8S3559C15D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY vtc_S3559C15[] = {
  ABISELECT(240,132),
  ABISELECT(192,108),
  ABISELECT(176,100),
  ABISELECT(152,88),
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN8S3559C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C15D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v34Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v35Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v36Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-192,-108),
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(48,24),
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
  ABISELECT(-72,-36),
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S3559C15D1Ev,_ZTvn8_n28_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S3559C15D0Ev,_ZTvn8_n28_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-104,-52),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C15D1Ev,_ZTv0_n16_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C15D0Ev,_ZTv0_n16_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S3559C15[];
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A__8S3559C15[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__8S3559C15[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__8S3559C15[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__A__8S3559C15[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN8S3559C16D1Ev();
extern void _ZN8S3559C16D0Ev();
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C16__8S3559C15[] = {
  ABISELECT(-56,-28),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D0Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C78S3559C16__A2__8S3559C15[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C78S3559C16__A2__8S3559C15[] = {
  0,
  0,
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev)();
extern void ABISELECT(_ZThn48_N8S3559C16D1Ev,_ZThn24_N8S3559C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev)();
extern void ABISELECT(_ZThn48_N8S3559C16D0Ev,_ZThn24_N8S3559C16D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C16__8S3559C15[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-104,-52),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__A1__8S3559C16__8S3559C15[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__8S3559C16__8S3559C15[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C7__A1__8S3559C16__8S3559C15[] = {
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__8S3559C15[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__A1__8S3559C15[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__A1__8S3559C15[] = {
  0,
  0,
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__A1__8S3559C15[] = {
  0,
  0,
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
static  VTT_ENTRY vtt_S3559C15[] = {
  {&(_ZTV8S3559C15[7]),  7,90},
  {&(_tg__ZTV7S3559C6__A__8S3559C15[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__8S3559C15[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__8S3559C15[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__A__8S3559C15[4]),  4,6},
  {&(_ZTV8S3559C15[24]),  24,90},
  {&(_ZTV8S3559C15[32]),  32,90},
  {&(_ZTV8S3559C15[40]),  40,90},
  {&(_ZTV8S3559C15[55]),  55,90},
  {&(_ZTV8S3559C15[80]),  80,90},
  {&(_ZTV8S3559C15[89]),  89,90},
  {&(_ZTV8S3559C15[66]),  66,90},
  {&(_tg__ZTV8S3559C16__8S3559C15[4]),  4,12},
  {&(_tg__ZTV7S3559C78S3559C16__A2__8S3559C15[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C78S3559C16__A2__8S3559C15[4]),  4,6},
  {&(_tg__ZTV7S3559C6__8S3559C16__8S3559C15[10]),  10,17},
  {&(_tg__ZTV7S3559C5__A1__8S3559C16__8S3559C15[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C6__8S3559C16__8S3559C15[2]),  2,3},
  {&(_tg__ZTV7S3559C7__A1__8S3559C16__8S3559C15[3]),  3,7},
  {&(_tg__ZTV7S3559C6__A1__8S3559C15[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__A1__8S3559C15[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__A1__8S3559C15[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__A1__8S3559C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3559C15[];
extern  VTBL_ENTRY _ZTV8S3559C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C15[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3559C16D0Ev,_ZThn24_N8S3559C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S3559C16D1Ev,_ZThn24_N8S3559C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C15D0Ev,_ZTv0_n16_N8S3559C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S3559C15D0Ev,_ZThn132_N8S3559C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C15D1Ev,_ZTv0_n16_N8S3559C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S3559C15D1Ev,_ZThn132_N8S3559C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3559C15D0Ev,_ZThn108_N8S3559C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S3559C15D1Ev,_ZThn108_N8S3559C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3559C15 = {  "S3559C15", // class name
  bases_S3559C15, 12,
  &(vtc_S3559C15[0]), // expected_vtbl_contents
  &(vtt_S3559C15[0]), // expected_vtt_contents
  ABISELECT(384,212), // object size
  NSPAIRA(_ZTI8S3559C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3559C15),90, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3559C15),23, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C2  : S3559C3 , virtual S3559C15 , S3559C10 {
  virtual  ~S3559C2(); // _ZN7S3559C2D2Ev
  virtual void  v37(); // _ZN7S3559C23v37Ev
  virtual void  v38(); // _ZN7S3559C23v38Ev
  virtual void  v39(); // _ZN7S3559C23v39Ev
  virtual void  v40(); // _ZN7S3559C23v40Ev
  virtual void  v41(); // _ZN7S3559C23v41Ev
  virtual void  v42(); // _ZN7S3559C23v42Ev
  S3559C2(); // tgen
};
//SIG(-1 S3559C2) C1{ BC2{ VBC3{ VBC4{ v7 v8 Fp} BC5{ VBC4 BC6{ VBC4 vd v9 v10 Fp} BC7{ v11} vd v12 v13 v14 FL Fi Fp[8] Fi[2] FD Fi} BC7 VBC8{ v15 v16 v17 v18 Fp Fc} v19 v20 v21 v22 v23 FD} BC7 BC9{ BC10{ v24 Fi[9]} BC7 v25 v26 v27 v28 FD} VBC11{ v29 v30 Fp} VBC12{ VBC8 VBC5 v31 Fi:4} vd v32 v33 v34 FU13{ m}[9]} VBC14{ BC5 VBC8 VBC11 VBC15{ BC4 VBC5 BC6 vd v35 v36 v37 v38 Fc Fi} vd v39 v40 v41} BC9 vd v1 v2 v3 v4 v5 v6}


 S3559C2 ::~S3559C2(){ note_dtor("S3559C2", this);}
void  S3559C2 ::v37(){vfunc_called(this, "_ZN7S3559C23v37Ev");}
void  S3559C2 ::v38(){vfunc_called(this, "_ZN7S3559C23v38Ev");}
void  S3559C2 ::v39(){vfunc_called(this, "_ZN7S3559C23v39Ev");}
void  S3559C2 ::v40(){vfunc_called(this, "_ZN7S3559C23v40Ev");}
void  S3559C2 ::v41(){vfunc_called(this, "_ZN7S3559C23v41Ev");}
void  S3559C2 ::v42(){vfunc_called(this, "_ZN7S3559C23v42Ev");}
S3559C2 ::S3559C2(){ note_ctor("S3559C2", this);} // tgen

static void Test_S3559C2()
{
  extern Class_Descriptor cd_S3559C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(48,112)];
    init_test(&cd_S3559C2, buf);
    S3559C2 *dp, &lv = *(dp=new (buf) S3559C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(752,444), "sizeof(S3559C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C2)");
    check_base_class_offset(lv, (S3559C5*)(S3559C4*), ABISELECT(352,224), "S3559C2");
    check_base_class_offset(lv, (S3559C5*)(S3559C6*)(S3559C4*), ABISELECT(352,224), "S3559C2");
    check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*)(S3559C4*), ABISELECT(352,224), "S3559C2");
    /*is_ambiguous_... S3559C2::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(352,224), "S3559C2");
    /*is_ambiguous_... S3559C2::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(352,224), "S3559C2");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C6*)(S3559C15*), ABISELECT(352,224), "S3559C2");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*)(S3559C15*), ABISELECT(352,224), "S3559C2");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C16*), ABISELECT(352,224), "S3559C2");
    check_base_class_offset(lv, (S3559C7*)(S3559C6*)(S3559C4*), ABISELECT(192,128), "S3559C2");
    check_base_class_offset(lv, (S3559C8*)(S3559C6*)(S3559C4*), ABISELECT(208,136), "S3559C2");
    check_base_class_offset(lv, (S3559C6*)(S3559C4*), ABISELECT(192,128), "S3559C2");
    /*is_ambiguous_... S3559C4::S3559C8 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C4*), ABISELECT(328,208), "S3559C2");
    check_base_class_offset(lv, (S3559C9*)(S3559C4*), ABISELECT(368,232), "S3559C2");
    check_base_class_offset(lv, (S3559C9*)(S3559C13*), ABISELECT(368,232), "S3559C2");
    check_base_class_offset(lv, (S3559C9*)(S3559C15*), ABISELECT(368,232), "S3559C2");
    check_base_class_offset(lv, (S3559C4*)(S3559C3*), ABISELECT(192,128), "S3559C2");
    /*is_ambiguous_... S3559C3::S3559C8 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C3*), 0, "S3559C2");
    check_base_class_offset(lv, (S3559C11*)(S3559C10*)(S3559C3*), ABISELECT(16,4), "S3559C2");
    check_base_class_offset(lv, (S3559C8*)(S3559C10*)(S3559C3*), ABISELECT(64,44), "S3559C2");
    check_base_class_offset(lv, (S3559C10*)(S3559C3*), ABISELECT(16,4), "S3559C2");
    check_base_class_offset(lv, (S3559C12*)(S3559C3*), ABISELECT(392,244), "S3559C2");
    check_base_class_offset(lv, (S3559C12*)(S3559C15*), ABISELECT(392,244), "S3559C2");
    /*is_ambiguous_... S3559C2::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C6*), ABISELECT(432,260), "S3559C2");
    /*is_ambiguous_... S3559C2::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(448,268), "S3559C2");
    check_base_class_offset(lv, (S3559C6*)(S3559C13*), ABISELECT(432,260), "S3559C2");
    check_base_class_offset(lv, (S3559C6*)(S3559C16*), ABISELECT(432,260), "S3559C2");
    check_base_class_offset(lv, (S3559C13*)(S3559C3*), ABISELECT(408,252), "S3559C2");
    check_base_class_offset(lv, (S3559C3*), 0, "S3559C2");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C6*)(S3559C15*), ABISELECT(576,340), "S3559C2");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C6*)(S3559C15*), ABISELECT(592,348), "S3559C2");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C6*)(S3559C15*), ABISELECT(576,340), "S3559C2");
    /*is_ambiguous_... S3559C16::S3559C5 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C16*), ABISELECT(712,420), "S3559C2");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C16*), ABISELECT(728,428), "S3559C2");
    check_base_class_offset(lv, (S3559C16*)(S3559C15*), ABISELECT(712,420), "S3559C2");
    check_base_class_offset(lv, (S3559C15*), ABISELECT(576,340), "S3559C2");
    /*is_ambiguous_... S3559C2::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C11*)(S3559C10*), ABISELECT(112,72), "S3559C2");
    /*is_ambiguous_... S3559C2::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C10*), ABISELECT(160,112), "S3559C2");
    /*is_ambiguous_... S3559C2::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C10*), ABISELECT(112,72), "S3559C2");
    test_class_info(&lv, &cd_S3559C2);
    dp->~S3559C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C2(Test_S3559C2, "S3559C2", ABISELECT(752,444));

#else // __cplusplus

extern void _ZN7S3559C2C1Ev();
extern void _ZN7S3559C2D2Ev();
Name_Map name_map_S3559C2[] = {
  NSPAIR(_ZN7S3559C2C1Ev),
  NSPAIR(_ZN7S3559C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C9;
extern VTBL_ENTRY _ZTI7S3559C9[];
extern  VTBL_ENTRY _ZTV7S3559C9[];
extern Class_Descriptor cd_S3559C4;
extern VTBL_ENTRY _ZTI7S3559C4[];
extern  VTBL_ENTRY _ZTV7S3559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C4[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C11;
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C10;
extern VTBL_ENTRY _ZTI8S3559C10[];
extern  VTBL_ENTRY _ZTV8S3559C10[];
extern Class_Descriptor cd_S3559C12;
extern VTBL_ENTRY _ZTI8S3559C12[];
extern  VTBL_ENTRY _ZTV8S3559C12[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C13;
extern VTBL_ENTRY _ZTI8S3559C13[];
extern  VTBL_ENTRY _ZTV8S3559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C13[];
extern Class_Descriptor cd_S3559C3;
extern VTBL_ENTRY _ZTI7S3559C3[];
extern  VTBL_ENTRY _ZTV7S3559C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C3[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C16;
extern VTBL_ENTRY _ZTI8S3559C16[];
extern  VTBL_ENTRY _ZTV8S3559C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C16[];
extern Class_Descriptor cd_S3559C15;
extern VTBL_ENTRY _ZTI8S3559C15[];
extern  VTBL_ENTRY _ZTV8S3559C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C15[];
extern Class_Descriptor cd_S3559C11;
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C10;
extern VTBL_ENTRY _ZTI8S3559C10[];
extern  VTBL_ENTRY _ZTV8S3559C10[];
static Base_Class bases_S3559C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    ABISELECT(352,224), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(208,136), //bcp->offset
    70, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(328,208), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3559C9,    ABISELECT(368,232), //bcp->offset
    82, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3559C4,    ABISELECT(192,128), //bcp->offset
    42, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3559C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3559C11,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(64,44), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3559C10,    ABISELECT(16,4), //bcp->offset
    22, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S3559C12,    ABISELECT(392,244), //bcp->offset
    92, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(432,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(448,268), //bcp->offset
    125, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(432,260), //bcp->offset
    108, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3559C13,    ABISELECT(408,252), //bcp->offset
    98, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3559C3,    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
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C7,    ABISELECT(576,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(592,348), //bcp->offset
    155, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(576,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3559C5,    ABISELECT(712,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3559C7,    ABISELECT(728,428), //bcp->offset
    179, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3559C16,    ABISELECT(712,420), //bcp->offset
    158, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S3559C15,    ABISELECT(576,340), //bcp->offset
    128, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3559C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(160,112), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3559C10,    ABISELECT(112,72), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3559C2[];
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C2D1Ev();
extern void _ZN7S3559C2D0Ev();
extern void _ZN7S3559C33v27Ev();
extern void _ZN7S3559C33v28Ev();
extern void _ZN7S3559C33v29Ev();
extern void _ZN7S3559C23v37Ev();
extern void _ZN7S3559C23v38Ev();
extern void _ZN7S3559C23v39Ev();
extern void _ZN7S3559C23v40Ev();
extern void _ZN7S3559C23v41Ev();
extern void _ZN7S3559C23v42Ev();
extern void _ZN8S3559C113v19Ev();
extern void _ZN8S3559C103v20Ev();
extern void _ZN8S3559C103v21Ev();
extern void _ZN8S3559C103v22Ev();
extern void _ZN8S3559C103v23Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN8S3559C113v19Ev();
extern void _ZN8S3559C103v20Ev();
extern void _ZN8S3559C103v21Ev();
extern void _ZN8S3559C103v22Ev();
extern void _ZN8S3559C103v23Ev();
extern void _ZN7S3559C82v6Ev();
extern void ABISELECT(_ZTv0_n40_N7S3559C2D1Ev,_ZTv0_n20_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S3559C2D1Ev,_ZThn128_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3559C2D0Ev,_ZTv0_n20_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S3559C2D0Ev,_ZThn128_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
extern void _ZN8S3559C133v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn408_N7S3559C2D1Ev,_ZThn252_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn408_N7S3559C2D0Ev,_ZThn252_N7S3559C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C2D1Ev,_ZTv0_n16_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn432_N7S3559C2D1Ev,_ZThn260_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C2D0Ev,_ZTv0_n16_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn432_N7S3559C2D0Ev,_ZThn260_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C82v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3559C2D1Ev,_ZTv0_n32_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn576_N7S3559C2D1Ev,_ZThn340_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3559C2D0Ev,_ZTv0_n32_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn576_N7S3559C2D0Ev,_ZThn340_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN8S3559C153v34Ev();
extern void _ZN8S3559C153v35Ev();
extern void _ZN8S3559C153v36Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn712_N7S3559C2D1Ev,_ZThn420_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn712_N7S3559C2D0Ev,_ZThn420_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
extern void ABISELECT(_ZTvn16_n56_N7S3559C2D1Ev,_ZTvn8_n28_N7S3559C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3559C2D0Ev,_ZTvn8_n28_N7S3559C2D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY vtc_S3559C2[] = {
  ABISELECT(712,420),
  ABISELECT(576,340),
  ABISELECT(432,260),
  ABISELECT(408,252),
  ABISELECT(392,244),
  ABISELECT(368,232),
  ABISELECT(352,224),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  (VTBL_ENTRY)&_ZN7S3559C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v38Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v39Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v40Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v41Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v42Ev,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v20Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v21Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v22Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v23Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v20Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v21Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v22Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v23Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-128),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C2D1Ev,_ZTv0_n20_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C2D0Ev,_ZTv0_n20_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-328,-208),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-352,-224),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
  0,
  0,
  ABISELECT(-392,-244),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
  ABISELECT(-408,-252),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-408,-252),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-260),
  ABISELECT(-80,-36),
  ABISELECT(-432,-260),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C2D1Ev,_ZTv0_n16_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C2D0Ev,_ZTv0_n16_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  ABISELECT(-448,-268),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-576,-340),
  ABISELECT(-144,-80),
  ABISELECT(136,80),
  ABISELECT(-184,-96),
  ABISELECT(-208,-108),
  ABISELECT(-224,-116),
  ABISELECT(-576,-340),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3559C2D1Ev,_ZTv0_n32_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3559C2D0Ev,_ZTv0_n32_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v34Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v35Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v36Ev,
  ABISELECT(-592,-348),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-712,-420),
  0,
  0,
  ABISELECT(-360,-196),
  ABISELECT(-280,-160),
  ABISELECT(-712,-420),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
  ABISELECT(-376,-204),
  ABISELECT(-728,-428),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3559C2D1Ev,_ZTvn8_n28_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3559C2D0Ev,_ZTvn8_n28_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern VTBL_ENTRY _ZTV7S3559C2[];
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C3D1Ev();
extern void _ZN7S3559C3D0Ev();
extern void _ZN7S3559C33v27Ev();
extern void _ZN7S3559C33v28Ev();
extern void _ZN7S3559C33v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C3__7S3559C2[] = {
  ABISELECT(432,260),
  ABISELECT(408,252),
  ABISELECT(392,244),
  ABISELECT(368,232),
  ABISELECT(352,224),
  ABISELECT(192,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  (VTBL_ENTRY)&_ZN7S3559C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v29Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn192_N7S3559C3D1Ev,_ZThn128_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn192_N7S3559C3D0Ev,_ZThn128_N7S3559C3D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C4__7S3559C3__7S3559C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-128),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C3__7S3559C2[] = {
  0,
  0,
  ABISELECT(-352,-224),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C67S3559C4__7S3559C3__7S3559C2[] = {
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C4__A1__7S3559C3__7S3559C2[] = {
  ABISELECT(-328,-208),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__7S3559C3__7S3559C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C12__7S3559C3__7S3559C2[] = {
  0,
  0,
  ABISELECT(-392,-244),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
};
extern void _ZN8S3559C133v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn408_N7S3559C3D1Ev,_ZThn252_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn408_N7S3559C3D0Ev,_ZThn252_N7S3559C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3559C13__7S3559C3__7S3559C2[] = {
  ABISELECT(-408,-252),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-408,-252),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn432_N7S3559C3D1Ev,_ZThn260_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn432_N7S3559C3D0Ev,_ZThn260_N7S3559C3D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__7S3559C3__7S3559C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-432,-260),
  ABISELECT(-80,-36),
  ABISELECT(-432,-260),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__A4__7S3559C3__7S3559C2[] = {
  ABISELECT(-448,-268),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C4D1Ev();
extern void _ZN7S3559C4D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C4__7S3559C2[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C67S3559C4__7S3559C2[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C67S3559C4__7S3559C2[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C67S3559C4__7S3559C2[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C67S3559C4__7S3559C2[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C4__7S3559C2[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__7S3559C4__7S3559C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C133v26Ev();
extern void _ZN8S3559C13D1Ev();
extern void _ZN8S3559C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C13__7S3559C2[] = {
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D0Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__8S3559C13__7S3559C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S3559C13D1Ev,_ZThn8_N8S3559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S3559C13D0Ev,_ZThn8_N8S3559C13D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C13__7S3559C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  ABISELECT(-80,-36),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__8S3559C13__7S3559C2[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__8S3559C13__7S3559C2[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__7S3559C2[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__A1__7S3559C2[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__A1__7S3559C2[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__A1__7S3559C2[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN8S3559C15D1Ev();
extern void _ZN8S3559C15D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN8S3559C153v34Ev();
extern void _ZN8S3559C153v35Ev();
extern void _ZN8S3559C153v36Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C15__7S3559C2[] = {
  ABISELECT(-144,-80),
  ABISELECT(136,80),
  ABISELECT(-184,-96),
  ABISELECT(-208,-108),
  ABISELECT(-224,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN8S3559C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C15D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v34Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v35Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v36Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C68S3559C15__A2__7S3559C2[] = {
  ABISELECT(-224,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C68S3559C15__A2__7S3559C2[] = {
  ABISELECT(-224,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C68S3559C15__A2__7S3559C2[] = {
  0,
  0,
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C68S3559C15__A2__7S3559C2[] = {
  0,
  0,
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__8S3559C15__7S3559C2[] = {
  0,
  0,
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__8S3559C15__7S3559C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(208,108),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C12__8S3559C15__7S3559C2[] = {
  0,
  0,
  ABISELECT(184,96),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev)();
extern void ABISELECT(_ZThn136_N8S3559C15D1Ev,_ZThn80_N8S3559C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev)();
extern void ABISELECT(_ZThn136_N8S3559C15D0Ev,_ZThn80_N8S3559C15D0Ev)() __attribute__((weak));
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C16__8S3559C15__7S3559C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  0,
  0,
  ABISELECT(-360,-196),
  ABISELECT(-280,-160),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C15D1Ev,_ZTv0_n16_N8S3559C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S3559C15D0Ev,_ZTv0_n16_N8S3559C15D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__8S3559C15__7S3559C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,80),
  ABISELECT(-80,-36),
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C15D1Ev,_ZTv0_n16_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C15D0Ev,_ZTv0_n16_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__A1__8S3559C15__7S3559C2[] = {
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S3559C15D1Ev,_ZTvn8_n28_N8S3559C15D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S3559C15D0Ev,_ZTvn8_n28_N8S3559C15D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C78S3559C16__A2__8S3559C15__7S3559C2[] = {
  ABISELECT(-376,-204),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S3559C15D1Ev,_ZTvn8_n28_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S3559C15D0Ev,_ZTvn8_n28_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN8S3559C16D1Ev();
extern void _ZN8S3559C16D0Ev();
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C16__7S3559C2[] = {
  ABISELECT(-360,-196),
  ABISELECT(-280,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D0Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C78S3559C16__A3__7S3559C2[] = {
  ABISELECT(-376,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C78S3559C16__A3__7S3559C2[] = {
  0,
  0,
  ABISELECT(376,204),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C16__7S3559C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(280,160),
  ABISELECT(-80,-36),
  ABISELECT(280,160),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__A1__8S3559C16__7S3559C2[] = {
  0,
  0,
  ABISELECT(360,196),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__8S3559C16__7S3559C2[] = {
  ABISELECT(264,152),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C7__A1__8S3559C16__7S3559C2[] = {
  ABISELECT(-376,-204),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
static  VTT_ENTRY vtt_S3559C2[] = {
  {&(_ZTV7S3559C2[10]),  10,186},
  {&(_tg__ZTV7S3559C3__7S3559C2[8]),  8,14},
  {&(_tg__ZTV7S3559C4__7S3559C3__7S3559C2[16]),  16,28},
  {&(_tg__ZTV7S3559C5__7S3559C3__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C67S3559C4__7S3559C3__7S3559C2[2]),  2,3},
  {&(_tg__ZTV7S3559C87S3559C4__A1__7S3559C3__7S3559C2[2]),  2,3},
  {&(_tg__ZTV7S3559C9__7S3559C3__7S3559C2[6]),  6,10},
  {&(_tg__ZTV8S3559C12__7S3559C3__7S3559C2[4]),  4,6},
  {&(_tg__ZTV8S3559C13__7S3559C3__7S3559C2[7]),  7,10},
  {&(_tg__ZTV7S3559C6__A1__7S3559C3__7S3559C2[10]),  10,17},
  {&(_tg__ZTV7S3559C87S3559C6__A4__7S3559C3__7S3559C2[2]),  2,3},
  {&(_ZTV7S3559C2[58]),  58,186},
  {&(_ZTV7S3559C2[80]),  80,186},
  {&(_ZTV7S3559C2[72]),  72,186},
  {&(_ZTV7S3559C2[75]),  75,186},
  {&(_ZTV7S3559C2[88]),  88,186},
  {&(_ZTV7S3559C2[96]),  96,186},
  {&(_ZTV7S3559C2[105]),  105,186},
  {&(_ZTV7S3559C2[118]),  118,186},
  {&(_ZTV7S3559C2[127]),  127,186},
  {&(_ZTV7S3559C2[145]),  145,186},
  {&(_ZTV7S3559C2[157]),  157,186},
  {&(_ZTV7S3559C2[171]),  171,186},
  {&(_ZTV7S3559C2[182]),  182,186},
  {&(_tg__ZTV7S3559C4__7S3559C2[4]),  4,16},
  {&(_tg__ZTV7S3559C67S3559C4__7S3559C2[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C67S3559C4__7S3559C2[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C67S3559C4__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C67S3559C4__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C4__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C9__7S3559C4__7S3559C2[6]),  6,10},
  {&(_tg__ZTV8S3559C13__7S3559C2[5]),  5,8},
  {&(_tg__ZTV7S3559C9__8S3559C13__7S3559C2[6]),  6,10},
  {&(_tg__ZTV7S3559C6__8S3559C13__7S3559C2[10]),  10,17},
  {&(_tg__ZTV7S3559C5__8S3559C13__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C6__8S3559C13__7S3559C2[2]),  2,3},
  {&(_tg__ZTV7S3559C6__A1__7S3559C2[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__A1__7S3559C2[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__A1__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__A1__7S3559C2[4]),  4,6},
  {&(_tg__ZTV8S3559C15__7S3559C2[7]),  7,17},
  {&(_tg__ZTV7S3559C68S3559C15__A2__7S3559C2[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C68S3559C15__A2__7S3559C2[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C68S3559C15__A2__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C68S3559C15__A2__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C5__8S3559C15__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C9__8S3559C15__7S3559C2[6]),  6,10},
  {&(_tg__ZTV8S3559C12__8S3559C15__7S3559C2[4]),  4,6},
  {&(_tg__ZTV8S3559C16__8S3559C15__7S3559C2[13]),  13,21},
  {&(_tg__ZTV7S3559C6__A1__8S3559C15__7S3559C2[10]),  10,17},
  {&(_tg__ZTV7S3559C87S3559C6__A1__8S3559C15__7S3559C2[2]),  2,3},
  {&(_tg__ZTV7S3559C78S3559C16__A2__8S3559C15__7S3559C2[3]),  3,7},
  {&(_tg__ZTV8S3559C16__7S3559C2[4]),  4,12},
  {&(_tg__ZTV7S3559C78S3559C16__A3__7S3559C2[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C78S3559C16__A3__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C6__8S3559C16__7S3559C2[10]),  10,17},
  {&(_tg__ZTV7S3559C5__A1__8S3559C16__7S3559C2[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C6__8S3559C16__7S3559C2[2]),  2,3},
  {&(_tg__ZTV7S3559C7__A1__8S3559C16__7S3559C2[3]),  3,7},
};
extern VTBL_ENTRY _ZTI7S3559C2[];
extern  VTBL_ENTRY _ZTV7S3559C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C2[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3559C15D0Ev,_ZThn80_N8S3559C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3559C15D1Ev,_ZThn80_N8S3559C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3559C13D0Ev,_ZThn8_N8S3559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3559C13D1Ev,_ZThn8_N8S3559C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3559C3D0Ev,_ZThn260_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3559C3D1Ev,_ZThn260_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S3559C3D0Ev,_ZThn252_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S3559C3D1Ev,_ZThn252_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3559C3D0Ev,_ZThn128_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3559C3D1Ev,_ZThn128_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3559C2D0Ev,_ZTv0_n32_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S3559C2D0Ev,_ZThn340_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3559C2D1Ev,_ZTv0_n32_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S3559C2D1Ev,_ZThn340_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C2D0Ev,_ZTv0_n16_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3559C2D0Ev,_ZThn260_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C2D1Ev,_ZTv0_n16_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N7S3559C2D1Ev,_ZThn260_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N7S3559C2D0Ev,_ZThn420_N7S3559C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S3559C2D0Ev,_ZThn252_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn712_N7S3559C2D1Ev,_ZThn420_N7S3559C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S3559C2D1Ev,_ZThn252_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C2D0Ev,_ZTv0_n20_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3559C2D0Ev,_ZThn128_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C2D1Ev,_ZTv0_n20_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3559C2D1Ev,_ZThn128_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3559C2 = {  "S3559C2", // class name
  bases_S3559C2, 27,
  &(vtc_S3559C2[0]), // expected_vtbl_contents
  &(vtt_S3559C2[0]), // expected_vtt_contents
  ABISELECT(752,444), // object size
  NSPAIRA(_ZTI7S3559C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3559C2),186, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3559C2),59, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3559C1  : S3559C2 , S3559C10 , S3559C12 {
  virtual  ~S3559C1(); // _ZN7S3559C1D2Ev
  virtual void  v1(); // _ZN7S3559C12v1Ev
  S3559C1(); // tgen
};
//SIG(1 S3559C1) C1{ BC2{ BC3{ VBC4{ VBC5{ v2 v3 Fp} BC6{ VBC5 BC7{ VBC5 vd v4 v5 Fp} BC8{ v6} vd v7 v8 v9 FL Fi Fp[8] Fi[2] FD Fi} BC8 VBC9{ v10 v11 v12 v13 Fp Fc} v14 v15 v16 v17 v18 FD} BC8 BC10{ BC11{ v19 Fi[9]} BC8 v20 v21 v22 v23 FD} VBC12{ v24 v25 Fp} VBC13{ VBC9 VBC6 v26 Fi:4} vd v27 v28 v29 FU14{ m}[9]} VBC15{ BC6 VBC9 VBC12 VBC16{ BC5 VBC6 BC7 vd v30 v31 v32 v33 Fc Fi} vd v34 v35 v36} BC10 vd v37 v38 v39 v40 v41 v42} BC10 BC12 vd v1}


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

static void Test_S3559C1()
{
  extern Class_Descriptor cd_S3559C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,128)];
    init_test(&cd_S3559C1, buf);
    S3559C1 *dp, &lv = *(dp=new (buf) S3559C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,508), "sizeof(S3559C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3559C1)");
    check_base_class_offset(lv, (S3559C5*)(S3559C4*), ABISELECT(448,288), "S3559C1");
    check_base_class_offset(lv, (S3559C5*)(S3559C6*)(S3559C4*), ABISELECT(448,288), "S3559C1");
    check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*)(S3559C4*), ABISELECT(448,288), "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C6*), ABISELECT(448,288), "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*), ABISELECT(448,288), "S3559C1");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C6*)(S3559C15*), ABISELECT(448,288), "S3559C1");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C6*)(S3559C15*), ABISELECT(448,288), "S3559C1");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C7*)(S3559C16*), ABISELECT(448,288), "S3559C1");
    check_base_class_offset(lv, (S3559C7*)(S3559C6*)(S3559C4*), ABISELECT(288,192), "S3559C1");
    check_base_class_offset(lv, (S3559C8*)(S3559C6*)(S3559C4*), ABISELECT(304,200), "S3559C1");
    check_base_class_offset(lv, (S3559C6*)(S3559C4*), ABISELECT(288,192), "S3559C1");
    /*is_ambiguous_... S3559C4::S3559C8 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C4*), ABISELECT(424,272), "S3559C1");
    check_base_class_offset(lv, (S3559C9*)(S3559C4*), ABISELECT(464,296), "S3559C1");
    check_base_class_offset(lv, (S3559C9*)(S3559C13*), ABISELECT(464,296), "S3559C1");
    check_base_class_offset(lv, (S3559C9*)(S3559C15*), ABISELECT(464,296), "S3559C1");
    check_base_class_offset(lv, (S3559C4*)(S3559C3*)(S3559C2*), ABISELECT(288,192), "S3559C1");
    /*is_ambiguous_... S3559C3::S3559C8 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C3*)(S3559C2*), 0, "S3559C1");
    check_base_class_offset(lv, (S3559C11*)(S3559C10*)(S3559C3*)(S3559C2*), ABISELECT(16,4), "S3559C1");
    check_base_class_offset(lv, (S3559C8*)(S3559C10*)(S3559C3*)(S3559C2*), ABISELECT(64,44), "S3559C1");
    check_base_class_offset(lv, (S3559C10*)(S3559C3*)(S3559C2*), ABISELECT(16,4), "S3559C1");
    check_base_class_offset(lv, (S3559C12*)(S3559C3*)(S3559C2*), ABISELECT(488,308), "S3559C1");
    check_base_class_offset(lv, (S3559C12*)(S3559C15*), ABISELECT(488,308), "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C6*), ABISELECT(528,324), "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C6*), ABISELECT(544,332), "S3559C1");
    check_base_class_offset(lv, (S3559C6*)(S3559C13*), ABISELECT(528,324), "S3559C1");
    check_base_class_offset(lv, (S3559C6*)(S3559C16*), ABISELECT(528,324), "S3559C1");
    check_base_class_offset(lv, (S3559C13*)(S3559C3*)(S3559C2*), ABISELECT(504,316), "S3559C1");
    check_base_class_offset(lv, (S3559C3*)(S3559C2*), 0, "S3559C1");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C6*)(S3559C15*), ABISELECT(672,404), "S3559C1");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C6*)(S3559C15*), ABISELECT(688,412), "S3559C1");
    /*is_ambiguous_... S3559C15::S3559C6 */ AMB_check_base_class_offset(lv, (S3559C6*)(S3559C15*), ABISELECT(672,404), "S3559C1");
    /*is_ambiguous_... S3559C16::S3559C5 */ AMB_check_base_class_offset(lv, (S3559C5*)(S3559C16*), ABISELECT(808,484), "S3559C1");
    /*is_ambiguous_... S3559C16::S3559C7 */ AMB_check_base_class_offset(lv, (S3559C7*)(S3559C16*), ABISELECT(824,492), "S3559C1");
    check_base_class_offset(lv, (S3559C16*)(S3559C15*), ABISELECT(808,484), "S3559C1");
    check_base_class_offset(lv, (S3559C15*)(S3559C2*), ABISELECT(672,404), "S3559C1");
    /*is_ambiguous_... S3559C2::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C11*)(S3559C10*)(S3559C2*), ABISELECT(112,72), "S3559C1");
    /*is_ambiguous_... S3559C2::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C10*)(S3559C2*), ABISELECT(160,112), "S3559C1");
    /*is_ambiguous_... S3559C2::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C10*)(S3559C2*), ABISELECT(112,72), "S3559C1");
    check_base_class_offset(lv, (S3559C2*), 0, "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C11*)(S3559C10*), ABISELECT(192,128), "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C8*)(S3559C10*), ABISELECT(240,168), "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C10 */ AMB_check_base_class_offset(lv, (S3559C10*), ABISELECT(192,128), "S3559C1");
    /*is_ambiguous_... S3559C1::S3559C12 */ AMB_check_base_class_offset(lv, (S3559C12*), ABISELECT(272,184), "S3559C1");
    test_class_info(&lv, &cd_S3559C1);
    dp->~S3559C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3559C1(Test_S3559C1, "S3559C1", ABISELECT(848,508));

#else // __cplusplus

extern void _ZN7S3559C1C1Ev();
extern void _ZN7S3559C1D2Ev();
Name_Map name_map_S3559C1[] = {
  NSPAIR(_ZN7S3559C1C1Ev),
  NSPAIR(_ZN7S3559C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C9;
extern VTBL_ENTRY _ZTI7S3559C9[];
extern  VTBL_ENTRY _ZTV7S3559C9[];
extern Class_Descriptor cd_S3559C4;
extern VTBL_ENTRY _ZTI7S3559C4[];
extern  VTBL_ENTRY _ZTV7S3559C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C4[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C11;
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C10;
extern VTBL_ENTRY _ZTI8S3559C10[];
extern  VTBL_ENTRY _ZTV8S3559C10[];
extern Class_Descriptor cd_S3559C12;
extern VTBL_ENTRY _ZTI8S3559C12[];
extern  VTBL_ENTRY _ZTV8S3559C12[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C13;
extern VTBL_ENTRY _ZTI8S3559C13[];
extern  VTBL_ENTRY _ZTV8S3559C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C13[];
extern Class_Descriptor cd_S3559C3;
extern VTBL_ENTRY _ZTI7S3559C3[];
extern  VTBL_ENTRY _ZTV7S3559C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C3[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C6;
extern VTBL_ENTRY _ZTI7S3559C6[];
extern  VTBL_ENTRY _ZTV7S3559C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C6[];
extern Class_Descriptor cd_S3559C5;
extern VTBL_ENTRY _ZTI7S3559C5[];
extern  VTBL_ENTRY _ZTV7S3559C5[];
extern Class_Descriptor cd_S3559C7;
extern VTBL_ENTRY _ZTI7S3559C7[];
extern  VTBL_ENTRY _ZTV7S3559C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C7[];
extern Class_Descriptor cd_S3559C16;
extern VTBL_ENTRY _ZTI8S3559C16[];
extern  VTBL_ENTRY _ZTV8S3559C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C16[];
extern Class_Descriptor cd_S3559C15;
extern VTBL_ENTRY _ZTI8S3559C15[];
extern  VTBL_ENTRY _ZTV8S3559C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3559C15[];
extern Class_Descriptor cd_S3559C11;
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C10;
extern VTBL_ENTRY _ZTI8S3559C10[];
extern  VTBL_ENTRY _ZTV8S3559C10[];
extern Class_Descriptor cd_S3559C2;
extern VTBL_ENTRY _ZTI7S3559C2[];
extern  VTBL_ENTRY _ZTV7S3559C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C2[];
extern Class_Descriptor cd_S3559C11;
extern VTBL_ENTRY _ZTI8S3559C11[];
extern  VTBL_ENTRY _ZTV8S3559C11[];
extern Class_Descriptor cd_S3559C8;
extern VTBL_ENTRY _ZTI7S3559C8[];
extern  VTBL_ENTRY _ZTV7S3559C8[];
extern Class_Descriptor cd_S3559C10;
extern VTBL_ENTRY _ZTI8S3559C10[];
extern  VTBL_ENTRY _ZTV8S3559C10[];
extern Class_Descriptor cd_S3559C12;
extern VTBL_ENTRY _ZTI8S3559C12[];
extern  VTBL_ENTRY _ZTV8S3559C12[];
static Base_Class bases_S3559C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3559C5,    ABISELECT(448,288), //bcp->offset
    91, //bcp->virtual_function_table_offset
    4, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(304,200), //bcp->offset
    85, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(424,272), //bcp->offset
    88, //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3559C9,    ABISELECT(464,296), //bcp->offset
    97, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3559C4,    ABISELECT(288,192), //bcp->offset
    57, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3559C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3559C11,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(64,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3559C10,    ABISELECT(16,4), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3559C12,    ABISELECT(488,308), //bcp->offset
    107, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3559C7,    ABISELECT(528,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(544,332), //bcp->offset
    140, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(528,324), //bcp->offset
    123, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3559C13,    ABISELECT(504,316), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3559C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3559C7,    ABISELECT(672,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(688,412), //bcp->offset
    170, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3559C6,    ABISELECT(672,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3559C5,    ABISELECT(808,484), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S3559C7,    ABISELECT(824,492), //bcp->offset
    194, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3559C16,    ABISELECT(808,484), //bcp->offset
    173, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S3559C15,    ABISELECT(672,404), //bcp->offset
    143, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S3559C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(160,112), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3559C10,    ABISELECT(112,72), //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
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3559C2,    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
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C11,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3559C8,    ABISELECT(240,168), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3559C10,    ABISELECT(192,128), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3559C12,    ABISELECT(272,184), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3559C1[];
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C1D1Ev();
extern void _ZN7S3559C1D0Ev();
extern void _ZN7S3559C33v27Ev();
extern void _ZN7S3559C33v28Ev();
extern void _ZN7S3559C33v29Ev();
extern void _ZN7S3559C23v37Ev();
extern void _ZN7S3559C23v38Ev();
extern void _ZN7S3559C23v39Ev();
extern void _ZN7S3559C23v40Ev();
extern void _ZN7S3559C23v41Ev();
extern void _ZN7S3559C23v42Ev();
extern void _ZN7S3559C12v1Ev();
extern void _ZN8S3559C113v19Ev();
extern void _ZN8S3559C103v20Ev();
extern void _ZN8S3559C103v21Ev();
extern void _ZN8S3559C103v22Ev();
extern void _ZN8S3559C103v23Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN8S3559C113v19Ev();
extern void _ZN8S3559C103v20Ev();
extern void _ZN8S3559C103v21Ev();
extern void _ZN8S3559C103v22Ev();
extern void _ZN8S3559C103v23Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN8S3559C113v19Ev();
extern void _ZN8S3559C103v20Ev();
extern void _ZN8S3559C103v21Ev();
extern void _ZN8S3559C103v22Ev();
extern void _ZN8S3559C103v23Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
extern void ABISELECT(_ZTv0_n40_N7S3559C1D1Ev,_ZTv0_n20_N7S3559C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S3559C1D1Ev,_ZThn192_N7S3559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3559C1D0Ev,_ZTv0_n20_N7S3559C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S3559C1D0Ev,_ZThn192_N7S3559C1D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
extern void _ZN8S3559C133v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C1D1Ev,_ZTv0_n28_N7S3559C1D1Ev)();
extern void ABISELECT(_ZThn504_N7S3559C1D1Ev,_ZThn316_N7S3559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C1D0Ev,_ZTv0_n28_N7S3559C1D0Ev)();
extern void ABISELECT(_ZThn504_N7S3559C1D0Ev,_ZThn316_N7S3559C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C1D1Ev,_ZTv0_n16_N7S3559C1D1Ev)();
extern void ABISELECT(_ZThn528_N7S3559C1D1Ev,_ZThn324_N7S3559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C1D0Ev,_ZTv0_n16_N7S3559C1D0Ev)();
extern void ABISELECT(_ZThn528_N7S3559C1D0Ev,_ZThn324_N7S3559C1D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C82v6Ev();
extern void ABISELECT(_ZTv0_n64_N7S3559C1D1Ev,_ZTv0_n32_N7S3559C1D1Ev)();
extern void ABISELECT(_ZThn672_N7S3559C1D1Ev,_ZThn404_N7S3559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3559C1D0Ev,_ZTv0_n32_N7S3559C1D0Ev)();
extern void ABISELECT(_ZThn672_N7S3559C1D0Ev,_ZThn404_N7S3559C1D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN8S3559C153v34Ev();
extern void _ZN8S3559C153v35Ev();
extern void _ZN8S3559C153v36Ev();
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C1D1Ev,_ZTv0_n28_N7S3559C1D1Ev)();
extern void ABISELECT(_ZThn808_N7S3559C1D1Ev,_ZThn484_N7S3559C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C1D0Ev,_ZTv0_n28_N7S3559C1D0Ev)();
extern void ABISELECT(_ZThn808_N7S3559C1D0Ev,_ZThn484_N7S3559C1D0Ev)() __attribute__((weak));
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
extern void ABISELECT(_ZTvn16_n56_N7S3559C1D1Ev,_ZTvn8_n28_N7S3559C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3559C1D0Ev,_ZTvn8_n28_N7S3559C1D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY vtc_S3559C1[] = {
  ABISELECT(808,484),
  ABISELECT(672,404),
  ABISELECT(528,324),
  ABISELECT(504,316),
  ABISELECT(488,308),
  ABISELECT(464,296),
  ABISELECT(448,288),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  (VTBL_ENTRY)&_ZN7S3559C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v38Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v39Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v40Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v41Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v42Ev,
  (VTBL_ENTRY)&_ZN7S3559C12v1Ev,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v20Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v21Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v22Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v23Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v20Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v21Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v22Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v23Ev,
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN8S3559C113v19Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v20Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v21Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v22Ev,
  (VTBL_ENTRY)&_ZN8S3559C103v23Ev,
  ABISELECT(-240,-168),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C1D1Ev,_ZTv0_n20_N7S3559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C1D0Ev,_ZTv0_n20_N7S3559C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(-424,-272),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-296),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
  0,
  0,
  ABISELECT(-488,-308),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
  ABISELECT(-504,-316),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-504,-316),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C1D1Ev,_ZTv0_n28_N7S3559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C1D0Ev,_ZTv0_n28_N7S3559C1D0Ev),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-324),
  ABISELECT(-80,-36),
  ABISELECT(-528,-324),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C1D1Ev,_ZTv0_n16_N7S3559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C1D0Ev,_ZTv0_n16_N7S3559C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  ABISELECT(-544,-332),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-672,-404),
  ABISELECT(-144,-80),
  ABISELECT(136,80),
  ABISELECT(-184,-96),
  ABISELECT(-208,-108),
  ABISELECT(-224,-116),
  ABISELECT(-672,-404),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3559C1D1Ev,_ZTv0_n32_N7S3559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3559C1D0Ev,_ZTv0_n32_N7S3559C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v34Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v35Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v36Ev,
  ABISELECT(-688,-412),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-808,-484),
  0,
  0,
  ABISELECT(-360,-196),
  ABISELECT(-280,-160),
  ABISELECT(-808,-484),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C1D1Ev,_ZTv0_n28_N7S3559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C1D0Ev,_ZTv0_n28_N7S3559C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
  ABISELECT(-376,-204),
  ABISELECT(-824,-492),
  (VTBL_ENTRY)&(_ZTI7S3559C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3559C1D1Ev,_ZTvn8_n28_N7S3559C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3559C1D0Ev,_ZTvn8_n28_N7S3559C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern VTBL_ENTRY _ZTV7S3559C1[];
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C2D1Ev();
extern void _ZN7S3559C2D0Ev();
extern void _ZN7S3559C33v27Ev();
extern void _ZN7S3559C33v28Ev();
extern void _ZN7S3559C33v29Ev();
extern void _ZN7S3559C23v37Ev();
extern void _ZN7S3559C23v38Ev();
extern void _ZN7S3559C23v39Ev();
extern void _ZN7S3559C23v40Ev();
extern void _ZN7S3559C23v41Ev();
extern void _ZN7S3559C23v42Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C2__7S3559C1[] = {
  ABISELECT(808,484),
  ABISELECT(672,404),
  ABISELECT(528,324),
  ABISELECT(504,316),
  ABISELECT(488,308),
  ABISELECT(464,296),
  ABISELECT(448,288),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  (VTBL_ENTRY)&_ZN7S3559C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v38Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v39Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v40Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v41Ev,
  (VTBL_ENTRY)&_ZN7S3559C23v42Ev,
};
extern void _ZN7S3559C82v6Ev();
extern void _ZN7S3559C3D1Ev();
extern void _ZN7S3559C3D0Ev();
extern void _ZN7S3559C33v27Ev();
extern void _ZN7S3559C33v28Ev();
extern void _ZN7S3559C33v29Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C37S3559C2__7S3559C1[] = {
  ABISELECT(528,324),
  ABISELECT(504,316),
  ABISELECT(488,308),
  ABISELECT(464,296),
  ABISELECT(448,288),
  ABISELECT(288,192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
  (VTBL_ENTRY)&_ZN7S3559C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3559C33v29Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn288_N7S3559C3D1Ev,_ZThn192_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn288_N7S3559C3D0Ev,_ZThn192_N7S3559C3D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C4__7S3559C37S3559C2__7S3559C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C37S3559C2__7S3559C1[] = {
  0,
  0,
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C67S3559C4__7S3559C37S3559C2__7S3559C1[] = {
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C4__A1__7S3559C37S3559C2__7S3559C1[] = {
  ABISELECT(-424,-272),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__7S3559C37S3559C2__7S3559C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-464,-296),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C12__7S3559C37S3559C2__7S3559C1[] = {
  0,
  0,
  ABISELECT(-488,-308),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
};
extern void _ZN8S3559C133v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn504_N7S3559C3D1Ev,_ZThn316_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn504_N7S3559C3D0Ev,_ZThn316_N7S3559C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3559C13__7S3559C37S3559C2__7S3559C1[] = {
  ABISELECT(-504,-316),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-504,-316),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev)();
extern void ABISELECT(_ZThn528_N7S3559C3D1Ev,_ZThn324_N7S3559C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev)();
extern void ABISELECT(_ZThn528_N7S3559C3D0Ev,_ZThn324_N7S3559C3D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__7S3559C37S3559C2__7S3559C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-324),
  ABISELECT(-80,-36),
  ABISELECT(-528,-324),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__A4__7S3559C37S3559C2__7S3559C1[] = {
  ABISELECT(-544,-332),
  (VTBL_ENTRY)&(_ZTI7S3559C3[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3559C2D1Ev,_ZTv0_n20_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn288_N7S3559C2D1Ev,_ZThn192_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3559C2D0Ev,_ZTv0_n20_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn288_N7S3559C2D0Ev,_ZThn192_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C4__7S3559C2__7S3559C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(176,104),
  ABISELECT(160,96),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C2D1Ev,_ZTv0_n20_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3559C2D0Ev,_ZTv0_n20_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C2__7S3559C1[] = {
  0,
  0,
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C67S3559C4__7S3559C2__7S3559C1[] = {
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C4__A1__7S3559C2__7S3559C1[] = {
  ABISELECT(-424,-272),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__7S3559C2__7S3559C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-464,-296),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C12__7S3559C2__7S3559C1[] = {
  0,
  0,
  ABISELECT(-488,-308),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
};
extern void _ZN8S3559C133v26Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn504_N7S3559C2D1Ev,_ZThn316_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn504_N7S3559C2D0Ev,_ZThn316_N7S3559C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3559C13__7S3559C2__7S3559C1[] = {
  ABISELECT(-504,-316),
  0,
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  ABISELECT(-504,-316),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3559C2D1Ev,_ZTv0_n16_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn528_N7S3559C2D1Ev,_ZThn324_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3559C2D0Ev,_ZTv0_n16_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn528_N7S3559C2D0Ev,_ZThn324_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__7S3559C2__7S3559C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-324),
  ABISELECT(-80,-36),
  ABISELECT(-528,-324),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C2D1Ev,_ZTv0_n16_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3559C2D0Ev,_ZTv0_n16_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__A4__7S3559C2__7S3559C1[] = {
  ABISELECT(-544,-332),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void ABISELECT(_ZTv0_n64_N7S3559C2D1Ev,_ZTv0_n32_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn672_N7S3559C2D1Ev,_ZThn404_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3559C2D0Ev,_ZTv0_n32_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn672_N7S3559C2D0Ev,_ZThn404_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN8S3559C153v34Ev();
extern void _ZN8S3559C153v35Ev();
extern void _ZN8S3559C153v36Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C15__7S3559C2__7S3559C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-672,-404),
  ABISELECT(-144,-80),
  ABISELECT(136,80),
  ABISELECT(-184,-96),
  ABISELECT(-208,-108),
  ABISELECT(-224,-116),
  ABISELECT(-672,-404),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3559C2D1Ev,_ZTv0_n32_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3559C2D0Ev,_ZTv0_n32_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v34Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v35Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v36Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C68S3559C15__A5__7S3559C2__7S3559C1[] = {
  ABISELECT(-688,-412),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev)();
extern void ABISELECT(_ZThn808_N7S3559C2D1Ev,_ZThn484_N7S3559C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev)();
extern void ABISELECT(_ZThn808_N7S3559C2D0Ev,_ZThn484_N7S3559C2D0Ev)() __attribute__((weak));
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C16__7S3559C2__7S3559C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-808,-484),
  0,
  0,
  ABISELECT(-360,-196),
  ABISELECT(-280,-160),
  ABISELECT(-808,-484),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
};
extern void ABISELECT(_ZTvn16_n56_N7S3559C2D1Ev,_ZTvn8_n28_N7S3559C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N7S3559C2D0Ev,_ZTvn8_n28_N7S3559C2D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C78S3559C16__A3__7S3559C2__7S3559C1[] = {
  ABISELECT(-376,-204),
  ABISELECT(-824,-492),
  (VTBL_ENTRY)&(_ZTI7S3559C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3559C2D1Ev,_ZTvn8_n28_N7S3559C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N7S3559C2D0Ev,_ZTvn8_n28_N7S3559C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C4D1Ev();
extern void _ZN7S3559C4D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN7S3559C43v14Ev();
extern void _ZN7S3559C43v15Ev();
extern void _ZN7S3559C43v16Ev();
extern void _ZN7S3559C43v17Ev();
extern void _ZN7S3559C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C4__7S3559C1[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v14Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3559C43v18Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C67S3559C4__7S3559C1[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C67S3559C4__7S3559C1[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C67S3559C4__7S3559C1[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C67S3559C4__7S3559C1[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C4__7S3559C1[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__7S3559C4__7S3559C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S3559C4[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C133v26Ev();
extern void _ZN8S3559C13D1Ev();
extern void _ZN8S3559C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C13__7S3559C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(24,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN8S3559C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C13D0Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__8S3559C13__7S3559C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S3559C13D1Ev,_ZThn8_N8S3559C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S3559C13D0Ev,_ZThn8_N8S3559C13D0Ev)() __attribute__((weak));
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C13__7S3559C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-8),
  ABISELECT(-80,-36),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__8S3559C13__7S3559C1[] = {
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__8S3559C13__7S3559C1[] = {
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S3559C13[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__7S3559C1[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C6__A1__7S3559C1[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C6__A1__7S3559C1[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C6__A1__7S3559C1[] = {
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN8S3559C15D1Ev();
extern void _ZN8S3559C15D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
extern void _ZN8S3559C153v34Ev();
extern void _ZN8S3559C153v35Ev();
extern void _ZN8S3559C153v36Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C15__7S3559C1[] = {
  ABISELECT(-144,-80),
  ABISELECT(136,80),
  ABISELECT(-184,-96),
  ABISELECT(-208,-108),
  ABISELECT(-224,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN8S3559C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C15D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v34Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v35Ev,
  (VTBL_ENTRY)&_ZN8S3559C153v36Ev,
};
extern void _ZN7S3559C6D1Ev();
extern void _ZN7S3559C6D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C68S3559C15__A2__7S3559C1[] = {
  ABISELECT(-224,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C77S3559C68S3559C15__A2__7S3559C1[] = {
  ABISELECT(-224,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C77S3559C68S3559C15__A2__7S3559C1[] = {
  0,
  0,
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C68S3559C15__A2__7S3559C1[] = {
  0,
  0,
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI7S3559C6[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__8S3559C15__7S3559C1[] = {
  0,
  0,
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C93v10Ev();
extern void _ZN7S3559C93v11Ev();
extern void _ZN7S3559C93v12Ev();
extern void _ZN7S3559C93v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C9__8S3559C15__7S3559C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(208,108),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C93v10Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v11Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v12Ev,
  (VTBL_ENTRY)&_ZN7S3559C93v13Ev,
};
extern void _ZN8S3559C123v24Ev();
extern void _ZN8S3559C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C12__8S3559C15__7S3559C1[] = {
  0,
  0,
  ABISELECT(184,96),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN8S3559C123v24Ev,
  (VTBL_ENTRY)&_ZN8S3559C123v25Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev)();
extern void ABISELECT(_ZThn136_N8S3559C15D1Ev,_ZThn80_N8S3559C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev)();
extern void ABISELECT(_ZThn136_N8S3559C15D0Ev,_ZThn80_N8S3559C15D0Ev)() __attribute__((weak));
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C16__8S3559C15__7S3559C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  0,
  0,
  ABISELECT(-360,-196),
  ABISELECT(-280,-160),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C15D1Ev,_ZTv0_n16_N8S3559C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S3559C15D0Ev,_ZTv0_n16_N8S3559C15D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__A1__8S3559C15__7S3559C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,80),
  ABISELECT(-80,-36),
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C15D1Ev,_ZTv0_n16_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C15D0Ev,_ZTv0_n16_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__A1__8S3559C15__7S3559C1[] = {
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S3559C15D1Ev,_ZTvn8_n28_N8S3559C15D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S3559C15D0Ev,_ZTvn8_n28_N8S3559C15D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C78S3559C16__A2__8S3559C15__7S3559C1[] = {
  ABISELECT(-376,-204),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S3559C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S3559C15D1Ev,_ZTvn8_n28_N8S3559C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S3559C15D0Ev,_ZTvn8_n28_N8S3559C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
extern void _ZN8S3559C16D1Ev();
extern void _ZN8S3559C16D0Ev();
extern void _ZN8S3559C163v30Ev();
extern void _ZN8S3559C163v31Ev();
extern void _ZN8S3559C163v32Ev();
extern void _ZN8S3559C163v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3559C16__7S3559C1[] = {
  ABISELECT(-360,-196),
  ABISELECT(-280,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3559C16D0Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v30Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v31Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v32Ev,
  (VTBL_ENTRY)&_ZN8S3559C163v33Ev,
};
extern void _ZN7S3559C7D1Ev();
extern void _ZN7S3559C7D0Ev();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C78S3559C16__A3__7S3559C1[] = {
  ABISELECT(-376,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3559C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__7S3559C78S3559C16__A3__7S3559C1[] = {
  0,
  0,
  ABISELECT(376,204),
  (VTBL_ENTRY)&(_ZTI7S3559C7[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
extern void _ZN7S3559C62v7Ev();
extern void _ZN7S3559C62v8Ev();
extern void _ZN7S3559C62v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C6__8S3559C16__7S3559C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(280,160),
  ABISELECT(-80,-36),
  ABISELECT(280,160),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D1Ev,_ZTv0_n16_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3559C16D0Ev,_ZTv0_n16_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v8Ev,
  (VTBL_ENTRY)&_ZN7S3559C62v9Ev,
};
extern void _ZN7S3559C52v2Ev();
extern void _ZN7S3559C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C5__A1__8S3559C16__7S3559C1[] = {
  0,
  0,
  ABISELECT(360,196),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3559C52v3Ev,
};
extern void _ZN7S3559C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C87S3559C6__8S3559C16__7S3559C1[] = {
  ABISELECT(264,152),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&_ZN7S3559C82v6Ev,
};
extern void ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev)();
extern void _ZN7S3559C72v4Ev();
extern void _ZN7S3559C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3559C7__A1__8S3559C16__7S3559C1[] = {
  ABISELECT(-376,-204),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3559C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D1Ev,_ZThn8_N8S3559C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S3559C16D0Ev,_ZThn8_N8S3559C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3559C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3559C72v5Ev,
};
static  VTT_ENTRY vtt_S3559C1[] = {
  {&(_ZTV7S3559C1[10]),  10,201},
  {&(_tg__ZTV7S3559C2__7S3559C1[10]),  10,22},
  {&(_tg__ZTV7S3559C37S3559C2__7S3559C1[8]),  8,14},
  {&(_tg__ZTV7S3559C4__7S3559C37S3559C2__7S3559C1[16]),  16,28},
  {&(_tg__ZTV7S3559C5__7S3559C37S3559C2__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C67S3559C4__7S3559C37S3559C2__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C87S3559C4__A1__7S3559C37S3559C2__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C9__7S3559C37S3559C2__7S3559C1[6]),  6,10},
  {&(_tg__ZTV8S3559C12__7S3559C37S3559C2__7S3559C1[4]),  4,6},
  {&(_tg__ZTV8S3559C13__7S3559C37S3559C2__7S3559C1[7]),  7,10},
  {&(_tg__ZTV7S3559C6__A1__7S3559C37S3559C2__7S3559C1[10]),  10,17},
  {&(_tg__ZTV7S3559C87S3559C6__A4__7S3559C37S3559C2__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C4__7S3559C2__7S3559C1[16]),  16,28},
  {&(_tg__ZTV7S3559C5__7S3559C2__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C67S3559C4__7S3559C2__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C87S3559C4__A1__7S3559C2__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C9__7S3559C2__7S3559C1[6]),  6,10},
  {&(_tg__ZTV8S3559C12__7S3559C2__7S3559C1[4]),  4,6},
  {&(_tg__ZTV8S3559C13__7S3559C2__7S3559C1[7]),  7,10},
  {&(_tg__ZTV7S3559C6__A1__7S3559C2__7S3559C1[10]),  10,17},
  {&(_tg__ZTV7S3559C87S3559C6__A4__7S3559C2__7S3559C1[2]),  2,3},
  {&(_tg__ZTV8S3559C15__7S3559C2__7S3559C1[17]),  17,27},
  {&(_tg__ZTV7S3559C87S3559C68S3559C15__A5__7S3559C2__7S3559C1[2]),  2,3},
  {&(_tg__ZTV8S3559C16__7S3559C2__7S3559C1[13]),  13,21},
  {&(_tg__ZTV7S3559C78S3559C16__A3__7S3559C2__7S3559C1[3]),  3,7},
  {&(_ZTV7S3559C1[73]),  73,201},
  {&(_ZTV7S3559C1[95]),  95,201},
  {&(_ZTV7S3559C1[87]),  87,201},
  {&(_ZTV7S3559C1[90]),  90,201},
  {&(_ZTV7S3559C1[103]),  103,201},
  {&(_ZTV7S3559C1[111]),  111,201},
  {&(_ZTV7S3559C1[120]),  120,201},
  {&(_ZTV7S3559C1[133]),  133,201},
  {&(_ZTV7S3559C1[142]),  142,201},
  {&(_ZTV7S3559C1[160]),  160,201},
  {&(_ZTV7S3559C1[172]),  172,201},
  {&(_ZTV7S3559C1[186]),  186,201},
  {&(_ZTV7S3559C1[197]),  197,201},
  {&(_tg__ZTV7S3559C4__7S3559C1[4]),  4,16},
  {&(_tg__ZTV7S3559C67S3559C4__7S3559C1[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C67S3559C4__7S3559C1[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C67S3559C4__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C67S3559C4__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C4__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C9__7S3559C4__7S3559C1[6]),  6,10},
  {&(_tg__ZTV8S3559C13__7S3559C1[5]),  5,8},
  {&(_tg__ZTV7S3559C9__8S3559C13__7S3559C1[6]),  6,10},
  {&(_tg__ZTV7S3559C6__8S3559C13__7S3559C1[10]),  10,17},
  {&(_tg__ZTV7S3559C5__8S3559C13__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C6__8S3559C13__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C6__A1__7S3559C1[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C6__A1__7S3559C1[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C6__A1__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C6__A1__7S3559C1[4]),  4,6},
  {&(_tg__ZTV8S3559C15__7S3559C1[7]),  7,17},
  {&(_tg__ZTV7S3559C68S3559C15__A2__7S3559C1[3]),  3,10},
  {&(_tg__ZTV7S3559C77S3559C68S3559C15__A2__7S3559C1[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C77S3559C68S3559C15__A2__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C5__7S3559C68S3559C15__A2__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C5__8S3559C15__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C9__8S3559C15__7S3559C1[6]),  6,10},
  {&(_tg__ZTV8S3559C12__8S3559C15__7S3559C1[4]),  4,6},
  {&(_tg__ZTV8S3559C16__8S3559C15__7S3559C1[13]),  13,21},
  {&(_tg__ZTV7S3559C6__A1__8S3559C15__7S3559C1[10]),  10,17},
  {&(_tg__ZTV7S3559C87S3559C6__A1__8S3559C15__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C78S3559C16__A2__8S3559C15__7S3559C1[3]),  3,7},
  {&(_tg__ZTV8S3559C16__7S3559C1[4]),  4,12},
  {&(_tg__ZTV7S3559C78S3559C16__A3__7S3559C1[3]),  3,7},
  {&(_tg__ZTV7S3559C5__7S3559C78S3559C16__A3__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C6__8S3559C16__7S3559C1[10]),  10,17},
  {&(_tg__ZTV7S3559C5__A1__8S3559C16__7S3559C1[4]),  4,6},
  {&(_tg__ZTV7S3559C87S3559C6__8S3559C16__7S3559C1[2]),  2,3},
  {&(_tg__ZTV7S3559C7__A1__8S3559C16__7S3559C1[3]),  3,7},
};
extern VTBL_ENTRY _ZTI7S3559C1[];
extern  VTBL_ENTRY _ZTV7S3559C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3559C1[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3559C15D0Ev,_ZTv0_n28_N8S3559C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3559C15D0Ev,_ZThn80_N8S3559C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3559C15D1Ev,_ZTv0_n28_N8S3559C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S3559C15D1Ev,_ZThn80_N8S3559C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D0Ev,_ZTv0_n16_N8S3559C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3559C13D0Ev,_ZThn8_N8S3559C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3559C13D1Ev,_ZTv0_n16_N8S3559C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3559C13D1Ev,_ZThn8_N8S3559C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3559C2D0Ev,_ZTv0_n32_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S3559C2D0Ev,_ZThn404_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3559C2D1Ev,_ZTv0_n32_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S3559C2D1Ev,_ZThn404_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C2D0Ev,_ZTv0_n16_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3559C2D0Ev,_ZThn324_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C2D1Ev,_ZTv0_n16_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3559C2D1Ev,_ZThn324_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C2D0Ev,_ZTv0_n28_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N7S3559C2D0Ev,_ZThn484_N7S3559C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3559C2D0Ev,_ZThn316_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C2D1Ev,_ZTv0_n28_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N7S3559C2D1Ev,_ZThn484_N7S3559C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3559C2D1Ev,_ZThn316_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C2D0Ev,_ZTv0_n20_N7S3559C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S3559C2D0Ev,_ZThn192_N7S3559C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C2D1Ev,_ZTv0_n20_N7S3559C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S3559C2D1Ev,_ZThn192_N7S3559C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C3D0Ev,_ZTv0_n16_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3559C3D0Ev,_ZThn324_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C3D1Ev,_ZTv0_n16_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3559C3D1Ev,_ZThn324_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C3D0Ev,_ZTv0_n28_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3559C3D0Ev,_ZThn316_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C3D1Ev,_ZTv0_n28_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3559C3D1Ev,_ZThn316_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C3D0Ev,_ZTv0_n20_N7S3559C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S3559C3D0Ev,_ZThn192_N7S3559C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C3D1Ev,_ZTv0_n20_N7S3559C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S3559C3D1Ev,_ZThn192_N7S3559C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3559C1D0Ev,_ZTv0_n32_N7S3559C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S3559C1D0Ev,_ZThn404_N7S3559C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3559C1D1Ev,_ZTv0_n32_N7S3559C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S3559C1D1Ev,_ZThn404_N7S3559C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C1D0Ev,_ZTv0_n16_N7S3559C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3559C1D0Ev,_ZThn324_N7S3559C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3559C1D1Ev,_ZTv0_n16_N7S3559C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn528_N7S3559C1D1Ev,_ZThn324_N7S3559C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C1D0Ev,_ZTv0_n28_N7S3559C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N7S3559C1D0Ev,_ZThn484_N7S3559C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3559C1D0Ev,_ZThn316_N7S3559C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3559C1D1Ev,_ZTv0_n28_N7S3559C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn808_N7S3559C1D1Ev,_ZThn484_N7S3559C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N7S3559C1D1Ev,_ZThn316_N7S3559C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C1D0Ev,_ZTv0_n20_N7S3559C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S3559C1D0Ev,_ZThn192_N7S3559C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3559C1D1Ev,_ZTv0_n20_N7S3559C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S3559C1D1Ev,_ZThn192_N7S3559C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3559C1 = {  "S3559C1", // class name
  bases_S3559C1, 32,
  &(vtc_S3559C1[0]), // expected_vtbl_contents
  &(vtt_S3559C1[0]), // expected_vtt_contents
  ABISELECT(848,508), // object size
  NSPAIRA(_ZTI7S3559C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3559C1),201, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3559C1),73, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2026C4  {
  virtual  ~S2026C4(); // _ZN7S2026C4D1Ev
  virtual void  v13(); // _ZN7S2026C43v13Ev
  virtual void  v14(); // _ZN7S2026C43v14Ev
  virtual void  v15(); // _ZN7S2026C43v15Ev
  S2026C4(); // tgen
};
//SIG(-1 S2026C4) C1{ vd v1 v2 v3}


 S2026C4 ::~S2026C4(){ note_dtor("S2026C4", this);}
void  S2026C4 ::v13(){vfunc_called(this, "_ZN7S2026C43v13Ev");}
void  S2026C4 ::v14(){vfunc_called(this, "_ZN7S2026C43v14Ev");}
void  S2026C4 ::v15(){vfunc_called(this, "_ZN7S2026C43v15Ev");}
S2026C4 ::S2026C4(){ note_ctor("S2026C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2026C4C1Ev();
extern void _ZN7S2026C4D1Ev();
Name_Map name_map_S2026C4[] = {
  NSPAIR(_ZN7S2026C4C1Ev),
  NSPAIR(_ZN7S2026C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2026C4[];
extern void _ZN7S2026C4D1Ev();
extern void _ZN7S2026C4D0Ev();
extern void _ZN7S2026C43v13Ev();
extern void _ZN7S2026C43v14Ev();
extern void _ZN7S2026C43v15Ev();
static  VTBL_ENTRY vtc_S2026C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2026C4[0]),
  (VTBL_ENTRY)&_ZN7S2026C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2026C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S2026C4[];
extern  VTBL_ENTRY _ZTV7S2026C4[];
Class_Descriptor cd_S2026C4 = {  "S2026C4", // class name
  0,0,//no base classes
  &(vtc_S2026C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2026C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2026C4),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  S2026C3  : S2026C4 {
  virtual  ~S2026C3(); // _ZN7S2026C3D1Ev
  virtual void  v16(); // _ZN7S2026C33v16Ev
  virtual void  v17(); // _ZN7S2026C33v17Ev
  virtual void  v18(); // _ZN7S2026C33v18Ev
  S2026C3(); // tgen
};
//SIG(-1 S2026C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2026C3 ::~S2026C3(){ note_dtor("S2026C3", this);}
void  S2026C3 ::v16(){vfunc_called(this, "_ZN7S2026C33v16Ev");}
void  S2026C3 ::v17(){vfunc_called(this, "_ZN7S2026C33v17Ev");}
void  S2026C3 ::v18(){vfunc_called(this, "_ZN7S2026C33v18Ev");}
S2026C3 ::S2026C3(){ note_ctor("S2026C3", this);} // tgen

static void Test_S2026C3()
{
  extern Class_Descriptor cd_S2026C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2026C3, buf);
    S2026C3 *dp, &lv = *(dp=new (buf) S2026C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2026C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2026C3)");
    check_base_class_offset(lv, (S2026C4*), 0, "S2026C3");
    test_class_info(&lv, &cd_S2026C3);
    dp->~S2026C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2026C3(Test_S2026C3, "S2026C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2026C3C1Ev();
extern void _ZN7S2026C3D1Ev();
Name_Map name_map_S2026C3[] = {
  NSPAIR(_ZN7S2026C3C1Ev),
  NSPAIR(_ZN7S2026C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2026C4;
extern VTBL_ENTRY _ZTI7S2026C4[];
extern  VTBL_ENTRY _ZTV7S2026C4[];
static Base_Class bases_S2026C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2026C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2026C3[];
extern void _ZN7S2026C3D1Ev();
extern void _ZN7S2026C3D0Ev();
extern void _ZN7S2026C43v13Ev();
extern void _ZN7S2026C43v14Ev();
extern void _ZN7S2026C43v15Ev();
extern void _ZN7S2026C33v16Ev();
extern void _ZN7S2026C33v17Ev();
extern void _ZN7S2026C33v18Ev();
static  VTBL_ENTRY vtc_S2026C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2026C3[0]),
  (VTBL_ENTRY)&_ZN7S2026C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2026C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S2026C3[];
extern  VTBL_ENTRY _ZTV7S2026C3[];
Class_Descriptor cd_S2026C3 = {  "S2026C3", // class name
  bases_S2026C3, 1,
  &(vtc_S2026C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2026C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2026C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S2026C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2026C7_nt  {
  ::S2026C8_nt s2026c7f0;
  void  mf2026c7(); // _ZN10S2026C7_nt8mf2026c7Ev
};
//SIG(-1 S2026C7_nt) C1{ m FC2{ FL[4]}}


void  S2026C7_nt ::mf2026c7(){}

//skip512 S2026C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2026C2_nt  : S2026C3 {
  ::S7368C77 s2026c2f0;
  ::S2026C7_nt s2026c2f1;
  char s2026c2f2;
  virtual  ~S2026C2_nt(); // _ZN10S2026C2_ntD1Ev
  virtual void  v19(); // _ZN10S2026C2_nt3v19Ev
  virtual void  v20(); // _ZN10S2026C2_nt3v20Ev
  virtual void  v21(); // _ZN10S2026C2_nt3v21Ev
  S2026C2_nt(); // tgen
};
//SIG(-1 S2026C2_nt) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S2026C2_nt ::~S2026C2_nt(){ note_dtor("S2026C2_nt", this);}
void  S2026C2_nt ::v19(){vfunc_called(this, "_ZN10S2026C2_nt3v19Ev");}
void  S2026C2_nt ::v20(){vfunc_called(this, "_ZN10S2026C2_nt3v20Ev");}
void  S2026C2_nt ::v21(){vfunc_called(this, "_ZN10S2026C2_nt3v21Ev");}
S2026C2_nt ::S2026C2_nt(){ note_ctor("S2026C2_nt", this);} // tgen

//skip512 S2026C2_nt

#else // __cplusplus

extern void _ZN10S2026C2_ntC1Ev();
extern void _ZN10S2026C2_ntD1Ev();
Name_Map name_map_S2026C2_nt[] = {
  NSPAIR(_ZN10S2026C2_ntC1Ev),
  NSPAIR(_ZN10S2026C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2026C4;
extern VTBL_ENTRY _ZTI7S2026C4[];
extern  VTBL_ENTRY _ZTV7S2026C4[];
extern Class_Descriptor cd_S2026C3;
extern VTBL_ENTRY _ZTI7S2026C3[];
extern  VTBL_ENTRY _ZTV7S2026C3[];
static Base_Class bases_S2026C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2026C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2026C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2026C2_nt[];
extern void _ZN10S2026C2_ntD1Ev();
extern void _ZN10S2026C2_ntD0Ev();
extern void _ZN7S2026C43v13Ev();
extern void _ZN7S2026C43v14Ev();
extern void _ZN7S2026C43v15Ev();
extern void _ZN7S2026C33v16Ev();
extern void _ZN7S2026C33v17Ev();
extern void _ZN7S2026C33v18Ev();
extern void _ZN10S2026C2_nt3v19Ev();
extern void _ZN10S2026C2_nt3v20Ev();
extern void _ZN10S2026C2_nt3v21Ev();
static  VTBL_ENTRY vtc_S2026C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2026C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2026C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2026C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v18Ev,
  (VTBL_ENTRY)&_ZN10S2026C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2026C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2026C2_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI10S2026C2_nt[];
VTBL_ENTRY *P__ZTI10S2026C2_nt = _ZTI10S2026C2_nt; 
extern  VTBL_ENTRY _ZTV10S2026C2_nt[];
Class_Descriptor cd_S2026C2_nt = {  "S2026C2_nt", // class name
  bases_S2026C2_nt, 2,
  &(vtc_S2026C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S2026C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2026C2_nt),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  S2026C10  {
  void *s2026c10f0[2];
  virtual  ~S2026C10(); // _ZN8S2026C10D1Ev
  virtual void  v22(); // _ZN8S2026C103v22Ev
  virtual void  v23(); // _ZN8S2026C103v23Ev
  virtual void  v24(); // _ZN8S2026C103v24Ev
  virtual void  v25(); // _ZN8S2026C103v25Ev
  virtual void  v26(); // _ZN8S2026C103v26Ev
  virtual void  v27(); // _ZN8S2026C103v27Ev
  virtual void  v28(); // _ZN8S2026C103v28Ev
  virtual void  v29(); // _ZN8S2026C103v29Ev
  virtual void  v30(); // _ZN8S2026C103v30Ev
  virtual void  v31(); // _ZN8S2026C103v31Ev
  virtual void  v32(); // _ZN8S2026C103v32Ev
  virtual void  v33(); // _ZN8S2026C103v33Ev
  virtual void  v34(); // _ZN8S2026C103v34Ev
  virtual void  v35(); // _ZN8S2026C103v35Ev
  S2026C10(); // tgen
};
//SIG(-1 S2026C10) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2026C10 ::~S2026C10(){ note_dtor("S2026C10", this);}
void  S2026C10 ::v22(){vfunc_called(this, "_ZN8S2026C103v22Ev");}
void  S2026C10 ::v23(){vfunc_called(this, "_ZN8S2026C103v23Ev");}
void  S2026C10 ::v24(){vfunc_called(this, "_ZN8S2026C103v24Ev");}
void  S2026C10 ::v25(){vfunc_called(this, "_ZN8S2026C103v25Ev");}
void  S2026C10 ::v26(){vfunc_called(this, "_ZN8S2026C103v26Ev");}
void  S2026C10 ::v27(){vfunc_called(this, "_ZN8S2026C103v27Ev");}
void  S2026C10 ::v28(){vfunc_called(this, "_ZN8S2026C103v28Ev");}
void  S2026C10 ::v29(){vfunc_called(this, "_ZN8S2026C103v29Ev");}
void  S2026C10 ::v30(){vfunc_called(this, "_ZN8S2026C103v30Ev");}
void  S2026C10 ::v31(){vfunc_called(this, "_ZN8S2026C103v31Ev");}
void  S2026C10 ::v32(){vfunc_called(this, "_ZN8S2026C103v32Ev");}
void  S2026C10 ::v33(){vfunc_called(this, "_ZN8S2026C103v33Ev");}
void  S2026C10 ::v34(){vfunc_called(this, "_ZN8S2026C103v34Ev");}
void  S2026C10 ::v35(){vfunc_called(this, "_ZN8S2026C103v35Ev");}
S2026C10 ::S2026C10(){ note_ctor("S2026C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2026C10C1Ev();
extern void _ZN8S2026C10D1Ev();
Name_Map name_map_S2026C10[] = {
  NSPAIR(_ZN8S2026C10C1Ev),
  NSPAIR(_ZN8S2026C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2026C10[];
extern void _ZN8S2026C10D1Ev();
extern void _ZN8S2026C10D0Ev();
extern void _ZN8S2026C103v22Ev();
extern void _ZN8S2026C103v23Ev();
extern void _ZN8S2026C103v24Ev();
extern void _ZN8S2026C103v25Ev();
extern void _ZN8S2026C103v26Ev();
extern void _ZN8S2026C103v27Ev();
extern void _ZN8S2026C103v28Ev();
extern void _ZN8S2026C103v29Ev();
extern void _ZN8S2026C103v30Ev();
extern void _ZN8S2026C103v31Ev();
extern void _ZN8S2026C103v32Ev();
extern void _ZN8S2026C103v33Ev();
extern void _ZN8S2026C103v34Ev();
extern void _ZN8S2026C103v35Ev();
static  VTBL_ENTRY vtc_S2026C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2026C10[0]),
  (VTBL_ENTRY)&_ZN8S2026C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2026C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v35Ev,
};
extern VTBL_ENTRY _ZTI8S2026C10[];
extern  VTBL_ENTRY _ZTV8S2026C10[];
Class_Descriptor cd_S2026C10 = {  "S2026C10", // class name
  0,0,//no base classes
  &(vtc_S2026C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S2026C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2026C10),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2026C9  : S2026C10 {
  ::S7368C58 s2026c9f0;
  virtual  ~S2026C9(); // _ZN7S2026C9D1Ev
  virtual void  v36(); // _ZN7S2026C93v36Ev
  virtual void  v37(); // _ZN7S2026C93v37Ev
  virtual void  v38(); // _ZN7S2026C93v38Ev
  virtual void  v39(); // _ZN7S2026C93v39Ev
  virtual void  v40(); // _ZN7S2026C93v40Ev
  virtual void  v41(); // _ZN7S2026C93v41Ev
  virtual void  v42(); // _ZN7S2026C93v42Ev
  S2026C9(); // tgen
};
//SIG(-1 S2026C9) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2026C9 ::~S2026C9(){ note_dtor("S2026C9", this);}
void  S2026C9 ::v36(){vfunc_called(this, "_ZN7S2026C93v36Ev");}
void  S2026C9 ::v37(){vfunc_called(this, "_ZN7S2026C93v37Ev");}
void  S2026C9 ::v38(){vfunc_called(this, "_ZN7S2026C93v38Ev");}
void  S2026C9 ::v39(){vfunc_called(this, "_ZN7S2026C93v39Ev");}
void  S2026C9 ::v40(){vfunc_called(this, "_ZN7S2026C93v40Ev");}
void  S2026C9 ::v41(){vfunc_called(this, "_ZN7S2026C93v41Ev");}
void  S2026C9 ::v42(){vfunc_called(this, "_ZN7S2026C93v42Ev");}
S2026C9 ::S2026C9(){ note_ctor("S2026C9", this);} // tgen

static void Test_S2026C9()
{
  extern Class_Descriptor cd_S2026C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2026C9, buf);
    S2026C9 *dp, &lv = *(dp=new (buf) S2026C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2026C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2026C9)");
    check_base_class_offset(lv, (S2026C10*), 0, "S2026C9");
    check_field_offset(lv, s2026c9f0, ABISELECT(24,12), "S2026C9.s2026c9f0");
    test_class_info(&lv, &cd_S2026C9);
    dp->~S2026C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2026C9(Test_S2026C9, "S2026C9", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2026C9C1Ev();
extern void _ZN7S2026C9D1Ev();
Name_Map name_map_S2026C9[] = {
  NSPAIR(_ZN7S2026C9C1Ev),
  NSPAIR(_ZN7S2026C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2026C10;
extern VTBL_ENTRY _ZTI8S2026C10[];
extern  VTBL_ENTRY _ZTV8S2026C10[];
static Base_Class bases_S2026C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2026C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2026C9[];
extern void _ZN7S2026C9D1Ev();
extern void _ZN7S2026C9D0Ev();
extern void _ZN8S2026C103v22Ev();
extern void _ZN8S2026C103v23Ev();
extern void _ZN8S2026C103v24Ev();
extern void _ZN8S2026C103v25Ev();
extern void _ZN8S2026C103v26Ev();
extern void _ZN8S2026C103v27Ev();
extern void _ZN8S2026C103v28Ev();
extern void _ZN8S2026C103v29Ev();
extern void _ZN8S2026C103v30Ev();
extern void _ZN8S2026C103v31Ev();
extern void _ZN8S2026C103v32Ev();
extern void _ZN8S2026C103v33Ev();
extern void _ZN8S2026C103v34Ev();
extern void _ZN8S2026C103v35Ev();
extern void _ZN7S2026C93v36Ev();
extern void _ZN7S2026C93v37Ev();
extern void _ZN7S2026C93v38Ev();
extern void _ZN7S2026C93v39Ev();
extern void _ZN7S2026C93v40Ev();
extern void _ZN7S2026C93v41Ev();
extern void _ZN7S2026C93v42Ev();
static  VTBL_ENTRY vtc_S2026C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2026C9[0]),
  (VTBL_ENTRY)&_ZN7S2026C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2026C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v35Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v36Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v42Ev,
};
extern VTBL_ENTRY _ZTI7S2026C9[];
extern  VTBL_ENTRY _ZTV7S2026C9[];
Class_Descriptor cd_S2026C9 = {  "S2026C9", // class name
  bases_S2026C9, 1,
  &(vtc_S2026C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2026C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2026C9),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2026C13  : S2011C14_nt {
  int s2026c13f0[2];
  ::S2011C28_nt s2026c13f1;
  ~S2026C13(); // tgen
  S2026C13(); // tgen
};
//SIG(-1 S2026C13) C1{ BC2{ vd} Fi[2] FC3{ Fi FC4{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}}


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

static void Test_S2026C13()
{
  extern Class_Descriptor cd_S2026C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,39)];
    init_test(&cd_S2026C13, buf);
    S2026C13 *dp, &lv = *(dp=new (buf) S2026C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,152), "sizeof(S2026C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2026C13)");
    check_base_class_offset(lv, (S2011C14_nt*), 0, "S2026C13");
    check_field_offset(lv, s2026c13f0, ABISELECT(8,4), "S2026C13.s2026c13f0");
    check_field_offset(lv, s2026c13f1, ABISELECT(16,12), "S2026C13.s2026c13f1");
    test_class_info(&lv, &cd_S2026C13);
    dp->~S2026C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2026C13(Test_S2026C13, "S2026C13", ABISELECT(200,152));

#else // __cplusplus

extern void _ZN8S2026C13C1Ev();
extern void _ZN8S2026C13D1Ev();
Name_Map name_map_S2026C13[] = {
  NSPAIR(_ZN8S2026C13C1Ev),
  NSPAIR(_ZN8S2026C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
static Base_Class bases_S2026C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2026C13[];
extern void _ZN8S2026C13D1Ev();
extern void _ZN8S2026C13D0Ev();
static  VTBL_ENTRY vtc_S2026C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2026C13[0]),
  (VTBL_ENTRY)&_ZN8S2026C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2026C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S2026C13[];
extern  VTBL_ENTRY _ZTV8S2026C13[];
Class_Descriptor cd_S2026C13 = {  "S2026C13", // class name
  bases_S2026C13, 1,
  &(vtc_S2026C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,152), // object size
  NSPAIRA(_ZTI8S2026C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2026C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2026C1  : S2026C2_nt , S2026C9 {
  ::S2026C13 s2026c1f0;
  void *s2026c1f1;
  int s2026c1f2[2];
  ::S2011C25_nt s2026c1f3;
  char s2026c1f4;
  void *s2026c1f5;
  virtual  ~S2026C1(); // _ZN7S2026C1D1Ev
  virtual void  v1(); // _ZN7S2026C12v1Ev
  virtual void  v2(); // _ZN7S2026C12v2Ev
  virtual void  v3(); // _ZN7S2026C12v3Ev
  virtual void  v4(); // _ZN7S2026C12v4Ev
  virtual void  v5(); // _ZN7S2026C12v5Ev
  virtual void  v6(); // _ZN7S2026C12v6Ev
  virtual void  v7(); // _ZN7S2026C12v7Ev
  virtual void  v8(); // _ZN7S2026C12v8Ev
  virtual void  v9(); // _ZN7S2026C12v9Ev
  virtual void  v10(); // _ZN7S2026C13v10Ev
  virtual void  v11(); // _ZN7S2026C13v11Ev
  virtual void  v12(); // _ZN7S2026C13v12Ev
  S2026C1(); // tgen
};
//SIG(1 S2026C1) C1{ BC2{ BC3{ BC4{ vd v13 v14 v15} vd v16 v17 v18} vd v19 v20 v21 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc} BC9{ BC10{ vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 Fp[2]} vd v36 v37 v38 v39 v40 v41 v42 FC11{ m Fp Fi[2] FC12{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC13{ BC14{ vd} Fi[2] FC15{ Fi FC16{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}} Fp Fi[2] FC17{ m Fs[6] Fi[2] Fc Fs} Fc Fp}


 S2026C1 ::~S2026C1(){ note_dtor("S2026C1", this);}
void  S2026C1 ::v1(){vfunc_called(this, "_ZN7S2026C12v1Ev");}
void  S2026C1 ::v2(){vfunc_called(this, "_ZN7S2026C12v2Ev");}
void  S2026C1 ::v3(){vfunc_called(this, "_ZN7S2026C12v3Ev");}
void  S2026C1 ::v4(){vfunc_called(this, "_ZN7S2026C12v4Ev");}
void  S2026C1 ::v5(){vfunc_called(this, "_ZN7S2026C12v5Ev");}
void  S2026C1 ::v6(){vfunc_called(this, "_ZN7S2026C12v6Ev");}
void  S2026C1 ::v7(){vfunc_called(this, "_ZN7S2026C12v7Ev");}
void  S2026C1 ::v8(){vfunc_called(this, "_ZN7S2026C12v8Ev");}
void  S2026C1 ::v9(){vfunc_called(this, "_ZN7S2026C12v9Ev");}
void  S2026C1 ::v10(){vfunc_called(this, "_ZN7S2026C13v10Ev");}
void  S2026C1 ::v11(){vfunc_called(this, "_ZN7S2026C13v11Ev");}
void  S2026C1 ::v12(){vfunc_called(this, "_ZN7S2026C13v12Ev");}
S2026C1 ::S2026C1(){ note_ctor("S2026C1", this);} // tgen

static void Test_S2026C1()
{
  extern Class_Descriptor cd_S2026C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,71)];
    init_test(&cd_S2026C1, buf);
    S2026C1 *dp, &lv = *(dp=new (buf) S2026C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,280), "sizeof(S2026C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2026C1)");
    check_base_class_offset(lv, (S2026C4*)(S2026C3*)(S2026C2_nt*), 0, "S2026C1");
    check_base_class_offset(lv, (S2026C3*)(S2026C2_nt*), 0, "S2026C1");
    check_base_class_offset(lv, (S2026C2_nt*), 0, "S2026C1");
    check_base_class_offset(lv, (S2026C10*)(S2026C9*), ABISELECT(72,56), "S2026C1");
    check_base_class_offset(lv, (S2026C9*), ABISELECT(72,56), "S2026C1");
    check_field_offset(lv, s2026c1f0, ABISELECT(120,84), "S2026C1.s2026c1f0");
    check_field_offset(lv, s2026c1f1, ABISELECT(320,236), "S2026C1.s2026c1f1");
    check_field_offset(lv, s2026c1f2, ABISELECT(328,240), "S2026C1.s2026c1f2");
    check_field_offset(lv, s2026c1f3, ABISELECT(336,248), "S2026C1.s2026c1f3");
    check_field_offset(lv, s2026c1f4, ABISELECT(360,272), "S2026C1.s2026c1f4");
    check_field_offset(lv, s2026c1f5, ABISELECT(368,276), "S2026C1.s2026c1f5");
    test_class_info(&lv, &cd_S2026C1);
    dp->~S2026C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2026C1(Test_S2026C1, "S2026C1", ABISELECT(376,280));

#else // __cplusplus

extern void _ZN7S2026C1C1Ev();
extern void _ZN7S2026C1D1Ev();
Name_Map name_map_S2026C1[] = {
  NSPAIR(_ZN7S2026C1C1Ev),
  NSPAIR(_ZN7S2026C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2026C4;
extern VTBL_ENTRY _ZTI7S2026C4[];
extern  VTBL_ENTRY _ZTV7S2026C4[];
extern Class_Descriptor cd_S2026C3;
extern VTBL_ENTRY _ZTI7S2026C3[];
extern  VTBL_ENTRY _ZTV7S2026C3[];
extern Class_Descriptor cd_S2026C2_nt;
extern VTBL_ENTRY _ZTI10S2026C2_nt[];
extern  VTBL_ENTRY _ZTV10S2026C2_nt[];
extern Class_Descriptor cd_S2026C10;
extern VTBL_ENTRY _ZTI8S2026C10[];
extern  VTBL_ENTRY _ZTV8S2026C10[];
extern Class_Descriptor cd_S2026C9;
extern VTBL_ENTRY _ZTI7S2026C9[];
extern  VTBL_ENTRY _ZTV7S2026C9[];
static Base_Class bases_S2026C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2026C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2026C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2026C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2026C10,    ABISELECT(72,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2026C9,    ABISELECT(72,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2026C1[];
extern void _ZN7S2026C1D1Ev();
extern void _ZN7S2026C1D0Ev();
extern void _ZN7S2026C43v13Ev();
extern void _ZN7S2026C43v14Ev();
extern void _ZN7S2026C43v15Ev();
extern void _ZN7S2026C33v16Ev();
extern void _ZN7S2026C33v17Ev();
extern void _ZN7S2026C33v18Ev();
extern void _ZN10S2026C2_nt3v19Ev();
extern void _ZN10S2026C2_nt3v20Ev();
extern void _ZN10S2026C2_nt3v21Ev();
extern void _ZN7S2026C12v1Ev();
extern void _ZN7S2026C12v2Ev();
extern void _ZN7S2026C12v3Ev();
extern void _ZN7S2026C12v4Ev();
extern void _ZN7S2026C12v5Ev();
extern void _ZN7S2026C12v6Ev();
extern void _ZN7S2026C12v7Ev();
extern void _ZN7S2026C12v8Ev();
extern void _ZN7S2026C12v9Ev();
extern void _ZN7S2026C13v10Ev();
extern void _ZN7S2026C13v11Ev();
extern void _ZN7S2026C13v12Ev();
extern void ABISELECT(_ZThn72_N7S2026C1D1Ev,_ZThn56_N7S2026C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2026C1D0Ev,_ZThn56_N7S2026C1D0Ev)();
extern void _ZN8S2026C103v22Ev();
extern void _ZN8S2026C103v23Ev();
extern void _ZN8S2026C103v24Ev();
extern void _ZN8S2026C103v25Ev();
extern void _ZN8S2026C103v26Ev();
extern void _ZN8S2026C103v27Ev();
extern void _ZN8S2026C103v28Ev();
extern void _ZN8S2026C103v29Ev();
extern void _ZN8S2026C103v30Ev();
extern void _ZN8S2026C103v31Ev();
extern void _ZN8S2026C103v32Ev();
extern void _ZN8S2026C103v33Ev();
extern void _ZN8S2026C103v34Ev();
extern void _ZN8S2026C103v35Ev();
extern void _ZN7S2026C93v36Ev();
extern void _ZN7S2026C93v37Ev();
extern void _ZN7S2026C93v38Ev();
extern void _ZN7S2026C93v39Ev();
extern void _ZN7S2026C93v40Ev();
extern void _ZN7S2026C93v41Ev();
extern void _ZN7S2026C93v42Ev();
static  VTBL_ENTRY vtc_S2026C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2026C1[0]),
  (VTBL_ENTRY)&_ZN7S2026C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2026C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2026C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2026C33v18Ev,
  (VTBL_ENTRY)&_ZN10S2026C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2026C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2026C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2026C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2026C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2026C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2026C13v12Ev,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S2026C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2026C1D1Ev,_ZThn56_N7S2026C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2026C1D0Ev,_ZThn56_N7S2026C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2026C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2026C103v35Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v36Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2026C93v42Ev,
};
extern VTBL_ENTRY _ZTI7S2026C1[];
extern  VTBL_ENTRY _ZTV7S2026C1[];
Class_Descriptor cd_S2026C1 = {  "S2026C1", // class name
  bases_S2026C1, 5,
  &(vtc_S2026C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,280), // object size
  NSPAIRA(_ZTI7S2026C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2026C1),50, //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  S2025C4  {
  virtual  ~S2025C4(); // _ZN7S2025C4D1Ev
  virtual void  v13(); // _ZN7S2025C43v13Ev
  virtual void  v14(); // _ZN7S2025C43v14Ev
  virtual void  v15(); // _ZN7S2025C43v15Ev
  S2025C4(); // tgen
};
//SIG(-1 S2025C4) C1{ vd v1 v2 v3}


 S2025C4 ::~S2025C4(){ note_dtor("S2025C4", this);}
void  S2025C4 ::v13(){vfunc_called(this, "_ZN7S2025C43v13Ev");}
void  S2025C4 ::v14(){vfunc_called(this, "_ZN7S2025C43v14Ev");}
void  S2025C4 ::v15(){vfunc_called(this, "_ZN7S2025C43v15Ev");}
S2025C4 ::S2025C4(){ note_ctor("S2025C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2025C4C1Ev();
extern void _ZN7S2025C4D1Ev();
Name_Map name_map_S2025C4[] = {
  NSPAIR(_ZN7S2025C4C1Ev),
  NSPAIR(_ZN7S2025C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2025C4[];
extern void _ZN7S2025C4D1Ev();
extern void _ZN7S2025C4D0Ev();
extern void _ZN7S2025C43v13Ev();
extern void _ZN7S2025C43v14Ev();
extern void _ZN7S2025C43v15Ev();
static  VTBL_ENTRY vtc_S2025C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2025C4[0]),
  (VTBL_ENTRY)&_ZN7S2025C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2025C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S2025C4[];
extern  VTBL_ENTRY _ZTV7S2025C4[];
Class_Descriptor cd_S2025C4 = {  "S2025C4", // class name
  0,0,//no base classes
  &(vtc_S2025C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2025C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2025C4),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  S2025C3  : S2025C4 {
  virtual  ~S2025C3(); // _ZN7S2025C3D1Ev
  virtual void  v16(); // _ZN7S2025C33v16Ev
  virtual void  v17(); // _ZN7S2025C33v17Ev
  virtual void  v18(); // _ZN7S2025C33v18Ev
  S2025C3(); // tgen
};
//SIG(-1 S2025C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2025C3 ::~S2025C3(){ note_dtor("S2025C3", this);}
void  S2025C3 ::v16(){vfunc_called(this, "_ZN7S2025C33v16Ev");}
void  S2025C3 ::v17(){vfunc_called(this, "_ZN7S2025C33v17Ev");}
void  S2025C3 ::v18(){vfunc_called(this, "_ZN7S2025C33v18Ev");}
S2025C3 ::S2025C3(){ note_ctor("S2025C3", this);} // tgen

static void Test_S2025C3()
{
  extern Class_Descriptor cd_S2025C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2025C3, buf);
    S2025C3 *dp, &lv = *(dp=new (buf) S2025C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2025C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2025C3)");
    check_base_class_offset(lv, (S2025C4*), 0, "S2025C3");
    test_class_info(&lv, &cd_S2025C3);
    dp->~S2025C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2025C3(Test_S2025C3, "S2025C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2025C3C1Ev();
extern void _ZN7S2025C3D1Ev();
Name_Map name_map_S2025C3[] = {
  NSPAIR(_ZN7S2025C3C1Ev),
  NSPAIR(_ZN7S2025C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2025C4;
extern VTBL_ENTRY _ZTI7S2025C4[];
extern  VTBL_ENTRY _ZTV7S2025C4[];
static Base_Class bases_S2025C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2025C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2025C3[];
extern void _ZN7S2025C3D1Ev();
extern void _ZN7S2025C3D0Ev();
extern void _ZN7S2025C43v13Ev();
extern void _ZN7S2025C43v14Ev();
extern void _ZN7S2025C43v15Ev();
extern void _ZN7S2025C33v16Ev();
extern void _ZN7S2025C33v17Ev();
extern void _ZN7S2025C33v18Ev();
static  VTBL_ENTRY vtc_S2025C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2025C3[0]),
  (VTBL_ENTRY)&_ZN7S2025C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2025C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S2025C3[];
extern  VTBL_ENTRY _ZTV7S2025C3[];
Class_Descriptor cd_S2025C3 = {  "S2025C3", // class name
  bases_S2025C3, 1,
  &(vtc_S2025C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2025C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2025C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2025C2  : S2025C3 {
  ::S7368C77 s2025c2f0;
  ::S10256C6_nt s2025c2f1;
  char s2025c2f2;
  virtual  ~S2025C2(); // _ZN7S2025C2D1Ev
  virtual void  v19(); // _ZN7S2025C23v19Ev
  virtual void  v20(); // _ZN7S2025C23v20Ev
  virtual void  v21(); // _ZN7S2025C23v21Ev
  S2025C2(); // tgen
};
//SIG(-1 S2025C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc}


 S2025C2 ::~S2025C2(){ note_dtor("S2025C2", this);}
void  S2025C2 ::v19(){vfunc_called(this, "_ZN7S2025C23v19Ev");}
void  S2025C2 ::v20(){vfunc_called(this, "_ZN7S2025C23v20Ev");}
void  S2025C2 ::v21(){vfunc_called(this, "_ZN7S2025C23v21Ev");}
S2025C2 ::S2025C2(){ note_ctor("S2025C2", this);} // tgen

static void Test_S2025C2()
{
  extern Class_Descriptor cd_S2025C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S2025C2, buf);
    S2025C2 *dp, &lv = *(dp=new (buf) S2025C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S2025C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2025C2)");
    check_base_class_offset(lv, (S2025C4*)(S2025C3*), 0, "S2025C2");
    check_base_class_offset(lv, (S2025C3*), 0, "S2025C2");
    check_field_offset(lv, s2025c2f0, ABISELECT(8,4), "S2025C2.s2025c2f0");
    check_field_offset(lv, s2025c2f1, ABISELECT(32,20), "S2025C2.s2025c2f1");
    check_field_offset(lv, s2025c2f2, ABISELECT(64,36), "S2025C2.s2025c2f2");
    test_class_info(&lv, &cd_S2025C2);
    dp->~S2025C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2025C2(Test_S2025C2, "S2025C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S2025C2C1Ev();
extern void _ZN7S2025C2D1Ev();
Name_Map name_map_S2025C2[] = {
  NSPAIR(_ZN7S2025C2C1Ev),
  NSPAIR(_ZN7S2025C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2025C4;
extern VTBL_ENTRY _ZTI7S2025C4[];
extern  VTBL_ENTRY _ZTV7S2025C4[];
extern Class_Descriptor cd_S2025C3;
extern VTBL_ENTRY _ZTI7S2025C3[];
extern  VTBL_ENTRY _ZTV7S2025C3[];
static Base_Class bases_S2025C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2025C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2025C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2025C2[];
extern void _ZN7S2025C2D1Ev();
extern void _ZN7S2025C2D0Ev();
extern void _ZN7S2025C43v13Ev();
extern void _ZN7S2025C43v14Ev();
extern void _ZN7S2025C43v15Ev();
extern void _ZN7S2025C33v16Ev();
extern void _ZN7S2025C33v17Ev();
extern void _ZN7S2025C33v18Ev();
extern void _ZN7S2025C23v19Ev();
extern void _ZN7S2025C23v20Ev();
extern void _ZN7S2025C23v21Ev();
static  VTBL_ENTRY vtc_S2025C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2025C2[0]),
  (VTBL_ENTRY)&_ZN7S2025C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2025C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2025C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2025C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2025C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S2025C2[];
extern  VTBL_ENTRY _ZTV7S2025C2[];
Class_Descriptor cd_S2025C2 = {  "S2025C2", // class name
  bases_S2025C2, 2,
  &(vtc_S2025C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S2025C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2025C2),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  S2025C10  {
  void *s2025c10f0[2];
  virtual  ~S2025C10(); // _ZN8S2025C10D1Ev
  virtual void  v22(); // _ZN8S2025C103v22Ev
  virtual void  v23(); // _ZN8S2025C103v23Ev
  virtual void  v24(); // _ZN8S2025C103v24Ev
  virtual void  v25(); // _ZN8S2025C103v25Ev
  virtual void  v26(); // _ZN8S2025C103v26Ev
  virtual void  v27(); // _ZN8S2025C103v27Ev
  virtual void  v28(); // _ZN8S2025C103v28Ev
  virtual void  v29(); // _ZN8S2025C103v29Ev
  virtual void  v30(); // _ZN8S2025C103v30Ev
  virtual void  v31(); // _ZN8S2025C103v31Ev
  virtual void  v32(); // _ZN8S2025C103v32Ev
  virtual void  v33(); // _ZN8S2025C103v33Ev
  virtual void  v34(); // _ZN8S2025C103v34Ev
  virtual void  v35(); // _ZN8S2025C103v35Ev
  S2025C10(); // tgen
};
//SIG(-1 S2025C10) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2025C10 ::~S2025C10(){ note_dtor("S2025C10", this);}
void  S2025C10 ::v22(){vfunc_called(this, "_ZN8S2025C103v22Ev");}
void  S2025C10 ::v23(){vfunc_called(this, "_ZN8S2025C103v23Ev");}
void  S2025C10 ::v24(){vfunc_called(this, "_ZN8S2025C103v24Ev");}
void  S2025C10 ::v25(){vfunc_called(this, "_ZN8S2025C103v25Ev");}
void  S2025C10 ::v26(){vfunc_called(this, "_ZN8S2025C103v26Ev");}
void  S2025C10 ::v27(){vfunc_called(this, "_ZN8S2025C103v27Ev");}
void  S2025C10 ::v28(){vfunc_called(this, "_ZN8S2025C103v28Ev");}
void  S2025C10 ::v29(){vfunc_called(this, "_ZN8S2025C103v29Ev");}
void  S2025C10 ::v30(){vfunc_called(this, "_ZN8S2025C103v30Ev");}
void  S2025C10 ::v31(){vfunc_called(this, "_ZN8S2025C103v31Ev");}
void  S2025C10 ::v32(){vfunc_called(this, "_ZN8S2025C103v32Ev");}
void  S2025C10 ::v33(){vfunc_called(this, "_ZN8S2025C103v33Ev");}
void  S2025C10 ::v34(){vfunc_called(this, "_ZN8S2025C103v34Ev");}
void  S2025C10 ::v35(){vfunc_called(this, "_ZN8S2025C103v35Ev");}
S2025C10 ::S2025C10(){ note_ctor("S2025C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2025C10C1Ev();
extern void _ZN8S2025C10D1Ev();
Name_Map name_map_S2025C10[] = {
  NSPAIR(_ZN8S2025C10C1Ev),
  NSPAIR(_ZN8S2025C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2025C10[];
extern void _ZN8S2025C10D1Ev();
extern void _ZN8S2025C10D0Ev();
extern void _ZN8S2025C103v22Ev();
extern void _ZN8S2025C103v23Ev();
extern void _ZN8S2025C103v24Ev();
extern void _ZN8S2025C103v25Ev();
extern void _ZN8S2025C103v26Ev();
extern void _ZN8S2025C103v27Ev();
extern void _ZN8S2025C103v28Ev();
extern void _ZN8S2025C103v29Ev();
extern void _ZN8S2025C103v30Ev();
extern void _ZN8S2025C103v31Ev();
extern void _ZN8S2025C103v32Ev();
extern void _ZN8S2025C103v33Ev();
extern void _ZN8S2025C103v34Ev();
extern void _ZN8S2025C103v35Ev();
static  VTBL_ENTRY vtc_S2025C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2025C10[0]),
  (VTBL_ENTRY)&_ZN8S2025C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2025C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v35Ev,
};
extern VTBL_ENTRY _ZTI8S2025C10[];
extern  VTBL_ENTRY _ZTV8S2025C10[];
Class_Descriptor cd_S2025C10 = {  "S2025C10", // class name
  0,0,//no base classes
  &(vtc_S2025C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S2025C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2025C10),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2025C9  : S2025C10 {
  ::S7368C58 s2025c9f0;
  virtual  ~S2025C9(); // _ZN7S2025C9D1Ev
  virtual void  v36(); // _ZN7S2025C93v36Ev
  virtual void  v37(); // _ZN7S2025C93v37Ev
  virtual void  v38(); // _ZN7S2025C93v38Ev
  virtual void  v39(); // _ZN7S2025C93v39Ev
  virtual void  v40(); // _ZN7S2025C93v40Ev
  virtual void  v41(); // _ZN7S2025C93v41Ev
  virtual void  v42(); // _ZN7S2025C93v42Ev
  S2025C9(); // tgen
};
//SIG(-1 S2025C9) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2025C9 ::~S2025C9(){ note_dtor("S2025C9", this);}
void  S2025C9 ::v36(){vfunc_called(this, "_ZN7S2025C93v36Ev");}
void  S2025C9 ::v37(){vfunc_called(this, "_ZN7S2025C93v37Ev");}
void  S2025C9 ::v38(){vfunc_called(this, "_ZN7S2025C93v38Ev");}
void  S2025C9 ::v39(){vfunc_called(this, "_ZN7S2025C93v39Ev");}
void  S2025C9 ::v40(){vfunc_called(this, "_ZN7S2025C93v40Ev");}
void  S2025C9 ::v41(){vfunc_called(this, "_ZN7S2025C93v41Ev");}
void  S2025C9 ::v42(){vfunc_called(this, "_ZN7S2025C93v42Ev");}
S2025C9 ::S2025C9(){ note_ctor("S2025C9", this);} // tgen

static void Test_S2025C9()
{
  extern Class_Descriptor cd_S2025C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2025C9, buf);
    S2025C9 *dp, &lv = *(dp=new (buf) S2025C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2025C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2025C9)");
    check_base_class_offset(lv, (S2025C10*), 0, "S2025C9");
    check_field_offset(lv, s2025c9f0, ABISELECT(24,12), "S2025C9.s2025c9f0");
    test_class_info(&lv, &cd_S2025C9);
    dp->~S2025C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2025C9(Test_S2025C9, "S2025C9", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2025C9C1Ev();
extern void _ZN7S2025C9D1Ev();
Name_Map name_map_S2025C9[] = {
  NSPAIR(_ZN7S2025C9C1Ev),
  NSPAIR(_ZN7S2025C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2025C10;
extern VTBL_ENTRY _ZTI8S2025C10[];
extern  VTBL_ENTRY _ZTV8S2025C10[];
static Base_Class bases_S2025C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2025C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2025C9[];
extern void _ZN7S2025C9D1Ev();
extern void _ZN7S2025C9D0Ev();
extern void _ZN8S2025C103v22Ev();
extern void _ZN8S2025C103v23Ev();
extern void _ZN8S2025C103v24Ev();
extern void _ZN8S2025C103v25Ev();
extern void _ZN8S2025C103v26Ev();
extern void _ZN8S2025C103v27Ev();
extern void _ZN8S2025C103v28Ev();
extern void _ZN8S2025C103v29Ev();
extern void _ZN8S2025C103v30Ev();
extern void _ZN8S2025C103v31Ev();
extern void _ZN8S2025C103v32Ev();
extern void _ZN8S2025C103v33Ev();
extern void _ZN8S2025C103v34Ev();
extern void _ZN8S2025C103v35Ev();
extern void _ZN7S2025C93v36Ev();
extern void _ZN7S2025C93v37Ev();
extern void _ZN7S2025C93v38Ev();
extern void _ZN7S2025C93v39Ev();
extern void _ZN7S2025C93v40Ev();
extern void _ZN7S2025C93v41Ev();
extern void _ZN7S2025C93v42Ev();
static  VTBL_ENTRY vtc_S2025C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2025C9[0]),
  (VTBL_ENTRY)&_ZN7S2025C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2025C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v35Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v36Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v42Ev,
};
extern VTBL_ENTRY _ZTI7S2025C9[];
extern  VTBL_ENTRY _ZTV7S2025C9[];
Class_Descriptor cd_S2025C9 = {  "S2025C9", // class name
  bases_S2025C9, 1,
  &(vtc_S2025C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2025C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2025C9),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2025C1  : S2025C2 , S2025C9 {
  ::S2026C13 s2025c1f0;
  void *s2025c1f1;
  int s2025c1f2[2];
  ::S2011C25_nt s2025c1f3;
  char s2025c1f4;
  void *s2025c1f5;
  virtual  ~S2025C1(); // _ZN7S2025C1D1Ev
  virtual void  v1(); // _ZN7S2025C12v1Ev
  virtual void  v2(); // _ZN7S2025C12v2Ev
  virtual void  v3(); // _ZN7S2025C12v3Ev
  virtual void  v4(); // _ZN7S2025C12v4Ev
  virtual void  v5(); // _ZN7S2025C12v5Ev
  virtual void  v6(); // _ZN7S2025C12v6Ev
  virtual void  v7(); // _ZN7S2025C12v7Ev
  virtual void  v8(); // _ZN7S2025C12v8Ev
  virtual void  v9(); // _ZN7S2025C12v9Ev
  virtual void  v10(); // _ZN7S2025C13v10Ev
  virtual void  v11(); // _ZN7S2025C13v11Ev
  virtual void  v12(); // _ZN7S2025C13v12Ev
  S2025C1(); // tgen
};
//SIG(1 S2025C1) C1{ BC2{ BC3{ BC4{ vd v13 v14 v15} vd v16 v17 v18} vd v19 v20 v21 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc} BC9{ BC10{ vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 Fp[2]} vd v36 v37 v38 v39 v40 v41 v42 FC11{ m Fp Fi[2] FC12{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC13{ BC14{ vd} Fi[2] FC15{ Fi FC16{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}} Fp Fi[2] FC17{ m Fs[6] Fi[2] Fc Fs} Fc Fp}


 S2025C1 ::~S2025C1(){ note_dtor("S2025C1", this);}
void  S2025C1 ::v1(){vfunc_called(this, "_ZN7S2025C12v1Ev");}
void  S2025C1 ::v2(){vfunc_called(this, "_ZN7S2025C12v2Ev");}
void  S2025C1 ::v3(){vfunc_called(this, "_ZN7S2025C12v3Ev");}
void  S2025C1 ::v4(){vfunc_called(this, "_ZN7S2025C12v4Ev");}
void  S2025C1 ::v5(){vfunc_called(this, "_ZN7S2025C12v5Ev");}
void  S2025C1 ::v6(){vfunc_called(this, "_ZN7S2025C12v6Ev");}
void  S2025C1 ::v7(){vfunc_called(this, "_ZN7S2025C12v7Ev");}
void  S2025C1 ::v8(){vfunc_called(this, "_ZN7S2025C12v8Ev");}
void  S2025C1 ::v9(){vfunc_called(this, "_ZN7S2025C12v9Ev");}
void  S2025C1 ::v10(){vfunc_called(this, "_ZN7S2025C13v10Ev");}
void  S2025C1 ::v11(){vfunc_called(this, "_ZN7S2025C13v11Ev");}
void  S2025C1 ::v12(){vfunc_called(this, "_ZN7S2025C13v12Ev");}
S2025C1 ::S2025C1(){ note_ctor("S2025C1", this);} // tgen

static void Test_S2025C1()
{
  extern Class_Descriptor cd_S2025C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,67)];
    init_test(&cd_S2025C1, buf);
    S2025C1 *dp, &lv = *(dp=new (buf) S2025C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,264), "sizeof(S2025C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2025C1)");
    check_base_class_offset(lv, (S2025C4*)(S2025C3*)(S2025C2*), 0, "S2025C1");
    check_base_class_offset(lv, (S2025C3*)(S2025C2*), 0, "S2025C1");
    check_base_class_offset(lv, (S2025C2*), 0, "S2025C1");
    check_base_class_offset(lv, (S2025C10*)(S2025C9*), ABISELECT(72,40), "S2025C1");
    check_base_class_offset(lv, (S2025C9*), ABISELECT(72,40), "S2025C1");
    check_field_offset(lv, s2025c1f0, ABISELECT(120,68), "S2025C1.s2025c1f0");
    check_field_offset(lv, s2025c1f1, ABISELECT(320,220), "S2025C1.s2025c1f1");
    check_field_offset(lv, s2025c1f2, ABISELECT(328,224), "S2025C1.s2025c1f2");
    check_field_offset(lv, s2025c1f3, ABISELECT(336,232), "S2025C1.s2025c1f3");
    check_field_offset(lv, s2025c1f4, ABISELECT(360,256), "S2025C1.s2025c1f4");
    check_field_offset(lv, s2025c1f5, ABISELECT(368,260), "S2025C1.s2025c1f5");
    test_class_info(&lv, &cd_S2025C1);
    dp->~S2025C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2025C1(Test_S2025C1, "S2025C1", ABISELECT(376,264));

#else // __cplusplus

extern void _ZN7S2025C1C1Ev();
extern void _ZN7S2025C1D1Ev();
Name_Map name_map_S2025C1[] = {
  NSPAIR(_ZN7S2025C1C1Ev),
  NSPAIR(_ZN7S2025C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2025C4;
extern VTBL_ENTRY _ZTI7S2025C4[];
extern  VTBL_ENTRY _ZTV7S2025C4[];
extern Class_Descriptor cd_S2025C3;
extern VTBL_ENTRY _ZTI7S2025C3[];
extern  VTBL_ENTRY _ZTV7S2025C3[];
extern Class_Descriptor cd_S2025C2;
extern VTBL_ENTRY _ZTI7S2025C2[];
extern  VTBL_ENTRY _ZTV7S2025C2[];
extern Class_Descriptor cd_S2025C10;
extern VTBL_ENTRY _ZTI8S2025C10[];
extern  VTBL_ENTRY _ZTV8S2025C10[];
extern Class_Descriptor cd_S2025C9;
extern VTBL_ENTRY _ZTI7S2025C9[];
extern  VTBL_ENTRY _ZTV7S2025C9[];
static Base_Class bases_S2025C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2025C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2025C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2025C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2025C10,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2025C9,    ABISELECT(72,40), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2025C1[];
extern void _ZN7S2025C1D1Ev();
extern void _ZN7S2025C1D0Ev();
extern void _ZN7S2025C43v13Ev();
extern void _ZN7S2025C43v14Ev();
extern void _ZN7S2025C43v15Ev();
extern void _ZN7S2025C33v16Ev();
extern void _ZN7S2025C33v17Ev();
extern void _ZN7S2025C33v18Ev();
extern void _ZN7S2025C23v19Ev();
extern void _ZN7S2025C23v20Ev();
extern void _ZN7S2025C23v21Ev();
extern void _ZN7S2025C12v1Ev();
extern void _ZN7S2025C12v2Ev();
extern void _ZN7S2025C12v3Ev();
extern void _ZN7S2025C12v4Ev();
extern void _ZN7S2025C12v5Ev();
extern void _ZN7S2025C12v6Ev();
extern void _ZN7S2025C12v7Ev();
extern void _ZN7S2025C12v8Ev();
extern void _ZN7S2025C12v9Ev();
extern void _ZN7S2025C13v10Ev();
extern void _ZN7S2025C13v11Ev();
extern void _ZN7S2025C13v12Ev();
extern void ABISELECT(_ZThn72_N7S2025C1D1Ev,_ZThn40_N7S2025C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2025C1D0Ev,_ZThn40_N7S2025C1D0Ev)();
extern void _ZN8S2025C103v22Ev();
extern void _ZN8S2025C103v23Ev();
extern void _ZN8S2025C103v24Ev();
extern void _ZN8S2025C103v25Ev();
extern void _ZN8S2025C103v26Ev();
extern void _ZN8S2025C103v27Ev();
extern void _ZN8S2025C103v28Ev();
extern void _ZN8S2025C103v29Ev();
extern void _ZN8S2025C103v30Ev();
extern void _ZN8S2025C103v31Ev();
extern void _ZN8S2025C103v32Ev();
extern void _ZN8S2025C103v33Ev();
extern void _ZN8S2025C103v34Ev();
extern void _ZN8S2025C103v35Ev();
extern void _ZN7S2025C93v36Ev();
extern void _ZN7S2025C93v37Ev();
extern void _ZN7S2025C93v38Ev();
extern void _ZN7S2025C93v39Ev();
extern void _ZN7S2025C93v40Ev();
extern void _ZN7S2025C93v41Ev();
extern void _ZN7S2025C93v42Ev();
static  VTBL_ENTRY vtc_S2025C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2025C1[0]),
  (VTBL_ENTRY)&_ZN7S2025C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2025C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2025C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2025C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2025C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2025C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2025C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2025C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2025C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2025C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2025C13v12Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2025C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2025C1D1Ev,_ZThn40_N7S2025C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2025C1D0Ev,_ZThn40_N7S2025C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2025C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2025C103v35Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v36Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2025C93v42Ev,
};
extern VTBL_ENTRY _ZTI7S2025C1[];
extern  VTBL_ENTRY _ZTV7S2025C1[];
Class_Descriptor cd_S2025C1 = {  "S2025C1", // class name
  bases_S2025C1, 5,
  &(vtc_S2025C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,264), // object size
  NSPAIRA(_ZTI7S2025C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2025C1),50, //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  S2027C4  {
  virtual  ~S2027C4(); // _ZN7S2027C4D1Ev
  virtual void  v13(); // _ZN7S2027C43v13Ev
  virtual void  v14(); // _ZN7S2027C43v14Ev
  virtual void  v15(); // _ZN7S2027C43v15Ev
  S2027C4(); // tgen
};
//SIG(-1 S2027C4) C1{ vd v1 v2 v3}


 S2027C4 ::~S2027C4(){ note_dtor("S2027C4", this);}
void  S2027C4 ::v13(){vfunc_called(this, "_ZN7S2027C43v13Ev");}
void  S2027C4 ::v14(){vfunc_called(this, "_ZN7S2027C43v14Ev");}
void  S2027C4 ::v15(){vfunc_called(this, "_ZN7S2027C43v15Ev");}
S2027C4 ::S2027C4(){ note_ctor("S2027C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2027C4C1Ev();
extern void _ZN7S2027C4D1Ev();
Name_Map name_map_S2027C4[] = {
  NSPAIR(_ZN7S2027C4C1Ev),
  NSPAIR(_ZN7S2027C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2027C4[];
extern void _ZN7S2027C4D1Ev();
extern void _ZN7S2027C4D0Ev();
extern void _ZN7S2027C43v13Ev();
extern void _ZN7S2027C43v14Ev();
extern void _ZN7S2027C43v15Ev();
static  VTBL_ENTRY vtc_S2027C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2027C4[0]),
  (VTBL_ENTRY)&_ZN7S2027C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2027C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S2027C4[];
extern  VTBL_ENTRY _ZTV7S2027C4[];
Class_Descriptor cd_S2027C4 = {  "S2027C4", // class name
  0,0,//no base classes
  &(vtc_S2027C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2027C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2027C4),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  S2027C3  : S2027C4 {
  virtual  ~S2027C3(); // _ZN7S2027C3D1Ev
  virtual void  v16(); // _ZN7S2027C33v16Ev
  virtual void  v17(); // _ZN7S2027C33v17Ev
  virtual void  v18(); // _ZN7S2027C33v18Ev
  S2027C3(); // tgen
};
//SIG(-1 S2027C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2027C3 ::~S2027C3(){ note_dtor("S2027C3", this);}
void  S2027C3 ::v16(){vfunc_called(this, "_ZN7S2027C33v16Ev");}
void  S2027C3 ::v17(){vfunc_called(this, "_ZN7S2027C33v17Ev");}
void  S2027C3 ::v18(){vfunc_called(this, "_ZN7S2027C33v18Ev");}
S2027C3 ::S2027C3(){ note_ctor("S2027C3", this);} // tgen

static void Test_S2027C3()
{
  extern Class_Descriptor cd_S2027C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2027C3, buf);
    S2027C3 *dp, &lv = *(dp=new (buf) S2027C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2027C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2027C3)");
    check_base_class_offset(lv, (S2027C4*), 0, "S2027C3");
    test_class_info(&lv, &cd_S2027C3);
    dp->~S2027C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2027C3(Test_S2027C3, "S2027C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2027C3C1Ev();
extern void _ZN7S2027C3D1Ev();
Name_Map name_map_S2027C3[] = {
  NSPAIR(_ZN7S2027C3C1Ev),
  NSPAIR(_ZN7S2027C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2027C4;
extern VTBL_ENTRY _ZTI7S2027C4[];
extern  VTBL_ENTRY _ZTV7S2027C4[];
static Base_Class bases_S2027C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2027C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2027C3[];
extern void _ZN7S2027C3D1Ev();
extern void _ZN7S2027C3D0Ev();
extern void _ZN7S2027C43v13Ev();
extern void _ZN7S2027C43v14Ev();
extern void _ZN7S2027C43v15Ev();
extern void _ZN7S2027C33v16Ev();
extern void _ZN7S2027C33v17Ev();
extern void _ZN7S2027C33v18Ev();
static  VTBL_ENTRY vtc_S2027C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2027C3[0]),
  (VTBL_ENTRY)&_ZN7S2027C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2027C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S2027C3[];
extern  VTBL_ENTRY _ZTV7S2027C3[];
Class_Descriptor cd_S2027C3 = {  "S2027C3", // class name
  bases_S2027C3, 1,
  &(vtc_S2027C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2027C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2027C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2027C2  : S2027C3 {
  ::S7368C77 s2027c2f0;
  ::S2013C7_nt s2027c2f1;
  char s2027c2f2;
  virtual  ~S2027C2(); // _ZN7S2027C2D1Ev
  virtual void  v19(); // _ZN7S2027C23v19Ev
  virtual void  v20(); // _ZN7S2027C23v20Ev
  virtual void  v21(); // _ZN7S2027C23v21Ev
  S2027C2(); // tgen
};
//SIG(-1 S2027C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S2027C2 ::~S2027C2(){ note_dtor("S2027C2", this);}
void  S2027C2 ::v19(){vfunc_called(this, "_ZN7S2027C23v19Ev");}
void  S2027C2 ::v20(){vfunc_called(this, "_ZN7S2027C23v20Ev");}
void  S2027C2 ::v21(){vfunc_called(this, "_ZN7S2027C23v21Ev");}
S2027C2 ::S2027C2(){ note_ctor("S2027C2", this);} // tgen

static void Test_S2027C2()
{
  extern Class_Descriptor cd_S2027C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2027C2, buf);
    S2027C2 *dp, &lv = *(dp=new (buf) S2027C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2027C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2027C2)");
    check_base_class_offset(lv, (S2027C4*)(S2027C3*), 0, "S2027C2");
    check_base_class_offset(lv, (S2027C3*), 0, "S2027C2");
    check_field_offset(lv, s2027c2f0, ABISELECT(8,4), "S2027C2.s2027c2f0");
    check_field_offset(lv, s2027c2f1, ABISELECT(32,20), "S2027C2.s2027c2f1");
    check_field_offset(lv, s2027c2f2, ABISELECT(64,52), "S2027C2.s2027c2f2");
    test_class_info(&lv, &cd_S2027C2);
    dp->~S2027C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2027C2(Test_S2027C2, "S2027C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2027C2C1Ev();
extern void _ZN7S2027C2D1Ev();
Name_Map name_map_S2027C2[] = {
  NSPAIR(_ZN7S2027C2C1Ev),
  NSPAIR(_ZN7S2027C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2027C4;
extern VTBL_ENTRY _ZTI7S2027C4[];
extern  VTBL_ENTRY _ZTV7S2027C4[];
extern Class_Descriptor cd_S2027C3;
extern VTBL_ENTRY _ZTI7S2027C3[];
extern  VTBL_ENTRY _ZTV7S2027C3[];
static Base_Class bases_S2027C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2027C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2027C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2027C2[];
extern void _ZN7S2027C2D1Ev();
extern void _ZN7S2027C2D0Ev();
extern void _ZN7S2027C43v13Ev();
extern void _ZN7S2027C43v14Ev();
extern void _ZN7S2027C43v15Ev();
extern void _ZN7S2027C33v16Ev();
extern void _ZN7S2027C33v17Ev();
extern void _ZN7S2027C33v18Ev();
extern void _ZN7S2027C23v19Ev();
extern void _ZN7S2027C23v20Ev();
extern void _ZN7S2027C23v21Ev();
static  VTBL_ENTRY vtc_S2027C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2027C2[0]),
  (VTBL_ENTRY)&_ZN7S2027C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2027C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2027C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2027C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2027C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S2027C2[];
extern  VTBL_ENTRY _ZTV7S2027C2[];
Class_Descriptor cd_S2027C2 = {  "S2027C2", // class name
  bases_S2027C2, 2,
  &(vtc_S2027C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2027C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2027C2),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  S2027C9  {
  void *s2027c9f0[2];
  virtual  ~S2027C9(); // _ZN7S2027C9D1Ev
  virtual void  v22(); // _ZN7S2027C93v22Ev
  virtual void  v23(); // _ZN7S2027C93v23Ev
  virtual void  v24(); // _ZN7S2027C93v24Ev
  virtual void  v25(); // _ZN7S2027C93v25Ev
  virtual void  v26(); // _ZN7S2027C93v26Ev
  virtual void  v27(); // _ZN7S2027C93v27Ev
  virtual void  v28(); // _ZN7S2027C93v28Ev
  virtual void  v29(); // _ZN7S2027C93v29Ev
  virtual void  v30(); // _ZN7S2027C93v30Ev
  virtual void  v31(); // _ZN7S2027C93v31Ev
  virtual void  v32(); // _ZN7S2027C93v32Ev
  virtual void  v33(); // _ZN7S2027C93v33Ev
  virtual void  v34(); // _ZN7S2027C93v34Ev
  virtual void  v35(); // _ZN7S2027C93v35Ev
  S2027C9(); // tgen
};
//SIG(-1 S2027C9) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2027C9 ::~S2027C9(){ note_dtor("S2027C9", this);}
void  S2027C9 ::v22(){vfunc_called(this, "_ZN7S2027C93v22Ev");}
void  S2027C9 ::v23(){vfunc_called(this, "_ZN7S2027C93v23Ev");}
void  S2027C9 ::v24(){vfunc_called(this, "_ZN7S2027C93v24Ev");}
void  S2027C9 ::v25(){vfunc_called(this, "_ZN7S2027C93v25Ev");}
void  S2027C9 ::v26(){vfunc_called(this, "_ZN7S2027C93v26Ev");}
void  S2027C9 ::v27(){vfunc_called(this, "_ZN7S2027C93v27Ev");}
void  S2027C9 ::v28(){vfunc_called(this, "_ZN7S2027C93v28Ev");}
void  S2027C9 ::v29(){vfunc_called(this, "_ZN7S2027C93v29Ev");}
void  S2027C9 ::v30(){vfunc_called(this, "_ZN7S2027C93v30Ev");}
void  S2027C9 ::v31(){vfunc_called(this, "_ZN7S2027C93v31Ev");}
void  S2027C9 ::v32(){vfunc_called(this, "_ZN7S2027C93v32Ev");}
void  S2027C9 ::v33(){vfunc_called(this, "_ZN7S2027C93v33Ev");}
void  S2027C9 ::v34(){vfunc_called(this, "_ZN7S2027C93v34Ev");}
void  S2027C9 ::v35(){vfunc_called(this, "_ZN7S2027C93v35Ev");}
S2027C9 ::S2027C9(){ note_ctor("S2027C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2027C9C1Ev();
extern void _ZN7S2027C9D1Ev();
Name_Map name_map_S2027C9[] = {
  NSPAIR(_ZN7S2027C9C1Ev),
  NSPAIR(_ZN7S2027C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2027C9[];
extern void _ZN7S2027C9D1Ev();
extern void _ZN7S2027C9D0Ev();
extern void _ZN7S2027C93v22Ev();
extern void _ZN7S2027C93v23Ev();
extern void _ZN7S2027C93v24Ev();
extern void _ZN7S2027C93v25Ev();
extern void _ZN7S2027C93v26Ev();
extern void _ZN7S2027C93v27Ev();
extern void _ZN7S2027C93v28Ev();
extern void _ZN7S2027C93v29Ev();
extern void _ZN7S2027C93v30Ev();
extern void _ZN7S2027C93v31Ev();
extern void _ZN7S2027C93v32Ev();
extern void _ZN7S2027C93v33Ev();
extern void _ZN7S2027C93v34Ev();
extern void _ZN7S2027C93v35Ev();
static  VTBL_ENTRY vtc_S2027C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2027C9[0]),
  (VTBL_ENTRY)&_ZN7S2027C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2027C9D0Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v33Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v34Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v35Ev,
};
extern VTBL_ENTRY _ZTI7S2027C9[];
extern  VTBL_ENTRY _ZTV7S2027C9[];
Class_Descriptor cd_S2027C9 = {  "S2027C9", // class name
  0,0,//no base classes
  &(vtc_S2027C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2027C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2027C9),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2027C8  : S2027C9 {
  ::S7368C58 s2027c8f0;
  virtual  ~S2027C8(); // _ZN7S2027C8D1Ev
  virtual void  v36(); // _ZN7S2027C83v36Ev
  virtual void  v37(); // _ZN7S2027C83v37Ev
  virtual void  v38(); // _ZN7S2027C83v38Ev
  virtual void  v39(); // _ZN7S2027C83v39Ev
  virtual void  v40(); // _ZN7S2027C83v40Ev
  virtual void  v41(); // _ZN7S2027C83v41Ev
  virtual void  v42(); // _ZN7S2027C83v42Ev
  S2027C8(); // tgen
};
//SIG(-1 S2027C8) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2027C8 ::~S2027C8(){ note_dtor("S2027C8", this);}
void  S2027C8 ::v36(){vfunc_called(this, "_ZN7S2027C83v36Ev");}
void  S2027C8 ::v37(){vfunc_called(this, "_ZN7S2027C83v37Ev");}
void  S2027C8 ::v38(){vfunc_called(this, "_ZN7S2027C83v38Ev");}
void  S2027C8 ::v39(){vfunc_called(this, "_ZN7S2027C83v39Ev");}
void  S2027C8 ::v40(){vfunc_called(this, "_ZN7S2027C83v40Ev");}
void  S2027C8 ::v41(){vfunc_called(this, "_ZN7S2027C83v41Ev");}
void  S2027C8 ::v42(){vfunc_called(this, "_ZN7S2027C83v42Ev");}
S2027C8 ::S2027C8(){ note_ctor("S2027C8", this);} // tgen

static void Test_S2027C8()
{
  extern Class_Descriptor cd_S2027C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2027C8, buf);
    S2027C8 *dp, &lv = *(dp=new (buf) S2027C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2027C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2027C8)");
    check_base_class_offset(lv, (S2027C9*), 0, "S2027C8");
    check_field_offset(lv, s2027c8f0, ABISELECT(24,12), "S2027C8.s2027c8f0");
    test_class_info(&lv, &cd_S2027C8);
    dp->~S2027C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2027C8(Test_S2027C8, "S2027C8", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2027C8C1Ev();
extern void _ZN7S2027C8D1Ev();
Name_Map name_map_S2027C8[] = {
  NSPAIR(_ZN7S2027C8C1Ev),
  NSPAIR(_ZN7S2027C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2027C9;
extern VTBL_ENTRY _ZTI7S2027C9[];
extern  VTBL_ENTRY _ZTV7S2027C9[];
static Base_Class bases_S2027C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2027C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2027C8[];
extern void _ZN7S2027C8D1Ev();
extern void _ZN7S2027C8D0Ev();
extern void _ZN7S2027C93v22Ev();
extern void _ZN7S2027C93v23Ev();
extern void _ZN7S2027C93v24Ev();
extern void _ZN7S2027C93v25Ev();
extern void _ZN7S2027C93v26Ev();
extern void _ZN7S2027C93v27Ev();
extern void _ZN7S2027C93v28Ev();
extern void _ZN7S2027C93v29Ev();
extern void _ZN7S2027C93v30Ev();
extern void _ZN7S2027C93v31Ev();
extern void _ZN7S2027C93v32Ev();
extern void _ZN7S2027C93v33Ev();
extern void _ZN7S2027C93v34Ev();
extern void _ZN7S2027C93v35Ev();
extern void _ZN7S2027C83v36Ev();
extern void _ZN7S2027C83v37Ev();
extern void _ZN7S2027C83v38Ev();
extern void _ZN7S2027C83v39Ev();
extern void _ZN7S2027C83v40Ev();
extern void _ZN7S2027C83v41Ev();
extern void _ZN7S2027C83v42Ev();
static  VTBL_ENTRY vtc_S2027C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2027C8[0]),
  (VTBL_ENTRY)&_ZN7S2027C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2027C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v33Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v34Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v35Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v36Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v37Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v38Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v39Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v40Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v41Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v42Ev,
};
extern VTBL_ENTRY _ZTI7S2027C8[];
extern  VTBL_ENTRY _ZTV7S2027C8[];
Class_Descriptor cd_S2027C8 = {  "S2027C8", // class name
  bases_S2027C8, 1,
  &(vtc_S2027C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2027C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2027C8),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2027C1  : S2027C2 , S2027C8 {
  ::S2026C13 s2027c1f0;
  void *s2027c1f1;
  int s2027c1f2[2];
  ::S2011C25_nt s2027c1f3;
  char s2027c1f4;
  void *s2027c1f5;
  virtual  ~S2027C1(); // _ZN7S2027C1D1Ev
  virtual void  v1(); // _ZN7S2027C12v1Ev
  virtual void  v2(); // _ZN7S2027C12v2Ev
  virtual void  v3(); // _ZN7S2027C12v3Ev
  virtual void  v4(); // _ZN7S2027C12v4Ev
  virtual void  v5(); // _ZN7S2027C12v5Ev
  virtual void  v6(); // _ZN7S2027C12v6Ev
  virtual void  v7(); // _ZN7S2027C12v7Ev
  virtual void  v8(); // _ZN7S2027C12v8Ev
  virtual void  v9(); // _ZN7S2027C12v9Ev
  virtual void  v10(); // _ZN7S2027C13v10Ev
  virtual void  v11(); // _ZN7S2027C13v11Ev
  virtual void  v12(); // _ZN7S2027C13v12Ev
  S2027C1(); // tgen
};
//SIG(1 S2027C1) C1{ BC2{ BC3{ BC4{ vd v13 v14 v15} vd v16 v17 v18} vd v19 v20 v21 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} BC8{ BC9{ vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 Fp[2]} vd v36 v37 v38 v39 v40 v41 v42 FC10{ m Fp Fi[2] FC11{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC12{ BC13{ vd} Fi[2] FC14{ Fi FC15{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}} Fp Fi[2] FC16{ m Fs[6] Fi[2] Fc Fs} Fc Fp}


 S2027C1 ::~S2027C1(){ note_dtor("S2027C1", this);}
void  S2027C1 ::v1(){vfunc_called(this, "_ZN7S2027C12v1Ev");}
void  S2027C1 ::v2(){vfunc_called(this, "_ZN7S2027C12v2Ev");}
void  S2027C1 ::v3(){vfunc_called(this, "_ZN7S2027C12v3Ev");}
void  S2027C1 ::v4(){vfunc_called(this, "_ZN7S2027C12v4Ev");}
void  S2027C1 ::v5(){vfunc_called(this, "_ZN7S2027C12v5Ev");}
void  S2027C1 ::v6(){vfunc_called(this, "_ZN7S2027C12v6Ev");}
void  S2027C1 ::v7(){vfunc_called(this, "_ZN7S2027C12v7Ev");}
void  S2027C1 ::v8(){vfunc_called(this, "_ZN7S2027C12v8Ev");}
void  S2027C1 ::v9(){vfunc_called(this, "_ZN7S2027C12v9Ev");}
void  S2027C1 ::v10(){vfunc_called(this, "_ZN7S2027C13v10Ev");}
void  S2027C1 ::v11(){vfunc_called(this, "_ZN7S2027C13v11Ev");}
void  S2027C1 ::v12(){vfunc_called(this, "_ZN7S2027C13v12Ev");}
S2027C1 ::S2027C1(){ note_ctor("S2027C1", this);} // tgen

static void Test_S2027C1()
{
  extern Class_Descriptor cd_S2027C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,71)];
    init_test(&cd_S2027C1, buf);
    S2027C1 *dp, &lv = *(dp=new (buf) S2027C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,280), "sizeof(S2027C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2027C1)");
    check_base_class_offset(lv, (S2027C4*)(S2027C3*)(S2027C2*), 0, "S2027C1");
    check_base_class_offset(lv, (S2027C3*)(S2027C2*), 0, "S2027C1");
    check_base_class_offset(lv, (S2027C2*), 0, "S2027C1");
    check_base_class_offset(lv, (S2027C9*)(S2027C8*), ABISELECT(72,56), "S2027C1");
    check_base_class_offset(lv, (S2027C8*), ABISELECT(72,56), "S2027C1");
    check_field_offset(lv, s2027c1f0, ABISELECT(120,84), "S2027C1.s2027c1f0");
    check_field_offset(lv, s2027c1f1, ABISELECT(320,236), "S2027C1.s2027c1f1");
    check_field_offset(lv, s2027c1f2, ABISELECT(328,240), "S2027C1.s2027c1f2");
    check_field_offset(lv, s2027c1f3, ABISELECT(336,248), "S2027C1.s2027c1f3");
    check_field_offset(lv, s2027c1f4, ABISELECT(360,272), "S2027C1.s2027c1f4");
    check_field_offset(lv, s2027c1f5, ABISELECT(368,276), "S2027C1.s2027c1f5");
    test_class_info(&lv, &cd_S2027C1);
    dp->~S2027C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2027C1(Test_S2027C1, "S2027C1", ABISELECT(376,280));

#else // __cplusplus

extern void _ZN7S2027C1C1Ev();
extern void _ZN7S2027C1D1Ev();
Name_Map name_map_S2027C1[] = {
  NSPAIR(_ZN7S2027C1C1Ev),
  NSPAIR(_ZN7S2027C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2027C4;
extern VTBL_ENTRY _ZTI7S2027C4[];
extern  VTBL_ENTRY _ZTV7S2027C4[];
extern Class_Descriptor cd_S2027C3;
extern VTBL_ENTRY _ZTI7S2027C3[];
extern  VTBL_ENTRY _ZTV7S2027C3[];
extern Class_Descriptor cd_S2027C2;
extern VTBL_ENTRY _ZTI7S2027C2[];
extern  VTBL_ENTRY _ZTV7S2027C2[];
extern Class_Descriptor cd_S2027C9;
extern VTBL_ENTRY _ZTI7S2027C9[];
extern  VTBL_ENTRY _ZTV7S2027C9[];
extern Class_Descriptor cd_S2027C8;
extern VTBL_ENTRY _ZTI7S2027C8[];
extern  VTBL_ENTRY _ZTV7S2027C8[];
static Base_Class bases_S2027C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2027C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2027C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2027C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2027C9,    ABISELECT(72,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2027C8,    ABISELECT(72,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2027C1[];
extern void _ZN7S2027C1D1Ev();
extern void _ZN7S2027C1D0Ev();
extern void _ZN7S2027C43v13Ev();
extern void _ZN7S2027C43v14Ev();
extern void _ZN7S2027C43v15Ev();
extern void _ZN7S2027C33v16Ev();
extern void _ZN7S2027C33v17Ev();
extern void _ZN7S2027C33v18Ev();
extern void _ZN7S2027C23v19Ev();
extern void _ZN7S2027C23v20Ev();
extern void _ZN7S2027C23v21Ev();
extern void _ZN7S2027C12v1Ev();
extern void _ZN7S2027C12v2Ev();
extern void _ZN7S2027C12v3Ev();
extern void _ZN7S2027C12v4Ev();
extern void _ZN7S2027C12v5Ev();
extern void _ZN7S2027C12v6Ev();
extern void _ZN7S2027C12v7Ev();
extern void _ZN7S2027C12v8Ev();
extern void _ZN7S2027C12v9Ev();
extern void _ZN7S2027C13v10Ev();
extern void _ZN7S2027C13v11Ev();
extern void _ZN7S2027C13v12Ev();
extern void ABISELECT(_ZThn72_N7S2027C1D1Ev,_ZThn56_N7S2027C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2027C1D0Ev,_ZThn56_N7S2027C1D0Ev)();
extern void _ZN7S2027C93v22Ev();
extern void _ZN7S2027C93v23Ev();
extern void _ZN7S2027C93v24Ev();
extern void _ZN7S2027C93v25Ev();
extern void _ZN7S2027C93v26Ev();
extern void _ZN7S2027C93v27Ev();
extern void _ZN7S2027C93v28Ev();
extern void _ZN7S2027C93v29Ev();
extern void _ZN7S2027C93v30Ev();
extern void _ZN7S2027C93v31Ev();
extern void _ZN7S2027C93v32Ev();
extern void _ZN7S2027C93v33Ev();
extern void _ZN7S2027C93v34Ev();
extern void _ZN7S2027C93v35Ev();
extern void _ZN7S2027C83v36Ev();
extern void _ZN7S2027C83v37Ev();
extern void _ZN7S2027C83v38Ev();
extern void _ZN7S2027C83v39Ev();
extern void _ZN7S2027C83v40Ev();
extern void _ZN7S2027C83v41Ev();
extern void _ZN7S2027C83v42Ev();
static  VTBL_ENTRY vtc_S2027C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2027C1[0]),
  (VTBL_ENTRY)&_ZN7S2027C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2027C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2027C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2027C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2027C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2027C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2027C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2027C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2027C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2027C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2027C13v12Ev,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S2027C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2027C1D1Ev,_ZThn56_N7S2027C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2027C1D0Ev,_ZThn56_N7S2027C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2027C93v22Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v33Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v34Ev,
  (VTBL_ENTRY)&_ZN7S2027C93v35Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v36Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v37Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v38Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v39Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v40Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v41Ev,
  (VTBL_ENTRY)&_ZN7S2027C83v42Ev,
};
extern VTBL_ENTRY _ZTI7S2027C1[];
extern  VTBL_ENTRY _ZTV7S2027C1[];
Class_Descriptor cd_S2027C1 = {  "S2027C1", // class name
  bases_S2027C1, 5,
  &(vtc_S2027C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,280), // object size
  NSPAIRA(_ZTI7S2027C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2027C1),50, //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  S729C4  : S7368C49 {
  void *s729c4f0;
  ::S10256C12_nt s729c4f1;
  virtual  ~S729C4(); // _ZN6S729C4D1Ev
  virtual void  v13(); // _ZN6S729C43v13Ev
  virtual void  v14(); // _ZN6S729C43v14Ev
  virtual void  v15(); // _ZN6S729C43v15Ev
  virtual void  v16(); // _ZN6S729C43v16Ev
  virtual void  v17(); // _ZN6S729C43v17Ev
  virtual void  v18(); // _ZN6S729C43v18Ev
  virtual void  v19(); // _ZN6S729C43v19Ev
  virtual void  v20(); // _ZN6S729C43v20Ev
  virtual void  v21(); // _ZN6S729C43v21Ev
  virtual void  v22(); // _ZN6S729C43v22Ev
  virtual void  v23(); // _ZN6S729C43v23Ev
  S729C4(); // tgen
};
//SIG(-1 S729C4) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S729C4 ::~S729C4(){ note_dtor("S729C4", this);}
void  S729C4 ::v13(){vfunc_called(this, "_ZN6S729C43v13Ev");}
void  S729C4 ::v14(){vfunc_called(this, "_ZN6S729C43v14Ev");}
void  S729C4 ::v15(){vfunc_called(this, "_ZN6S729C43v15Ev");}
void  S729C4 ::v16(){vfunc_called(this, "_ZN6S729C43v16Ev");}
void  S729C4 ::v17(){vfunc_called(this, "_ZN6S729C43v17Ev");}
void  S729C4 ::v18(){vfunc_called(this, "_ZN6S729C43v18Ev");}
void  S729C4 ::v19(){vfunc_called(this, "_ZN6S729C43v19Ev");}
void  S729C4 ::v20(){vfunc_called(this, "_ZN6S729C43v20Ev");}
void  S729C4 ::v21(){vfunc_called(this, "_ZN6S729C43v21Ev");}
void  S729C4 ::v22(){vfunc_called(this, "_ZN6S729C43v22Ev");}
void  S729C4 ::v23(){vfunc_called(this, "_ZN6S729C43v23Ev");}
S729C4 ::S729C4(){ note_ctor("S729C4", this);} // tgen

static void Test_S729C4()
{
  extern Class_Descriptor cd_S729C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S729C4, buf);
    S729C4 *dp, &lv = *(dp=new (buf) S729C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S729C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S729C4)");
    check_base_class_offset(lv, (S7368C49*), 0, "S729C4");
    check_field_offset(lv, s729c4f0, ABISELECT(32,20), "S729C4.s729c4f0");
    check_field_offset(lv, s729c4f1, ABISELECT(40,24), "S729C4.s729c4f1");
    test_class_info(&lv, &cd_S729C4);
    dp->~S729C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS729C4(Test_S729C4, "S729C4", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN6S729C4C1Ev();
extern void _ZN6S729C4D1Ev();
Name_Map name_map_S729C4[] = {
  NSPAIR(_ZN6S729C4C1Ev),
  NSPAIR(_ZN6S729C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S729C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S729C4[];
extern void _ZN6S729C4D1Ev();
extern void _ZN6S729C4D0Ev();
extern void _ZN6S729C43v13Ev();
extern void _ZN6S729C43v14Ev();
extern void _ZN6S729C43v15Ev();
extern void _ZN6S729C43v16Ev();
extern void _ZN6S729C43v17Ev();
extern void _ZN6S729C43v18Ev();
extern void _ZN6S729C43v19Ev();
extern void _ZN6S729C43v20Ev();
extern void _ZN6S729C43v21Ev();
extern void _ZN6S729C43v22Ev();
extern void _ZN6S729C43v23Ev();
static  VTBL_ENTRY vtc_S729C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S729C4[0]),
  (VTBL_ENTRY)&_ZN6S729C4D1Ev,
  (VTBL_ENTRY)&_ZN6S729C4D0Ev,
  (VTBL_ENTRY)&_ZN6S729C43v13Ev,
  (VTBL_ENTRY)&_ZN6S729C43v14Ev,
  (VTBL_ENTRY)&_ZN6S729C43v15Ev,
  (VTBL_ENTRY)&_ZN6S729C43v16Ev,
  (VTBL_ENTRY)&_ZN6S729C43v17Ev,
  (VTBL_ENTRY)&_ZN6S729C43v18Ev,
  (VTBL_ENTRY)&_ZN6S729C43v19Ev,
  (VTBL_ENTRY)&_ZN6S729C43v20Ev,
  (VTBL_ENTRY)&_ZN6S729C43v21Ev,
  (VTBL_ENTRY)&_ZN6S729C43v22Ev,
  (VTBL_ENTRY)&_ZN6S729C43v23Ev,
};
extern VTBL_ENTRY _ZTI6S729C4[];
extern  VTBL_ENTRY _ZTV6S729C4[];
Class_Descriptor cd_S729C4 = {  "S729C4", // class name
  bases_S729C4, 1,
  &(vtc_S729C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI6S729C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S729C4),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S729C3  : S729C4 {
  int s729c3f0;
  virtual  ~S729C3(); // _ZN6S729C3D1Ev
  virtual void  v24(); // _ZN6S729C33v24Ev
  virtual void  v25(); // _ZN6S729C33v25Ev
  virtual void  v26(); // _ZN6S729C33v26Ev
  virtual void  v27(); // _ZN6S729C33v27Ev
  virtual void  v28(); // _ZN6S729C33v28Ev
  virtual void  v29(); // _ZN6S729C33v29Ev
  virtual void  v30(); // _ZN6S729C33v30Ev
  virtual void  v31(); // _ZN6S729C33v31Ev
  virtual void  v32(); // _ZN6S729C33v32Ev
  virtual void  v33(); // _ZN6S729C33v33Ev
  virtual void  v34(); // _ZN6S729C33v34Ev
  virtual void  v35(); // _ZN6S729C33v35Ev
  virtual void  v36(); // _ZN6S729C33v36Ev
  virtual void  v37(); // _ZN6S729C33v37Ev
  virtual void  v38(); // _ZN6S729C33v38Ev
  virtual void  v39(); // _ZN6S729C33v39Ev
  virtual void  v40(); // _ZN6S729C33v40Ev
  virtual void  v41(); // _ZN6S729C33v41Ev
  virtual void  v42(); // _ZN6S729C33v42Ev
  S729C3(); // tgen
};
//SIG(-1 S729C3) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi}


 S729C3 ::~S729C3(){ note_dtor("S729C3", this);}
void  S729C3 ::v24(){vfunc_called(this, "_ZN6S729C33v24Ev");}
void  S729C3 ::v25(){vfunc_called(this, "_ZN6S729C33v25Ev");}
void  S729C3 ::v26(){vfunc_called(this, "_ZN6S729C33v26Ev");}
void  S729C3 ::v27(){vfunc_called(this, "_ZN6S729C33v27Ev");}
void  S729C3 ::v28(){vfunc_called(this, "_ZN6S729C33v28Ev");}
void  S729C3 ::v29(){vfunc_called(this, "_ZN6S729C33v29Ev");}
void  S729C3 ::v30(){vfunc_called(this, "_ZN6S729C33v30Ev");}
void  S729C3 ::v31(){vfunc_called(this, "_ZN6S729C33v31Ev");}
void  S729C3 ::v32(){vfunc_called(this, "_ZN6S729C33v32Ev");}
void  S729C3 ::v33(){vfunc_called(this, "_ZN6S729C33v33Ev");}
void  S729C3 ::v34(){vfunc_called(this, "_ZN6S729C33v34Ev");}
void  S729C3 ::v35(){vfunc_called(this, "_ZN6S729C33v35Ev");}
void  S729C3 ::v36(){vfunc_called(this, "_ZN6S729C33v36Ev");}
void  S729C3 ::v37(){vfunc_called(this, "_ZN6S729C33v37Ev");}
void  S729C3 ::v38(){vfunc_called(this, "_ZN6S729C33v38Ev");}
void  S729C3 ::v39(){vfunc_called(this, "_ZN6S729C33v39Ev");}
void  S729C3 ::v40(){vfunc_called(this, "_ZN6S729C33v40Ev");}
void  S729C3 ::v41(){vfunc_called(this, "_ZN6S729C33v41Ev");}
void  S729C3 ::v42(){vfunc_called(this, "_ZN6S729C33v42Ev");}
S729C3 ::S729C3(){ note_ctor("S729C3", this);} // tgen

static void Test_S729C3()
{
  extern Class_Descriptor cd_S729C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S729C3, buf);
    S729C3 *dp, &lv = *(dp=new (buf) S729C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S729C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S729C3)");
    check_base_class_offset(lv, (S7368C49*)(S729C4*), 0, "S729C3");
    check_base_class_offset(lv, (S729C4*), 0, "S729C3");
    check_field_offset(lv, s729c3f0, ABISELECT(96,64), "S729C3.s729c3f0");
    test_class_info(&lv, &cd_S729C3);
    dp->~S729C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS729C3(Test_S729C3, "S729C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN6S729C3C1Ev();
extern void _ZN6S729C3D1Ev();
Name_Map name_map_S729C3[] = {
  NSPAIR(_ZN6S729C3C1Ev),
  NSPAIR(_ZN6S729C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S729C4;
extern VTBL_ENTRY _ZTI6S729C4[];
extern  VTBL_ENTRY _ZTV6S729C4[];
static Base_Class bases_S729C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S729C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S729C3[];
extern void _ZN6S729C3D1Ev();
extern void _ZN6S729C3D0Ev();
extern void _ZN6S729C43v13Ev();
extern void _ZN6S729C43v14Ev();
extern void _ZN6S729C43v15Ev();
extern void _ZN6S729C43v16Ev();
extern void _ZN6S729C43v17Ev();
extern void _ZN6S729C43v18Ev();
extern void _ZN6S729C43v19Ev();
extern void _ZN6S729C43v20Ev();
extern void _ZN6S729C43v21Ev();
extern void _ZN6S729C43v22Ev();
extern void _ZN6S729C43v23Ev();
extern void _ZN6S729C33v24Ev();
extern void _ZN6S729C33v25Ev();
extern void _ZN6S729C33v26Ev();
extern void _ZN6S729C33v27Ev();
extern void _ZN6S729C33v28Ev();
extern void _ZN6S729C33v29Ev();
extern void _ZN6S729C33v30Ev();
extern void _ZN6S729C33v31Ev();
extern void _ZN6S729C33v32Ev();
extern void _ZN6S729C33v33Ev();
extern void _ZN6S729C33v34Ev();
extern void _ZN6S729C33v35Ev();
extern void _ZN6S729C33v36Ev();
extern void _ZN6S729C33v37Ev();
extern void _ZN6S729C33v38Ev();
extern void _ZN6S729C33v39Ev();
extern void _ZN6S729C33v40Ev();
extern void _ZN6S729C33v41Ev();
extern void _ZN6S729C33v42Ev();
static  VTBL_ENTRY vtc_S729C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S729C3[0]),
  (VTBL_ENTRY)&_ZN6S729C3D1Ev,
  (VTBL_ENTRY)&_ZN6S729C3D0Ev,
  (VTBL_ENTRY)&_ZN6S729C43v13Ev,
  (VTBL_ENTRY)&_ZN6S729C43v14Ev,
  (VTBL_ENTRY)&_ZN6S729C43v15Ev,
  (VTBL_ENTRY)&_ZN6S729C43v16Ev,
  (VTBL_ENTRY)&_ZN6S729C43v17Ev,
  (VTBL_ENTRY)&_ZN6S729C43v18Ev,
  (VTBL_ENTRY)&_ZN6S729C43v19Ev,
  (VTBL_ENTRY)&_ZN6S729C43v20Ev,
  (VTBL_ENTRY)&_ZN6S729C43v21Ev,
  (VTBL_ENTRY)&_ZN6S729C43v22Ev,
  (VTBL_ENTRY)&_ZN6S729C43v23Ev,
  (VTBL_ENTRY)&_ZN6S729C33v24Ev,
  (VTBL_ENTRY)&_ZN6S729C33v25Ev,
  (VTBL_ENTRY)&_ZN6S729C33v26Ev,
  (VTBL_ENTRY)&_ZN6S729C33v27Ev,
  (VTBL_ENTRY)&_ZN6S729C33v28Ev,
  (VTBL_ENTRY)&_ZN6S729C33v29Ev,
  (VTBL_ENTRY)&_ZN6S729C33v30Ev,
  (VTBL_ENTRY)&_ZN6S729C33v31Ev,
  (VTBL_ENTRY)&_ZN6S729C33v32Ev,
  (VTBL_ENTRY)&_ZN6S729C33v33Ev,
  (VTBL_ENTRY)&_ZN6S729C33v34Ev,
  (VTBL_ENTRY)&_ZN6S729C33v35Ev,
  (VTBL_ENTRY)&_ZN6S729C33v36Ev,
  (VTBL_ENTRY)&_ZN6S729C33v37Ev,
  (VTBL_ENTRY)&_ZN6S729C33v38Ev,
  (VTBL_ENTRY)&_ZN6S729C33v39Ev,
  (VTBL_ENTRY)&_ZN6S729C33v40Ev,
  (VTBL_ENTRY)&_ZN6S729C33v41Ev,
  (VTBL_ENTRY)&_ZN6S729C33v42Ev,
};
extern VTBL_ENTRY _ZTI6S729C3[];
extern  VTBL_ENTRY _ZTV6S729C3[];
Class_Descriptor cd_S729C3 = {  "S729C3", // class name
  bases_S729C3, 2,
  &(vtc_S729C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI6S729C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S729C3),34, //virtual function table var
  2, // 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  S729C2  : S729C3 {
  ::S7368C77 s729c2f0;
  virtual  ~S729C2(); // _ZN6S729C2D1Ev
  virtual void  v43(); // _ZN6S729C23v43Ev
  virtual void  v44(); // _ZN6S729C23v44Ev
  virtual void  v45(); // _ZN6S729C23v45Ev
  virtual void  v46(); // _ZN6S729C23v46Ev
  virtual void  v47(); // _ZN6S729C23v47Ev
  virtual void  v48(); // _ZN6S729C23v48Ev
  virtual void  v49(); // _ZN6S729C23v49Ev
  S729C2(); // tgen
};
//SIG(-1 S729C2) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} vd v1 v2 v3 v4 v5 v6 v7 FC8{ m Fp Fi[2] FC9{ m}}}


 S729C2 ::~S729C2(){ note_dtor("S729C2", this);}
void  S729C2 ::v43(){vfunc_called(this, "_ZN6S729C23v43Ev");}
void  S729C2 ::v44(){vfunc_called(this, "_ZN6S729C23v44Ev");}
void  S729C2 ::v45(){vfunc_called(this, "_ZN6S729C23v45Ev");}
void  S729C2 ::v46(){vfunc_called(this, "_ZN6S729C23v46Ev");}
void  S729C2 ::v47(){vfunc_called(this, "_ZN6S729C23v47Ev");}
void  S729C2 ::v48(){vfunc_called(this, "_ZN6S729C23v48Ev");}
void  S729C2 ::v49(){vfunc_called(this, "_ZN6S729C23v49Ev");}
S729C2 ::S729C2(){ note_ctor("S729C2", this);} // tgen

static void Test_S729C2()
{
  extern Class_Descriptor cd_S729C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S729C2, buf);
    S729C2 *dp, &lv = *(dp=new (buf) S729C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S729C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S729C2)");
    check_base_class_offset(lv, (S7368C49*)(S729C4*)(S729C3*), 0, "S729C2");
    check_base_class_offset(lv, (S729C4*)(S729C3*), 0, "S729C2");
    check_base_class_offset(lv, (S729C3*), 0, "S729C2");
    check_field_offset(lv, s729c2f0, ABISELECT(104,68), "S729C2.s729c2f0");
    test_class_info(&lv, &cd_S729C2);
    dp->~S729C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS729C2(Test_S729C2, "S729C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN6S729C2C1Ev();
extern void _ZN6S729C2D1Ev();
Name_Map name_map_S729C2[] = {
  NSPAIR(_ZN6S729C2C1Ev),
  NSPAIR(_ZN6S729C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S729C4;
extern VTBL_ENTRY _ZTI6S729C4[];
extern  VTBL_ENTRY _ZTV6S729C4[];
extern Class_Descriptor cd_S729C3;
extern VTBL_ENTRY _ZTI6S729C3[];
extern  VTBL_ENTRY _ZTV6S729C3[];
static Base_Class bases_S729C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S729C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S729C2[];
extern void _ZN6S729C2D1Ev();
extern void _ZN6S729C2D0Ev();
extern void _ZN6S729C43v13Ev();
extern void _ZN6S729C43v14Ev();
extern void _ZN6S729C43v15Ev();
extern void _ZN6S729C43v16Ev();
extern void _ZN6S729C43v17Ev();
extern void _ZN6S729C43v18Ev();
extern void _ZN6S729C43v19Ev();
extern void _ZN6S729C43v20Ev();
extern void _ZN6S729C43v21Ev();
extern void _ZN6S729C43v22Ev();
extern void _ZN6S729C43v23Ev();
extern void _ZN6S729C33v24Ev();
extern void _ZN6S729C33v25Ev();
extern void _ZN6S729C33v26Ev();
extern void _ZN6S729C33v27Ev();
extern void _ZN6S729C33v28Ev();
extern void _ZN6S729C33v29Ev();
extern void _ZN6S729C33v30Ev();
extern void _ZN6S729C33v31Ev();
extern void _ZN6S729C33v32Ev();
extern void _ZN6S729C33v33Ev();
extern void _ZN6S729C33v34Ev();
extern void _ZN6S729C33v35Ev();
extern void _ZN6S729C33v36Ev();
extern void _ZN6S729C33v37Ev();
extern void _ZN6S729C33v38Ev();
extern void _ZN6S729C33v39Ev();
extern void _ZN6S729C33v40Ev();
extern void _ZN6S729C33v41Ev();
extern void _ZN6S729C33v42Ev();
extern void _ZN6S729C23v43Ev();
extern void _ZN6S729C23v44Ev();
extern void _ZN6S729C23v45Ev();
extern void _ZN6S729C23v46Ev();
extern void _ZN6S729C23v47Ev();
extern void _ZN6S729C23v48Ev();
extern void _ZN6S729C23v49Ev();
static  VTBL_ENTRY vtc_S729C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S729C2[0]),
  (VTBL_ENTRY)&_ZN6S729C2D1Ev,
  (VTBL_ENTRY)&_ZN6S729C2D0Ev,
  (VTBL_ENTRY)&_ZN6S729C43v13Ev,
  (VTBL_ENTRY)&_ZN6S729C43v14Ev,
  (VTBL_ENTRY)&_ZN6S729C43v15Ev,
  (VTBL_ENTRY)&_ZN6S729C43v16Ev,
  (VTBL_ENTRY)&_ZN6S729C43v17Ev,
  (VTBL_ENTRY)&_ZN6S729C43v18Ev,
  (VTBL_ENTRY)&_ZN6S729C43v19Ev,
  (VTBL_ENTRY)&_ZN6S729C43v20Ev,
  (VTBL_ENTRY)&_ZN6S729C43v21Ev,
  (VTBL_ENTRY)&_ZN6S729C43v22Ev,
  (VTBL_ENTRY)&_ZN6S729C43v23Ev,
  (VTBL_ENTRY)&_ZN6S729C33v24Ev,
  (VTBL_ENTRY)&_ZN6S729C33v25Ev,
  (VTBL_ENTRY)&_ZN6S729C33v26Ev,
  (VTBL_ENTRY)&_ZN6S729C33v27Ev,
  (VTBL_ENTRY)&_ZN6S729C33v28Ev,
  (VTBL_ENTRY)&_ZN6S729C33v29Ev,
  (VTBL_ENTRY)&_ZN6S729C33v30Ev,
  (VTBL_ENTRY)&_ZN6S729C33v31Ev,
  (VTBL_ENTRY)&_ZN6S729C33v32Ev,
  (VTBL_ENTRY)&_ZN6S729C33v33Ev,
  (VTBL_ENTRY)&_ZN6S729C33v34Ev,
  (VTBL_ENTRY)&_ZN6S729C33v35Ev,
  (VTBL_ENTRY)&_ZN6S729C33v36Ev,
  (VTBL_ENTRY)&_ZN6S729C33v37Ev,
  (VTBL_ENTRY)&_ZN6S729C33v38Ev,
  (VTBL_ENTRY)&_ZN6S729C33v39Ev,
  (VTBL_ENTRY)&_ZN6S729C33v40Ev,
  (VTBL_ENTRY)&_ZN6S729C33v41Ev,
  (VTBL_ENTRY)&_ZN6S729C33v42Ev,
  (VTBL_ENTRY)&_ZN6S729C23v43Ev,
  (VTBL_ENTRY)&_ZN6S729C23v44Ev,
  (VTBL_ENTRY)&_ZN6S729C23v45Ev,
  (VTBL_ENTRY)&_ZN6S729C23v46Ev,
  (VTBL_ENTRY)&_ZN6S729C23v47Ev,
  (VTBL_ENTRY)&_ZN6S729C23v48Ev,
  (VTBL_ENTRY)&_ZN6S729C23v49Ev,
};
extern VTBL_ENTRY _ZTI6S729C2[];
extern  VTBL_ENTRY _ZTV6S729C2[];
Class_Descriptor cd_S729C2 = {  "S729C2", // class name
  bases_S729C2, 3,
  &(vtc_S729C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI6S729C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S729C2),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S729C11  {
  virtual  ~S729C11(); // _ZN7S729C11D1Ev
  virtual void  v50(); // _ZN7S729C113v50Ev
  S729C11(); // tgen
};
//SIG(-1 S729C11) C1{ vd v1}


 S729C11 ::~S729C11(){ note_dtor("S729C11", this);}
void  S729C11 ::v50(){vfunc_called(this, "_ZN7S729C113v50Ev");}
S729C11 ::S729C11(){ note_ctor("S729C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S729C11C1Ev();
extern void _ZN7S729C11D1Ev();
Name_Map name_map_S729C11[] = {
  NSPAIR(_ZN7S729C11C1Ev),
  NSPAIR(_ZN7S729C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S729C11[];
extern void _ZN7S729C11D1Ev();
extern void _ZN7S729C11D0Ev();
extern void _ZN7S729C113v50Ev();
static  VTBL_ENTRY vtc_S729C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S729C11[0]),
  (VTBL_ENTRY)&_ZN7S729C11D1Ev,
  (VTBL_ENTRY)&_ZN7S729C11D0Ev,
  (VTBL_ENTRY)&_ZN7S729C113v50Ev,
};
extern VTBL_ENTRY _ZTI7S729C11[];
extern  VTBL_ENTRY _ZTV7S729C11[];
Class_Descriptor cd_S729C11 = {  "S729C11", // class name
  0,0,//no base classes
  &(vtc_S729C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S729C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S729C11),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  S729C12  : S7368C18_nt {
  void *s729c12f0[2];
  int s729c12f1;
  virtual  ~S729C12(); // _ZN7S729C12D1Ev
  S729C12(); // tgen
};
//SIG(-1 S729C12) C1{ BC2{ vd m Fp} vd Fp[2] Fi}


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

static void Test_S729C12()
{
  extern Class_Descriptor cd_S729C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S729C12, buf);
    S729C12 *dp, &lv = *(dp=new (buf) S729C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S729C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S729C12)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S729C12");
    check_field_offset(lv, s729c12f0, ABISELECT(16,8), "S729C12.s729c12f0");
    check_field_offset(lv, s729c12f1, ABISELECT(32,16), "S729C12.s729c12f1");
    test_class_info(&lv, &cd_S729C12);
    dp->~S729C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS729C12(Test_S729C12, "S729C12", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S729C12C1Ev();
extern void _ZN7S729C12D1Ev();
Name_Map name_map_S729C12[] = {
  NSPAIR(_ZN7S729C12C1Ev),
  NSPAIR(_ZN7S729C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S729C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S729C12[];
extern void _ZN7S729C12D1Ev();
extern void _ZN7S729C12D0Ev();
static  VTBL_ENTRY vtc_S729C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S729C12[0]),
  (VTBL_ENTRY)&_ZN7S729C12D1Ev,
  (VTBL_ENTRY)&_ZN7S729C12D0Ev,
};
extern VTBL_ENTRY _ZTI7S729C12[];
extern  VTBL_ENTRY _ZTV7S729C12[];
Class_Descriptor cd_S729C12 = {  "S729C12", // class name
  bases_S729C12, 1,
  &(vtc_S729C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S729C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S729C12),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  S729C1  : S729C2 , S729C11 {
  ::S729C12 s729c1f0;
  ::S7368C58 s729c1f1;
  void *s729c1f2;
  virtual  ~S729C1(); // _ZN6S729C1D1Ev
  virtual void  v1(); // _ZN6S729C12v1Ev
  virtual void  v2(); // _ZN6S729C12v2Ev
  virtual void  v3(); // _ZN6S729C12v3Ev
  virtual void  v4(); // _ZN6S729C12v4Ev
  virtual void  v5(); // _ZN6S729C12v5Ev
  virtual void  v6(); // _ZN6S729C12v6Ev
  virtual void  v7(); // _ZN6S729C12v7Ev
  virtual void  v8(); // _ZN6S729C12v8Ev
  virtual void  v9(); // _ZN6S729C12v9Ev
  virtual void  v10(); // _ZN6S729C13v10Ev
  virtual void  v11(); // _ZN6S729C13v11Ev
  virtual void  v12(); // _ZN6S729C13v12Ev
  S729C1(); // tgen
};
//SIG(1 S729C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 Fi} vd v43 v44 v45 v46 v47 v48 v49 FC9{ m Fp Fi[2] FC10{ m}}} BC11{ vd v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC12{ BC13{ vd m Fp} vd Fp[2] Fi} FC14{ m Fp Fi[2] FC7} Fp}


 S729C1 ::~S729C1(){ note_dtor("S729C1", this);}
void  S729C1 ::v1(){vfunc_called(this, "_ZN6S729C12v1Ev");}
void  S729C1 ::v2(){vfunc_called(this, "_ZN6S729C12v2Ev");}
void  S729C1 ::v3(){vfunc_called(this, "_ZN6S729C12v3Ev");}
void  S729C1 ::v4(){vfunc_called(this, "_ZN6S729C12v4Ev");}
void  S729C1 ::v5(){vfunc_called(this, "_ZN6S729C12v5Ev");}
void  S729C1 ::v6(){vfunc_called(this, "_ZN6S729C12v6Ev");}
void  S729C1 ::v7(){vfunc_called(this, "_ZN6S729C12v7Ev");}
void  S729C1 ::v8(){vfunc_called(this, "_ZN6S729C12v8Ev");}
void  S729C1 ::v9(){vfunc_called(this, "_ZN6S729C12v9Ev");}
void  S729C1 ::v10(){vfunc_called(this, "_ZN6S729C13v10Ev");}
void  S729C1 ::v11(){vfunc_called(this, "_ZN6S729C13v11Ev");}
void  S729C1 ::v12(){vfunc_called(this, "_ZN6S729C13v12Ev");}
S729C1 ::S729C1(){ note_ctor("S729C1", this);} // tgen

static void Test_S729C1()
{
  extern Class_Descriptor cd_S729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,33)];
    init_test(&cd_S729C1, buf);
    S729C1 *dp, &lv = *(dp=new (buf) S729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S729C1)");
    check_base_class_offset(lv, (S7368C49*)(S729C4*)(S729C3*)(S729C2*), 0, "S729C1");
    check_base_class_offset(lv, (S729C4*)(S729C3*)(S729C2*), 0, "S729C1");
    check_base_class_offset(lv, (S729C3*)(S729C2*), 0, "S729C1");
    check_base_class_offset(lv, (S729C2*), 0, "S729C1");
    check_base_class_offset(lv, (S729C11*), ABISELECT(128,84), "S729C1");
    check_field_offset(lv, s729c1f0, ABISELECT(136,88), "S729C1.s729c1f0");
    check_field_offset(lv, s729c1f1, ABISELECT(176,108), "S729C1.s729c1f1");
    check_field_offset(lv, s729c1f2, ABISELECT(200,124), "S729C1.s729c1f2");
    test_class_info(&lv, &cd_S729C1);
    dp->~S729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS729C1(Test_S729C1, "S729C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN6S729C1C1Ev();
extern void _ZN6S729C1D1Ev();
Name_Map name_map_S729C1[] = {
  NSPAIR(_ZN6S729C1C1Ev),
  NSPAIR(_ZN6S729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S729C4;
extern VTBL_ENTRY _ZTI6S729C4[];
extern  VTBL_ENTRY _ZTV6S729C4[];
extern Class_Descriptor cd_S729C3;
extern VTBL_ENTRY _ZTI6S729C3[];
extern  VTBL_ENTRY _ZTV6S729C3[];
extern Class_Descriptor cd_S729C2;
extern VTBL_ENTRY _ZTI6S729C2[];
extern  VTBL_ENTRY _ZTV6S729C2[];
extern Class_Descriptor cd_S729C11;
extern VTBL_ENTRY _ZTI7S729C11[];
extern  VTBL_ENTRY _ZTV7S729C11[];
static Base_Class bases_S729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S729C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S729C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S729C11,    ABISELECT(128,84), //bcp->offset
    53, //bcp->virtual_function_table_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 _ZTI6S729C1[];
extern void _ZN6S729C1D1Ev();
extern void _ZN6S729C1D0Ev();
extern void _ZN6S729C43v13Ev();
extern void _ZN6S729C43v14Ev();
extern void _ZN6S729C43v15Ev();
extern void _ZN6S729C43v16Ev();
extern void _ZN6S729C43v17Ev();
extern void _ZN6S729C43v18Ev();
extern void _ZN6S729C43v19Ev();
extern void _ZN6S729C43v20Ev();
extern void _ZN6S729C43v21Ev();
extern void _ZN6S729C43v22Ev();
extern void _ZN6S729C43v23Ev();
extern void _ZN6S729C33v24Ev();
extern void _ZN6S729C33v25Ev();
extern void _ZN6S729C33v26Ev();
extern void _ZN6S729C33v27Ev();
extern void _ZN6S729C33v28Ev();
extern void _ZN6S729C33v29Ev();
extern void _ZN6S729C33v30Ev();
extern void _ZN6S729C33v31Ev();
extern void _ZN6S729C33v32Ev();
extern void _ZN6S729C33v33Ev();
extern void _ZN6S729C33v34Ev();
extern void _ZN6S729C33v35Ev();
extern void _ZN6S729C33v36Ev();
extern void _ZN6S729C33v37Ev();
extern void _ZN6S729C33v38Ev();
extern void _ZN6S729C33v39Ev();
extern void _ZN6S729C33v40Ev();
extern void _ZN6S729C33v41Ev();
extern void _ZN6S729C33v42Ev();
extern void _ZN6S729C23v43Ev();
extern void _ZN6S729C23v44Ev();
extern void _ZN6S729C23v45Ev();
extern void _ZN6S729C23v46Ev();
extern void _ZN6S729C23v47Ev();
extern void _ZN6S729C23v48Ev();
extern void _ZN6S729C23v49Ev();
extern void _ZN6S729C12v1Ev();
extern void _ZN6S729C12v2Ev();
extern void _ZN6S729C12v3Ev();
extern void _ZN6S729C12v4Ev();
extern void _ZN6S729C12v5Ev();
extern void _ZN6S729C12v6Ev();
extern void _ZN6S729C12v7Ev();
extern void _ZN6S729C12v8Ev();
extern void _ZN6S729C12v9Ev();
extern void _ZN6S729C13v10Ev();
extern void _ZN6S729C13v11Ev();
extern void _ZN6S729C13v12Ev();
extern void ABISELECT(_ZThn128_N6S729C1D1Ev,_ZThn84_N6S729C1D1Ev)();
extern void ABISELECT(_ZThn128_N6S729C1D0Ev,_ZThn84_N6S729C1D0Ev)();
extern void _ZN7S729C113v50Ev();
static  VTBL_ENTRY vtc_S729C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S729C1[0]),
  (VTBL_ENTRY)&_ZN6S729C1D1Ev,
  (VTBL_ENTRY)&_ZN6S729C1D0Ev,
  (VTBL_ENTRY)&_ZN6S729C43v13Ev,
  (VTBL_ENTRY)&_ZN6S729C43v14Ev,
  (VTBL_ENTRY)&_ZN6S729C43v15Ev,
  (VTBL_ENTRY)&_ZN6S729C43v16Ev,
  (VTBL_ENTRY)&_ZN6S729C43v17Ev,
  (VTBL_ENTRY)&_ZN6S729C43v18Ev,
  (VTBL_ENTRY)&_ZN6S729C43v19Ev,
  (VTBL_ENTRY)&_ZN6S729C43v20Ev,
  (VTBL_ENTRY)&_ZN6S729C43v21Ev,
  (VTBL_ENTRY)&_ZN6S729C43v22Ev,
  (VTBL_ENTRY)&_ZN6S729C43v23Ev,
  (VTBL_ENTRY)&_ZN6S729C33v24Ev,
  (VTBL_ENTRY)&_ZN6S729C33v25Ev,
  (VTBL_ENTRY)&_ZN6S729C33v26Ev,
  (VTBL_ENTRY)&_ZN6S729C33v27Ev,
  (VTBL_ENTRY)&_ZN6S729C33v28Ev,
  (VTBL_ENTRY)&_ZN6S729C33v29Ev,
  (VTBL_ENTRY)&_ZN6S729C33v30Ev,
  (VTBL_ENTRY)&_ZN6S729C33v31Ev,
  (VTBL_ENTRY)&_ZN6S729C33v32Ev,
  (VTBL_ENTRY)&_ZN6S729C33v33Ev,
  (VTBL_ENTRY)&_ZN6S729C33v34Ev,
  (VTBL_ENTRY)&_ZN6S729C33v35Ev,
  (VTBL_ENTRY)&_ZN6S729C33v36Ev,
  (VTBL_ENTRY)&_ZN6S729C33v37Ev,
  (VTBL_ENTRY)&_ZN6S729C33v38Ev,
  (VTBL_ENTRY)&_ZN6S729C33v39Ev,
  (VTBL_ENTRY)&_ZN6S729C33v40Ev,
  (VTBL_ENTRY)&_ZN6S729C33v41Ev,
  (VTBL_ENTRY)&_ZN6S729C33v42Ev,
  (VTBL_ENTRY)&_ZN6S729C23v43Ev,
  (VTBL_ENTRY)&_ZN6S729C23v44Ev,
  (VTBL_ENTRY)&_ZN6S729C23v45Ev,
  (VTBL_ENTRY)&_ZN6S729C23v46Ev,
  (VTBL_ENTRY)&_ZN6S729C23v47Ev,
  (VTBL_ENTRY)&_ZN6S729C23v48Ev,
  (VTBL_ENTRY)&_ZN6S729C23v49Ev,
  (VTBL_ENTRY)&_ZN6S729C12v1Ev,
  (VTBL_ENTRY)&_ZN6S729C12v2Ev,
  (VTBL_ENTRY)&_ZN6S729C12v3Ev,
  (VTBL_ENTRY)&_ZN6S729C12v4Ev,
  (VTBL_ENTRY)&_ZN6S729C12v5Ev,
  (VTBL_ENTRY)&_ZN6S729C12v6Ev,
  (VTBL_ENTRY)&_ZN6S729C12v7Ev,
  (VTBL_ENTRY)&_ZN6S729C12v8Ev,
  (VTBL_ENTRY)&_ZN6S729C12v9Ev,
  (VTBL_ENTRY)&_ZN6S729C13v10Ev,
  (VTBL_ENTRY)&_ZN6S729C13v11Ev,
  (VTBL_ENTRY)&_ZN6S729C13v12Ev,
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI6S729C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N6S729C1D1Ev,_ZThn84_N6S729C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N6S729C1D0Ev,_ZThn84_N6S729C1D0Ev),
  (VTBL_ENTRY)&_ZN7S729C113v50Ev,
};
extern VTBL_ENTRY _ZTI6S729C1[];
extern  VTBL_ENTRY _ZTV6S729C1[];
Class_Descriptor cd_S729C1 = {  "S729C1", // class name
  bases_S729C1, 5,
  &(vtc_S729C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI6S729C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S729C1),58, //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  S4464C4_nt  {
  void *s4464c4f0;
  virtual  ~S4464C4_nt(); // _ZN10S4464C4_ntD1Ev
  virtual void  v6(); // _ZN10S4464C4_nt2v6Ev
  virtual void  v7(); // _ZN10S4464C4_nt2v7Ev
  virtual void  v8(); // _ZN10S4464C4_nt2v8Ev
  virtual void  v9(); // _ZN10S4464C4_nt2v9Ev
  virtual void  v10(); // _ZN10S4464C4_nt3v10Ev
  virtual void  v11(); // _ZN10S4464C4_nt3v11Ev
  virtual void  v12(); // _ZN10S4464C4_nt3v12Ev
  virtual void  v13(); // _ZN10S4464C4_nt3v13Ev
  virtual void  v14(); // _ZN10S4464C4_nt3v14Ev
  S4464C4_nt(); // tgen
};
//SIG(-1 S4464C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S4464C4_nt ::~S4464C4_nt(){ note_dtor("S4464C4_nt", this);}
void  S4464C4_nt ::v6(){vfunc_called(this, "_ZN10S4464C4_nt2v6Ev");}
void  S4464C4_nt ::v7(){vfunc_called(this, "_ZN10S4464C4_nt2v7Ev");}
void  S4464C4_nt ::v8(){vfunc_called(this, "_ZN10S4464C4_nt2v8Ev");}
void  S4464C4_nt ::v9(){vfunc_called(this, "_ZN10S4464C4_nt2v9Ev");}
void  S4464C4_nt ::v10(){vfunc_called(this, "_ZN10S4464C4_nt3v10Ev");}
void  S4464C4_nt ::v11(){vfunc_called(this, "_ZN10S4464C4_nt3v11Ev");}
void  S4464C4_nt ::v12(){vfunc_called(this, "_ZN10S4464C4_nt3v12Ev");}
void  S4464C4_nt ::v13(){vfunc_called(this, "_ZN10S4464C4_nt3v13Ev");}
void  S4464C4_nt ::v14(){vfunc_called(this, "_ZN10S4464C4_nt3v14Ev");}
S4464C4_nt ::S4464C4_nt(){ note_ctor("S4464C4_nt", this);} // tgen

//skip512 S4464C4_nt

#else // __cplusplus

extern void _ZN10S4464C4_ntC1Ev();
extern void _ZN10S4464C4_ntD1Ev();
Name_Map name_map_S4464C4_nt[] = {
  NSPAIR(_ZN10S4464C4_ntC1Ev),
  NSPAIR(_ZN10S4464C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4464C4_nt[];
extern void _ZN10S4464C4_ntD1Ev();
extern void _ZN10S4464C4_ntD0Ev();
extern void _ZN10S4464C4_nt2v6Ev();
extern void _ZN10S4464C4_nt2v7Ev();
extern void _ZN10S4464C4_nt2v8Ev();
extern void _ZN10S4464C4_nt2v9Ev();
extern void _ZN10S4464C4_nt3v10Ev();
extern void _ZN10S4464C4_nt3v11Ev();
extern void _ZN10S4464C4_nt3v12Ev();
extern void _ZN10S4464C4_nt3v13Ev();
extern void _ZN10S4464C4_nt3v14Ev();
static  VTBL_ENTRY vtc_S4464C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4464C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S4464C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4464C4_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI10S4464C4_nt[];
VTBL_ENTRY *P__ZTI10S4464C4_nt = _ZTI10S4464C4_nt; 
extern  VTBL_ENTRY _ZTV10S4464C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4464C3  {
  int s4464c3f0[4];
  ::S4464C4_nt s4464c3f1;
  int s4464c3f2;
  char s4464c3f3;
  ::S7368C72_nt s4464c3f4;
  int s4464c3f5;
  virtual  ~S4464C3(); // _ZN7S4464C3D1Ev
  virtual void  v2(); // _ZN7S4464C32v2Ev
  virtual void  v3(); // _ZN7S4464C32v3Ev
  virtual void  v4(); // _ZN7S4464C32v4Ev
  S4464C3(); // tgen
};
//SIG(-1 S4464C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4464C3 ::~S4464C3(){ note_dtor("S4464C3", this);}
void  S4464C3 ::v2(){vfunc_called(this, "_ZN7S4464C32v2Ev");}
void  S4464C3 ::v3(){vfunc_called(this, "_ZN7S4464C32v3Ev");}
void  S4464C3 ::v4(){vfunc_called(this, "_ZN7S4464C32v4Ev");}
S4464C3 ::S4464C3(){ note_ctor("S4464C3", this);} // tgen

static void Test_S4464C3()
{
  extern Class_Descriptor cd_S4464C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4464C3, buf);
    S4464C3 *dp, &lv = *(dp=new (buf) S4464C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4464C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4464C3)");
    check_field_offset(lv, s4464c3f0, ABISELECT(8,4), "S4464C3.s4464c3f0");
    check_field_offset(lv, s4464c3f1, ABISELECT(24,20), "S4464C3.s4464c3f1");
    check_field_offset(lv, s4464c3f2, ABISELECT(40,28), "S4464C3.s4464c3f2");
    check_field_offset(lv, s4464c3f3, ABISELECT(44,32), "S4464C3.s4464c3f3");
    check_field_offset(lv, s4464c3f4, ABISELECT(48,36), "S4464C3.s4464c3f4");
    check_field_offset(lv, s4464c3f5, ABISELECT(64,48), "S4464C3.s4464c3f5");
    test_class_info(&lv, &cd_S4464C3);
    dp->~S4464C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4464C3(Test_S4464C3, "S4464C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4464C3C1Ev();
extern void _ZN7S4464C3D1Ev();
Name_Map name_map_S4464C3[] = {
  NSPAIR(_ZN7S4464C3C1Ev),
  NSPAIR(_ZN7S4464C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4464C3[];
extern void _ZN7S4464C3D1Ev();
extern void _ZN7S4464C3D0Ev();
extern void _ZN7S4464C32v2Ev();
extern void _ZN7S4464C32v3Ev();
extern void _ZN7S4464C32v4Ev();
static  VTBL_ENTRY vtc_S4464C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4464C3[0]),
  (VTBL_ENTRY)&_ZN7S4464C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4464C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4464C3[];
extern  VTBL_ENTRY _ZTV7S4464C3[];
Class_Descriptor cd_S4464C3 = {  "S4464C3", // class name
  0,0,//no base classes
  &(vtc_S4464C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4464C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4464C3),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  S4464C2  : S4464C3 {
  virtual  ~S4464C2(); // _ZN7S4464C2D1Ev
  virtual void  v5(); // _ZN7S4464C22v5Ev
  S4464C2(); // tgen
};
//SIG(-1 S4464C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


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

static void Test_S4464C2()
{
  extern Class_Descriptor cd_S4464C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4464C2, buf);
    S4464C2 *dp, &lv = *(dp=new (buf) S4464C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4464C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4464C2)");
    check_base_class_offset(lv, (S4464C3*), 0, "S4464C2");
    test_class_info(&lv, &cd_S4464C2);
    dp->~S4464C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4464C2(Test_S4464C2, "S4464C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4464C2C1Ev();
extern void _ZN7S4464C2D1Ev();
Name_Map name_map_S4464C2[] = {
  NSPAIR(_ZN7S4464C2C1Ev),
  NSPAIR(_ZN7S4464C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4464C3;
extern VTBL_ENTRY _ZTI7S4464C3[];
extern  VTBL_ENTRY _ZTV7S4464C3[];
static Base_Class bases_S4464C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4464C2[];
extern void _ZN7S4464C2D1Ev();
extern void _ZN7S4464C2D0Ev();
extern void _ZN7S4464C32v2Ev();
extern void _ZN7S4464C32v3Ev();
extern void _ZN7S4464C32v4Ev();
extern void _ZN7S4464C22v5Ev();
static  VTBL_ENTRY vtc_S4464C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4464C2[0]),
  (VTBL_ENTRY)&_ZN7S4464C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4464C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4464C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4464C2[];
extern  VTBL_ENTRY _ZTV7S4464C2[];
Class_Descriptor cd_S4464C2 = {  "S4464C2", // class name
  bases_S4464C2, 1,
  &(vtc_S4464C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4464C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4464C2),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  S4464C13_nt  {
  __tsi64 s4464c13f0;
  char s4464c13f1;
  void  mf4464c13(); // _ZN11S4464C13_nt9mf4464c13Ev
  virtual  ~S4464C13_nt(); // _ZN11S4464C13_ntD1Ev
  S4464C13_nt(); // tgen
};
//SIG(-1 S4464C13_nt) C1{ vd m FL Fc}


void  S4464C13_nt ::mf4464c13(){}
 S4464C13_nt ::~S4464C13_nt(){ note_dtor("S4464C13_nt", this);}
S4464C13_nt ::S4464C13_nt(){ note_ctor("S4464C13_nt", this);} // tgen

//skip512 S4464C13_nt

#else // __cplusplus

extern void _ZN11S4464C13_ntC1Ev();
extern void _ZN11S4464C13_ntD1Ev();
Name_Map name_map_S4464C13_nt[] = {
  NSPAIR(_ZN11S4464C13_ntC1Ev),
  NSPAIR(_ZN11S4464C13_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4464C13_nt[];
extern void _ZN11S4464C13_ntD1Ev();
extern void _ZN11S4464C13_ntD0Ev();
static  VTBL_ENTRY vtc_S4464C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4464C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S4464C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4464C13_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4464C13_nt[];
VTBL_ENTRY *P__ZTI11S4464C13_nt = _ZTI11S4464C13_nt; 
extern  VTBL_ENTRY _ZTV11S4464C13_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4464C12_nt  {
  ::S4464C13_nt s4464c12f0;
  ::S4464C13_nt s4464c12f1;
  void  mf4464c12(); // _ZN11S4464C12_nt9mf4464c12Ev
};
//SIG(-1 S4464C12_nt) C1{ m FC2{ vd m FL Fc} FC2}


void  S4464C12_nt ::mf4464c12(){}

//skip512 S4464C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4464C11  {
  ::S7368C9_nt s4464c11f0;
  ::S4464C12_nt s4464c11f1;
  ::S7368C9_nt s4464c11f2;
  ::S4464C12_nt s4464c11f3;
  int s4464c11f4[2];
  char s4464c11f5;
  void  mf4464c11(); // _ZN8S4464C119mf4464c11Ev
};
//SIG(-1 S4464C11) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ vd m FL Fc} FC5} FC2 FC4 Fi[2] Fc}


void  S4464C11 ::mf4464c11(){}

static void Test_S4464C11()
{
  {
    init_simple_test("S4464C11");
    S4464C11 lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S4464C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4464C11)");
    check_field_offset(lv, s4464c11f0, 0, "S4464C11.s4464c11f0");
    check_field_offset(lv, s4464c11f1, ABISELECT(16,12), "S4464C11.s4464c11f1");
    check_field_offset(lv, s4464c11f2, ABISELECT(64,44), "S4464C11.s4464c11f2");
    check_field_offset(lv, s4464c11f3, ABISELECT(80,56), "S4464C11.s4464c11f3");
    check_field_offset(lv, s4464c11f4, ABISELECT(128,88), "S4464C11.s4464c11f4");
    check_field_offset(lv, s4464c11f5, ABISELECT(136,96), "S4464C11.s4464c11f5");
  }
}
static Arrange_To_Call_Me vS4464C11(Test_S4464C11, "S4464C11", ABISELECT(144,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4464C15  {
  int s4464c15f0;
  __tsi64 s4464c15f1;
  ::S4464C12_nt s4464c15f2;
  char s4464c15f3[2];
  void  mf4464c15(); // _ZN8S4464C159mf4464c15Ev
};
//SIG(-1 S4464C15) C1{ m Fi FL FC2{ m FC3{ vd m FL Fc} FC3} Fc[2]}


void  S4464C15 ::mf4464c15(){}

static void Test_S4464C15()
{
  {
    init_simple_test("S4464C15");
    S4464C15 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4464C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4464C15)");
    check_field_offset(lv, s4464c15f0, 0, "S4464C15.s4464c15f0");
    check_field_offset(lv, s4464c15f1, ABISELECT(8,4), "S4464C15.s4464c15f1");
    check_field_offset(lv, s4464c15f2, ABISELECT(16,12), "S4464C15.s4464c15f2");
    check_field_offset(lv, s4464c15f3, ABISELECT(64,44), "S4464C15.s4464c15f3");
  }
}
static Arrange_To_Call_Me vS4464C15(Test_S4464C15, "S4464C15", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4464C14  {
  ::S7368C9_nt s4464c14f0;
  ::S7368C9_nt s4464c14f1;
  ::S4464C15 s4464c14f2;
  ::S7368C9_nt s4464c14f3;
  ::S4464C15 s4464c14f4;
  long s4464c14f5;
  ::S7368C9_nt s4464c14f6;
  long s4464c14f7;
  ::S7368C9_nt s4464c14f8;
  ::S7368C9_nt s4464c14f9;
  ::S7368C77 s4464c14f10;
  ::S7368C49 s4464c14f11;
  int s4464c14f12;
  void  mf4464c14(); // _ZN8S4464C149mf4464c14Ev
};
//SIG(-1 S4464C14) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m Fi FL FC5{ m FC6{ vd m FL Fc} FC6} Fc[2]} FC2 FC4 Fl FC2 Fl FC2 FC2 FC7{ m Fp Fi[2] FC8{ m}} FC9{ vd m FC10{ m Fp Fi[2] FC11{ m}}} Fi}


void  S4464C14 ::mf4464c14(){}

static void Test_S4464C14()
{
  {
    init_simple_test("S4464C14");
    S4464C14 lv;
    check2(sizeof(lv), ABISELECT(320,216), "sizeof(S4464C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4464C14)");
    check_field_offset(lv, s4464c14f0, 0, "S4464C14.s4464c14f0");
    check_field_offset(lv, s4464c14f1, ABISELECT(16,12), "S4464C14.s4464c14f1");
    check_field_offset(lv, s4464c14f2, ABISELECT(32,24), "S4464C14.s4464c14f2");
    check_field_offset(lv, s4464c14f3, ABISELECT(104,72), "S4464C14.s4464c14f3");
    check_field_offset(lv, s4464c14f4, ABISELECT(120,84), "S4464C14.s4464c14f4");
    check_field_offset(lv, s4464c14f5, ABISELECT(192,132), "S4464C14.s4464c14f5");
    check_field_offset(lv, s4464c14f6, ABISELECT(200,136), "S4464C14.s4464c14f6");
    check_field_offset(lv, s4464c14f7, ABISELECT(216,148), "S4464C14.s4464c14f7");
    check_field_offset(lv, s4464c14f8, ABISELECT(224,152), "S4464C14.s4464c14f8");
    check_field_offset(lv, s4464c14f9, ABISELECT(240,164), "S4464C14.s4464c14f9");
    check_field_offset(lv, s4464c14f10, ABISELECT(256,176), "S4464C14.s4464c14f10");
    check_field_offset(lv, s4464c14f11, ABISELECT(280,192), "S4464C14.s4464c14f11");
    check_field_offset(lv, s4464c14f12, ABISELECT(312,212), "S4464C14.s4464c14f12");
  }
}
static Arrange_To_Call_Me vS4464C14(Test_S4464C14, "S4464C14", ABISELECT(320,216));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4464C1  : S4464C2 {
  ::S7368C53 s4464c1f0;
  void *s4464c1f1;
  ::S4464C11 s4464c1f2;
  ::S4464C14 s4464c1f3;
  virtual  ~S4464C1(); // _ZN7S4464C1D1Ev
  virtual void  v1(); // _ZN7S4464C12v1Ev
  S4464C1(); // tgen
};
//SIG(1 S4464C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} FC7 FC9{ BC10{ vd m Fc} vd FL[2]} FC9 Fi Fc FC7} Fp FC11{ m FC7 FC12{ m FC13{ vd m FL Fc} FC13} FC7 FC12 Fi[2] Fc} FC14{ m FC7 FC7 FC15{ m Fi FL FC12 Fc[2]} FC7 FC15 Fl FC7 Fl FC7 FC7 FC16{ m Fp Fi[2] FC17{ m}} FC18{ vd m FC19{ m Fp Fi[2] FC20{ m}}} Fi}}


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

static void Test_S4464C1()
{
  extern Class_Descriptor cd_S4464C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(85,118)];
    init_test(&cd_S4464C1, buf);
    S4464C1 *dp, &lv = *(dp=new (buf) S4464C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,468), "sizeof(S4464C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4464C1)");
    check_base_class_offset(lv, (S4464C3*)(S4464C2*), 0, "S4464C1");
    check_base_class_offset(lv, (S4464C2*), 0, "S4464C1");
    check_field_offset(lv, s4464c1f0, ABISELECT(72,52), "S4464C1.s4464c1f0");
    check_field_offset(lv, s4464c1f1, ABISELECT(200,148), "S4464C1.s4464c1f1");
    check_field_offset(lv, s4464c1f2, ABISELECT(208,152), "S4464C1.s4464c1f2");
    check_field_offset(lv, s4464c1f3, ABISELECT(352,252), "S4464C1.s4464c1f3");
    test_class_info(&lv, &cd_S4464C1);
    dp->~S4464C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4464C1(Test_S4464C1, "S4464C1", ABISELECT(672,468));

#else // __cplusplus

extern void _ZN7S4464C1C1Ev();
extern void _ZN7S4464C1D1Ev();
Name_Map name_map_S4464C1[] = {
  NSPAIR(_ZN7S4464C1C1Ev),
  NSPAIR(_ZN7S4464C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4464C3;
extern VTBL_ENTRY _ZTI7S4464C3[];
extern  VTBL_ENTRY _ZTV7S4464C3[];
extern Class_Descriptor cd_S4464C2;
extern VTBL_ENTRY _ZTI7S4464C2[];
extern  VTBL_ENTRY _ZTV7S4464C2[];
static Base_Class bases_S4464C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4464C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4464C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4464C1[];
extern void _ZN7S4464C1D1Ev();
extern void _ZN7S4464C1D0Ev();
extern void _ZN7S4464C32v2Ev();
extern void _ZN7S4464C32v3Ev();
extern void _ZN7S4464C32v4Ev();
extern void _ZN7S4464C22v5Ev();
extern void _ZN7S4464C12v1Ev();
static  VTBL_ENTRY vtc_S4464C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4464C1[0]),
  (VTBL_ENTRY)&_ZN7S4464C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4464C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4464C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4464C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4464C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4464C1[];
extern  VTBL_ENTRY _ZTV7S4464C1[];
Class_Descriptor cd_S4464C1 = {  "S4464C1", // class name
  bases_S4464C1, 2,
  &(vtc_S4464C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,468), // object size
  NSPAIRA(_ZTI7S4464C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4464C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S730C4  : S7368C49 {
  void *s730c4f0;
  ::S10256C12_nt s730c4f1;
  virtual  ~S730C4(); // _ZN6S730C4D1Ev
  virtual void  v13(); // _ZN6S730C43v13Ev
  virtual void  v14(); // _ZN6S730C43v14Ev
  virtual void  v15(); // _ZN6S730C43v15Ev
  virtual void  v16(); // _ZN6S730C43v16Ev
  virtual void  v17(); // _ZN6S730C43v17Ev
  virtual void  v18(); // _ZN6S730C43v18Ev
  virtual void  v19(); // _ZN6S730C43v19Ev
  virtual void  v20(); // _ZN6S730C43v20Ev
  virtual void  v21(); // _ZN6S730C43v21Ev
  virtual void  v22(); // _ZN6S730C43v22Ev
  virtual void  v23(); // _ZN6S730C43v23Ev
  S730C4(); // tgen
};
//SIG(-1 S730C4) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S730C4 ::~S730C4(){ note_dtor("S730C4", this);}
void  S730C4 ::v13(){vfunc_called(this, "_ZN6S730C43v13Ev");}
void  S730C4 ::v14(){vfunc_called(this, "_ZN6S730C43v14Ev");}
void  S730C4 ::v15(){vfunc_called(this, "_ZN6S730C43v15Ev");}
void  S730C4 ::v16(){vfunc_called(this, "_ZN6S730C43v16Ev");}
void  S730C4 ::v17(){vfunc_called(this, "_ZN6S730C43v17Ev");}
void  S730C4 ::v18(){vfunc_called(this, "_ZN6S730C43v18Ev");}
void  S730C4 ::v19(){vfunc_called(this, "_ZN6S730C43v19Ev");}
void  S730C4 ::v20(){vfunc_called(this, "_ZN6S730C43v20Ev");}
void  S730C4 ::v21(){vfunc_called(this, "_ZN6S730C43v21Ev");}
void  S730C4 ::v22(){vfunc_called(this, "_ZN6S730C43v22Ev");}
void  S730C4 ::v23(){vfunc_called(this, "_ZN6S730C43v23Ev");}
S730C4 ::S730C4(){ note_ctor("S730C4", this);} // tgen

static void Test_S730C4()
{
  extern Class_Descriptor cd_S730C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S730C4, buf);
    S730C4 *dp, &lv = *(dp=new (buf) S730C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S730C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S730C4)");
    check_base_class_offset(lv, (S7368C49*), 0, "S730C4");
    check_field_offset(lv, s730c4f0, ABISELECT(32,20), "S730C4.s730c4f0");
    check_field_offset(lv, s730c4f1, ABISELECT(40,24), "S730C4.s730c4f1");
    test_class_info(&lv, &cd_S730C4);
    dp->~S730C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS730C4(Test_S730C4, "S730C4", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN6S730C4C1Ev();
extern void _ZN6S730C4D1Ev();
Name_Map name_map_S730C4[] = {
  NSPAIR(_ZN6S730C4C1Ev),
  NSPAIR(_ZN6S730C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S730C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S730C4[];
extern void _ZN6S730C4D1Ev();
extern void _ZN6S730C4D0Ev();
extern void _ZN6S730C43v13Ev();
extern void _ZN6S730C43v14Ev();
extern void _ZN6S730C43v15Ev();
extern void _ZN6S730C43v16Ev();
extern void _ZN6S730C43v17Ev();
extern void _ZN6S730C43v18Ev();
extern void _ZN6S730C43v19Ev();
extern void _ZN6S730C43v20Ev();
extern void _ZN6S730C43v21Ev();
extern void _ZN6S730C43v22Ev();
extern void _ZN6S730C43v23Ev();
static  VTBL_ENTRY vtc_S730C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S730C4[0]),
  (VTBL_ENTRY)&_ZN6S730C4D1Ev,
  (VTBL_ENTRY)&_ZN6S730C4D0Ev,
  (VTBL_ENTRY)&_ZN6S730C43v13Ev,
  (VTBL_ENTRY)&_ZN6S730C43v14Ev,
  (VTBL_ENTRY)&_ZN6S730C43v15Ev,
  (VTBL_ENTRY)&_ZN6S730C43v16Ev,
  (VTBL_ENTRY)&_ZN6S730C43v17Ev,
  (VTBL_ENTRY)&_ZN6S730C43v18Ev,
  (VTBL_ENTRY)&_ZN6S730C43v19Ev,
  (VTBL_ENTRY)&_ZN6S730C43v20Ev,
  (VTBL_ENTRY)&_ZN6S730C43v21Ev,
  (VTBL_ENTRY)&_ZN6S730C43v22Ev,
  (VTBL_ENTRY)&_ZN6S730C43v23Ev,
};
extern VTBL_ENTRY _ZTI6S730C4[];
extern  VTBL_ENTRY _ZTV6S730C4[];
Class_Descriptor cd_S730C4 = {  "S730C4", // class name
  bases_S730C4, 1,
  &(vtc_S730C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI6S730C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S730C4),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S730C3  : S730C4 {
  int s730c3f0;
  virtual  ~S730C3(); // _ZN6S730C3D1Ev
  virtual void  v24(); // _ZN6S730C33v24Ev
  virtual void  v25(); // _ZN6S730C33v25Ev
  virtual void  v26(); // _ZN6S730C33v26Ev
  virtual void  v27(); // _ZN6S730C33v27Ev
  virtual void  v28(); // _ZN6S730C33v28Ev
  virtual void  v29(); // _ZN6S730C33v29Ev
  virtual void  v30(); // _ZN6S730C33v30Ev
  virtual void  v31(); // _ZN6S730C33v31Ev
  virtual void  v32(); // _ZN6S730C33v32Ev
  virtual void  v33(); // _ZN6S730C33v33Ev
  virtual void  v34(); // _ZN6S730C33v34Ev
  virtual void  v35(); // _ZN6S730C33v35Ev
  virtual void  v36(); // _ZN6S730C33v36Ev
  virtual void  v37(); // _ZN6S730C33v37Ev
  virtual void  v38(); // _ZN6S730C33v38Ev
  virtual void  v39(); // _ZN6S730C33v39Ev
  virtual void  v40(); // _ZN6S730C33v40Ev
  virtual void  v41(); // _ZN6S730C33v41Ev
  virtual void  v42(); // _ZN6S730C33v42Ev
  S730C3(); // tgen
};
//SIG(-1 S730C3) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi}


 S730C3 ::~S730C3(){ note_dtor("S730C3", this);}
void  S730C3 ::v24(){vfunc_called(this, "_ZN6S730C33v24Ev");}
void  S730C3 ::v25(){vfunc_called(this, "_ZN6S730C33v25Ev");}
void  S730C3 ::v26(){vfunc_called(this, "_ZN6S730C33v26Ev");}
void  S730C3 ::v27(){vfunc_called(this, "_ZN6S730C33v27Ev");}
void  S730C3 ::v28(){vfunc_called(this, "_ZN6S730C33v28Ev");}
void  S730C3 ::v29(){vfunc_called(this, "_ZN6S730C33v29Ev");}
void  S730C3 ::v30(){vfunc_called(this, "_ZN6S730C33v30Ev");}
void  S730C3 ::v31(){vfunc_called(this, "_ZN6S730C33v31Ev");}
void  S730C3 ::v32(){vfunc_called(this, "_ZN6S730C33v32Ev");}
void  S730C3 ::v33(){vfunc_called(this, "_ZN6S730C33v33Ev");}
void  S730C3 ::v34(){vfunc_called(this, "_ZN6S730C33v34Ev");}
void  S730C3 ::v35(){vfunc_called(this, "_ZN6S730C33v35Ev");}
void  S730C3 ::v36(){vfunc_called(this, "_ZN6S730C33v36Ev");}
void  S730C3 ::v37(){vfunc_called(this, "_ZN6S730C33v37Ev");}
void  S730C3 ::v38(){vfunc_called(this, "_ZN6S730C33v38Ev");}
void  S730C3 ::v39(){vfunc_called(this, "_ZN6S730C33v39Ev");}
void  S730C3 ::v40(){vfunc_called(this, "_ZN6S730C33v40Ev");}
void  S730C3 ::v41(){vfunc_called(this, "_ZN6S730C33v41Ev");}
void  S730C3 ::v42(){vfunc_called(this, "_ZN6S730C33v42Ev");}
S730C3 ::S730C3(){ note_ctor("S730C3", this);} // tgen

static void Test_S730C3()
{
  extern Class_Descriptor cd_S730C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S730C3, buf);
    S730C3 *dp, &lv = *(dp=new (buf) S730C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S730C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S730C3)");
    check_base_class_offset(lv, (S7368C49*)(S730C4*), 0, "S730C3");
    check_base_class_offset(lv, (S730C4*), 0, "S730C3");
    check_field_offset(lv, s730c3f0, ABISELECT(96,64), "S730C3.s730c3f0");
    test_class_info(&lv, &cd_S730C3);
    dp->~S730C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS730C3(Test_S730C3, "S730C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN6S730C3C1Ev();
extern void _ZN6S730C3D1Ev();
Name_Map name_map_S730C3[] = {
  NSPAIR(_ZN6S730C3C1Ev),
  NSPAIR(_ZN6S730C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S730C4;
extern VTBL_ENTRY _ZTI6S730C4[];
extern  VTBL_ENTRY _ZTV6S730C4[];
static Base_Class bases_S730C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S730C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S730C3[];
extern void _ZN6S730C3D1Ev();
extern void _ZN6S730C3D0Ev();
extern void _ZN6S730C43v13Ev();
extern void _ZN6S730C43v14Ev();
extern void _ZN6S730C43v15Ev();
extern void _ZN6S730C43v16Ev();
extern void _ZN6S730C43v17Ev();
extern void _ZN6S730C43v18Ev();
extern void _ZN6S730C43v19Ev();
extern void _ZN6S730C43v20Ev();
extern void _ZN6S730C43v21Ev();
extern void _ZN6S730C43v22Ev();
extern void _ZN6S730C43v23Ev();
extern void _ZN6S730C33v24Ev();
extern void _ZN6S730C33v25Ev();
extern void _ZN6S730C33v26Ev();
extern void _ZN6S730C33v27Ev();
extern void _ZN6S730C33v28Ev();
extern void _ZN6S730C33v29Ev();
extern void _ZN6S730C33v30Ev();
extern void _ZN6S730C33v31Ev();
extern void _ZN6S730C33v32Ev();
extern void _ZN6S730C33v33Ev();
extern void _ZN6S730C33v34Ev();
extern void _ZN6S730C33v35Ev();
extern void _ZN6S730C33v36Ev();
extern void _ZN6S730C33v37Ev();
extern void _ZN6S730C33v38Ev();
extern void _ZN6S730C33v39Ev();
extern void _ZN6S730C33v40Ev();
extern void _ZN6S730C33v41Ev();
extern void _ZN6S730C33v42Ev();
static  VTBL_ENTRY vtc_S730C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S730C3[0]),
  (VTBL_ENTRY)&_ZN6S730C3D1Ev,
  (VTBL_ENTRY)&_ZN6S730C3D0Ev,
  (VTBL_ENTRY)&_ZN6S730C43v13Ev,
  (VTBL_ENTRY)&_ZN6S730C43v14Ev,
  (VTBL_ENTRY)&_ZN6S730C43v15Ev,
  (VTBL_ENTRY)&_ZN6S730C43v16Ev,
  (VTBL_ENTRY)&_ZN6S730C43v17Ev,
  (VTBL_ENTRY)&_ZN6S730C43v18Ev,
  (VTBL_ENTRY)&_ZN6S730C43v19Ev,
  (VTBL_ENTRY)&_ZN6S730C43v20Ev,
  (VTBL_ENTRY)&_ZN6S730C43v21Ev,
  (VTBL_ENTRY)&_ZN6S730C43v22Ev,
  (VTBL_ENTRY)&_ZN6S730C43v23Ev,
  (VTBL_ENTRY)&_ZN6S730C33v24Ev,
  (VTBL_ENTRY)&_ZN6S730C33v25Ev,
  (VTBL_ENTRY)&_ZN6S730C33v26Ev,
  (VTBL_ENTRY)&_ZN6S730C33v27Ev,
  (VTBL_ENTRY)&_ZN6S730C33v28Ev,
  (VTBL_ENTRY)&_ZN6S730C33v29Ev,
  (VTBL_ENTRY)&_ZN6S730C33v30Ev,
  (VTBL_ENTRY)&_ZN6S730C33v31Ev,
  (VTBL_ENTRY)&_ZN6S730C33v32Ev,
  (VTBL_ENTRY)&_ZN6S730C33v33Ev,
  (VTBL_ENTRY)&_ZN6S730C33v34Ev,
  (VTBL_ENTRY)&_ZN6S730C33v35Ev,
  (VTBL_ENTRY)&_ZN6S730C33v36Ev,
  (VTBL_ENTRY)&_ZN6S730C33v37Ev,
  (VTBL_ENTRY)&_ZN6S730C33v38Ev,
  (VTBL_ENTRY)&_ZN6S730C33v39Ev,
  (VTBL_ENTRY)&_ZN6S730C33v40Ev,
  (VTBL_ENTRY)&_ZN6S730C33v41Ev,
  (VTBL_ENTRY)&_ZN6S730C33v42Ev,
};
extern VTBL_ENTRY _ZTI6S730C3[];
extern  VTBL_ENTRY _ZTV6S730C3[];
Class_Descriptor cd_S730C3 = {  "S730C3", // class name
  bases_S730C3, 2,
  &(vtc_S730C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI6S730C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S730C3),34, //virtual function table var
  2, // 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  S730C2  : S730C3 {
  ::S7368C77 s730c2f0;
  virtual  ~S730C2(); // _ZN6S730C2D1Ev
  virtual void  v43(); // _ZN6S730C23v43Ev
  virtual void  v44(); // _ZN6S730C23v44Ev
  virtual void  v45(); // _ZN6S730C23v45Ev
  virtual void  v46(); // _ZN6S730C23v46Ev
  virtual void  v47(); // _ZN6S730C23v47Ev
  virtual void  v48(); // _ZN6S730C23v48Ev
  virtual void  v49(); // _ZN6S730C23v49Ev
  S730C2(); // tgen
};
//SIG(-1 S730C2) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} vd v1 v2 v3 v4 v5 v6 v7 FC8{ m Fp Fi[2] FC9{ m}}}


 S730C2 ::~S730C2(){ note_dtor("S730C2", this);}
void  S730C2 ::v43(){vfunc_called(this, "_ZN6S730C23v43Ev");}
void  S730C2 ::v44(){vfunc_called(this, "_ZN6S730C23v44Ev");}
void  S730C2 ::v45(){vfunc_called(this, "_ZN6S730C23v45Ev");}
void  S730C2 ::v46(){vfunc_called(this, "_ZN6S730C23v46Ev");}
void  S730C2 ::v47(){vfunc_called(this, "_ZN6S730C23v47Ev");}
void  S730C2 ::v48(){vfunc_called(this, "_ZN6S730C23v48Ev");}
void  S730C2 ::v49(){vfunc_called(this, "_ZN6S730C23v49Ev");}
S730C2 ::S730C2(){ note_ctor("S730C2", this);} // tgen

static void Test_S730C2()
{
  extern Class_Descriptor cd_S730C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S730C2, buf);
    S730C2 *dp, &lv = *(dp=new (buf) S730C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S730C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S730C2)");
    check_base_class_offset(lv, (S7368C49*)(S730C4*)(S730C3*), 0, "S730C2");
    check_base_class_offset(lv, (S730C4*)(S730C3*), 0, "S730C2");
    check_base_class_offset(lv, (S730C3*), 0, "S730C2");
    check_field_offset(lv, s730c2f0, ABISELECT(104,68), "S730C2.s730c2f0");
    test_class_info(&lv, &cd_S730C2);
    dp->~S730C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS730C2(Test_S730C2, "S730C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN6S730C2C1Ev();
extern void _ZN6S730C2D1Ev();
Name_Map name_map_S730C2[] = {
  NSPAIR(_ZN6S730C2C1Ev),
  NSPAIR(_ZN6S730C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S730C4;
extern VTBL_ENTRY _ZTI6S730C4[];
extern  VTBL_ENTRY _ZTV6S730C4[];
extern Class_Descriptor cd_S730C3;
extern VTBL_ENTRY _ZTI6S730C3[];
extern  VTBL_ENTRY _ZTV6S730C3[];
static Base_Class bases_S730C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S730C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S730C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S730C2[];
extern void _ZN6S730C2D1Ev();
extern void _ZN6S730C2D0Ev();
extern void _ZN6S730C43v13Ev();
extern void _ZN6S730C43v14Ev();
extern void _ZN6S730C43v15Ev();
extern void _ZN6S730C43v16Ev();
extern void _ZN6S730C43v17Ev();
extern void _ZN6S730C43v18Ev();
extern void _ZN6S730C43v19Ev();
extern void _ZN6S730C43v20Ev();
extern void _ZN6S730C43v21Ev();
extern void _ZN6S730C43v22Ev();
extern void _ZN6S730C43v23Ev();
extern void _ZN6S730C33v24Ev();
extern void _ZN6S730C33v25Ev();
extern void _ZN6S730C33v26Ev();
extern void _ZN6S730C33v27Ev();
extern void _ZN6S730C33v28Ev();
extern void _ZN6S730C33v29Ev();
extern void _ZN6S730C33v30Ev();
extern void _ZN6S730C33v31Ev();
extern void _ZN6S730C33v32Ev();
extern void _ZN6S730C33v33Ev();
extern void _ZN6S730C33v34Ev();
extern void _ZN6S730C33v35Ev();
extern void _ZN6S730C33v36Ev();
extern void _ZN6S730C33v37Ev();
extern void _ZN6S730C33v38Ev();
extern void _ZN6S730C33v39Ev();
extern void _ZN6S730C33v40Ev();
extern void _ZN6S730C33v41Ev();
extern void _ZN6S730C33v42Ev();
extern void _ZN6S730C23v43Ev();
extern void _ZN6S730C23v44Ev();
extern void _ZN6S730C23v45Ev();
extern void _ZN6S730C23v46Ev();
extern void _ZN6S730C23v47Ev();
extern void _ZN6S730C23v48Ev();
extern void _ZN6S730C23v49Ev();
static  VTBL_ENTRY vtc_S730C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S730C2[0]),
  (VTBL_ENTRY)&_ZN6S730C2D1Ev,
  (VTBL_ENTRY)&_ZN6S730C2D0Ev,
  (VTBL_ENTRY)&_ZN6S730C43v13Ev,
  (VTBL_ENTRY)&_ZN6S730C43v14Ev,
  (VTBL_ENTRY)&_ZN6S730C43v15Ev,
  (VTBL_ENTRY)&_ZN6S730C43v16Ev,
  (VTBL_ENTRY)&_ZN6S730C43v17Ev,
  (VTBL_ENTRY)&_ZN6S730C43v18Ev,
  (VTBL_ENTRY)&_ZN6S730C43v19Ev,
  (VTBL_ENTRY)&_ZN6S730C43v20Ev,
  (VTBL_ENTRY)&_ZN6S730C43v21Ev,
  (VTBL_ENTRY)&_ZN6S730C43v22Ev,
  (VTBL_ENTRY)&_ZN6S730C43v23Ev,
  (VTBL_ENTRY)&_ZN6S730C33v24Ev,
  (VTBL_ENTRY)&_ZN6S730C33v25Ev,
  (VTBL_ENTRY)&_ZN6S730C33v26Ev,
  (VTBL_ENTRY)&_ZN6S730C33v27Ev,
  (VTBL_ENTRY)&_ZN6S730C33v28Ev,
  (VTBL_ENTRY)&_ZN6S730C33v29Ev,
  (VTBL_ENTRY)&_ZN6S730C33v30Ev,
  (VTBL_ENTRY)&_ZN6S730C33v31Ev,
  (VTBL_ENTRY)&_ZN6S730C33v32Ev,
  (VTBL_ENTRY)&_ZN6S730C33v33Ev,
  (VTBL_ENTRY)&_ZN6S730C33v34Ev,
  (VTBL_ENTRY)&_ZN6S730C33v35Ev,
  (VTBL_ENTRY)&_ZN6S730C33v36Ev,
  (VTBL_ENTRY)&_ZN6S730C33v37Ev,
  (VTBL_ENTRY)&_ZN6S730C33v38Ev,
  (VTBL_ENTRY)&_ZN6S730C33v39Ev,
  (VTBL_ENTRY)&_ZN6S730C33v40Ev,
  (VTBL_ENTRY)&_ZN6S730C33v41Ev,
  (VTBL_ENTRY)&_ZN6S730C33v42Ev,
  (VTBL_ENTRY)&_ZN6S730C23v43Ev,
  (VTBL_ENTRY)&_ZN6S730C23v44Ev,
  (VTBL_ENTRY)&_ZN6S730C23v45Ev,
  (VTBL_ENTRY)&_ZN6S730C23v46Ev,
  (VTBL_ENTRY)&_ZN6S730C23v47Ev,
  (VTBL_ENTRY)&_ZN6S730C23v48Ev,
  (VTBL_ENTRY)&_ZN6S730C23v49Ev,
};
extern VTBL_ENTRY _ZTI6S730C2[];
extern  VTBL_ENTRY _ZTV6S730C2[];
Class_Descriptor cd_S730C2 = {  "S730C2", // class name
  bases_S730C2, 3,
  &(vtc_S730C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI6S730C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S730C2),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S730C11  {
  virtual  ~S730C11(); // _ZN7S730C11D1Ev
  virtual void  v50(); // _ZN7S730C113v50Ev
  S730C11(); // tgen
};
//SIG(-1 S730C11) C1{ vd v1}


 S730C11 ::~S730C11(){ note_dtor("S730C11", this);}
void  S730C11 ::v50(){vfunc_called(this, "_ZN7S730C113v50Ev");}
S730C11 ::S730C11(){ note_ctor("S730C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S730C11C1Ev();
extern void _ZN7S730C11D1Ev();
Name_Map name_map_S730C11[] = {
  NSPAIR(_ZN7S730C11C1Ev),
  NSPAIR(_ZN7S730C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S730C11[];
extern void _ZN7S730C11D1Ev();
extern void _ZN7S730C11D0Ev();
extern void _ZN7S730C113v50Ev();
static  VTBL_ENTRY vtc_S730C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S730C11[0]),
  (VTBL_ENTRY)&_ZN7S730C11D1Ev,
  (VTBL_ENTRY)&_ZN7S730C11D0Ev,
  (VTBL_ENTRY)&_ZN7S730C113v50Ev,
};
extern VTBL_ENTRY _ZTI7S730C11[];
extern  VTBL_ENTRY _ZTV7S730C11[];
Class_Descriptor cd_S730C11 = {  "S730C11", // class name
  0,0,//no base classes
  &(vtc_S730C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S730C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S730C11),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  S730C13  {
  int s730c13f0[4];
  void  mf730c13(); // _ZN7S730C138mf730c13Ev
  virtual  ~S730C13(); // _ZN7S730C13D1Ev
  S730C13(); // tgen
};
//SIG(-1 S730C13) C1{ vd m Fi[4]}


void  S730C13 ::mf730c13(){}
 S730C13 ::~S730C13(){ note_dtor("S730C13", this);}
S730C13 ::S730C13(){ note_ctor("S730C13", this);} // tgen

static void Test_S730C13()
{
  extern Class_Descriptor cd_S730C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S730C13, buf);
    S730C13 *dp, &lv = *(dp=new (buf) S730C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S730C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S730C13)");
    check_field_offset(lv, s730c13f0, ABISELECT(8,4), "S730C13.s730c13f0");
    test_class_info(&lv, &cd_S730C13);
    dp->~S730C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS730C13(Test_S730C13, "S730C13", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S730C13C1Ev();
extern void _ZN7S730C13D1Ev();
Name_Map name_map_S730C13[] = {
  NSPAIR(_ZN7S730C13C1Ev),
  NSPAIR(_ZN7S730C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S730C13[];
extern void _ZN7S730C13D1Ev();
extern void _ZN7S730C13D0Ev();
static  VTBL_ENTRY vtc_S730C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S730C13[0]),
  (VTBL_ENTRY)&_ZN7S730C13D1Ev,
  (VTBL_ENTRY)&_ZN7S730C13D0Ev,
};
extern VTBL_ENTRY _ZTI7S730C13[];
extern  VTBL_ENTRY _ZTV7S730C13[];
Class_Descriptor cd_S730C13 = {  "S730C13", // class name
  0,0,//no base classes
  &(vtc_S730C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S730C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S730C13),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  S730C1  : S730C2 , S730C11 {
  void *s730c1f0[8];
  ::S7368C18_nt s730c1f1;
  ::S730C13 s730c1f2;
  virtual  ~S730C1(); // _ZN6S730C1D1Ev
  virtual void  v1(); // _ZN6S730C12v1Ev
  virtual void  v2(); // _ZN6S730C12v2Ev
  virtual void  v3(); // _ZN6S730C12v3Ev
  virtual void  v4(); // _ZN6S730C12v4Ev
  virtual void  v5(); // _ZN6S730C12v5Ev
  virtual void  v6(); // _ZN6S730C12v6Ev
  virtual void  v7(); // _ZN6S730C12v7Ev
  virtual void  v8(); // _ZN6S730C12v8Ev
  virtual void  v9(); // _ZN6S730C12v9Ev
  virtual void  v10(); // _ZN6S730C13v10Ev
  virtual void  v11(); // _ZN6S730C13v11Ev
  virtual void  v12(); // _ZN6S730C13v12Ev
  S730C1(); // tgen
};
//SIG(1 S730C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 Fi} vd v43 v44 v45 v46 v47 v48 v49 FC9{ m Fp Fi[2] FC10{ m}}} BC11{ vd v50} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[8] FC12{ vd m Fp} FC13{ vd m Fi[4]}}


 S730C1 ::~S730C1(){ note_dtor("S730C1", this);}
void  S730C1 ::v1(){vfunc_called(this, "_ZN6S730C12v1Ev");}
void  S730C1 ::v2(){vfunc_called(this, "_ZN6S730C12v2Ev");}
void  S730C1 ::v3(){vfunc_called(this, "_ZN6S730C12v3Ev");}
void  S730C1 ::v4(){vfunc_called(this, "_ZN6S730C12v4Ev");}
void  S730C1 ::v5(){vfunc_called(this, "_ZN6S730C12v5Ev");}
void  S730C1 ::v6(){vfunc_called(this, "_ZN6S730C12v6Ev");}
void  S730C1 ::v7(){vfunc_called(this, "_ZN6S730C12v7Ev");}
void  S730C1 ::v8(){vfunc_called(this, "_ZN6S730C12v8Ev");}
void  S730C1 ::v9(){vfunc_called(this, "_ZN6S730C12v9Ev");}
void  S730C1 ::v10(){vfunc_called(this, "_ZN6S730C13v10Ev");}
void  S730C1 ::v11(){vfunc_called(this, "_ZN6S730C13v11Ev");}
void  S730C1 ::v12(){vfunc_called(this, "_ZN6S730C13v12Ev");}
S730C1 ::S730C1(){ note_ctor("S730C1", this);} // tgen

static void Test_S730C1()
{
  extern Class_Descriptor cd_S730C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,38)];
    init_test(&cd_S730C1, buf);
    S730C1 *dp, &lv = *(dp=new (buf) S730C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,148), "sizeof(S730C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S730C1)");
    check_base_class_offset(lv, (S7368C49*)(S730C4*)(S730C3*)(S730C2*), 0, "S730C1");
    check_base_class_offset(lv, (S730C4*)(S730C3*)(S730C2*), 0, "S730C1");
    check_base_class_offset(lv, (S730C3*)(S730C2*), 0, "S730C1");
    check_base_class_offset(lv, (S730C2*), 0, "S730C1");
    check_base_class_offset(lv, (S730C11*), ABISELECT(128,84), "S730C1");
    check_field_offset(lv, s730c1f0, ABISELECT(136,88), "S730C1.s730c1f0");
    check_field_offset(lv, s730c1f1, ABISELECT(200,120), "S730C1.s730c1f1");
    check_field_offset(lv, s730c1f2, ABISELECT(216,128), "S730C1.s730c1f2");
    test_class_info(&lv, &cd_S730C1);
    dp->~S730C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS730C1(Test_S730C1, "S730C1", ABISELECT(240,148));

#else // __cplusplus

extern void _ZN6S730C1C1Ev();
extern void _ZN6S730C1D1Ev();
Name_Map name_map_S730C1[] = {
  NSPAIR(_ZN6S730C1C1Ev),
  NSPAIR(_ZN6S730C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S730C4;
extern VTBL_ENTRY _ZTI6S730C4[];
extern  VTBL_ENTRY _ZTV6S730C4[];
extern Class_Descriptor cd_S730C3;
extern VTBL_ENTRY _ZTI6S730C3[];
extern  VTBL_ENTRY _ZTV6S730C3[];
extern Class_Descriptor cd_S730C2;
extern VTBL_ENTRY _ZTI6S730C2[];
extern  VTBL_ENTRY _ZTV6S730C2[];
extern Class_Descriptor cd_S730C11;
extern VTBL_ENTRY _ZTI7S730C11[];
extern  VTBL_ENTRY _ZTV7S730C11[];
static Base_Class bases_S730C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S730C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S730C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S730C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S730C11,    ABISELECT(128,84), //bcp->offset
    53, //bcp->virtual_function_table_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 _ZTI6S730C1[];
extern void _ZN6S730C1D1Ev();
extern void _ZN6S730C1D0Ev();
extern void _ZN6S730C43v13Ev();
extern void _ZN6S730C43v14Ev();
extern void _ZN6S730C43v15Ev();
extern void _ZN6S730C43v16Ev();
extern void _ZN6S730C43v17Ev();
extern void _ZN6S730C43v18Ev();
extern void _ZN6S730C43v19Ev();
extern void _ZN6S730C43v20Ev();
extern void _ZN6S730C43v21Ev();
extern void _ZN6S730C43v22Ev();
extern void _ZN6S730C43v23Ev();
extern void _ZN6S730C33v24Ev();
extern void _ZN6S730C33v25Ev();
extern void _ZN6S730C33v26Ev();
extern void _ZN6S730C33v27Ev();
extern void _ZN6S730C33v28Ev();
extern void _ZN6S730C33v29Ev();
extern void _ZN6S730C33v30Ev();
extern void _ZN6S730C33v31Ev();
extern void _ZN6S730C33v32Ev();
extern void _ZN6S730C33v33Ev();
extern void _ZN6S730C33v34Ev();
extern void _ZN6S730C33v35Ev();
extern void _ZN6S730C33v36Ev();
extern void _ZN6S730C33v37Ev();
extern void _ZN6S730C33v38Ev();
extern void _ZN6S730C33v39Ev();
extern void _ZN6S730C33v40Ev();
extern void _ZN6S730C33v41Ev();
extern void _ZN6S730C33v42Ev();
extern void _ZN6S730C23v43Ev();
extern void _ZN6S730C23v44Ev();
extern void _ZN6S730C23v45Ev();
extern void _ZN6S730C23v46Ev();
extern void _ZN6S730C23v47Ev();
extern void _ZN6S730C23v48Ev();
extern void _ZN6S730C23v49Ev();
extern void _ZN6S730C12v1Ev();
extern void _ZN6S730C12v2Ev();
extern void _ZN6S730C12v3Ev();
extern void _ZN6S730C12v4Ev();
extern void _ZN6S730C12v5Ev();
extern void _ZN6S730C12v6Ev();
extern void _ZN6S730C12v7Ev();
extern void _ZN6S730C12v8Ev();
extern void _ZN6S730C12v9Ev();
extern void _ZN6S730C13v10Ev();
extern void _ZN6S730C13v11Ev();
extern void _ZN6S730C13v12Ev();
extern void ABISELECT(_ZThn128_N6S730C1D1Ev,_ZThn84_N6S730C1D1Ev)();
extern void ABISELECT(_ZThn128_N6S730C1D0Ev,_ZThn84_N6S730C1D0Ev)();
extern void _ZN7S730C113v50Ev();
static  VTBL_ENTRY vtc_S730C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S730C1[0]),
  (VTBL_ENTRY)&_ZN6S730C1D1Ev,
  (VTBL_ENTRY)&_ZN6S730C1D0Ev,
  (VTBL_ENTRY)&_ZN6S730C43v13Ev,
  (VTBL_ENTRY)&_ZN6S730C43v14Ev,
  (VTBL_ENTRY)&_ZN6S730C43v15Ev,
  (VTBL_ENTRY)&_ZN6S730C43v16Ev,
  (VTBL_ENTRY)&_ZN6S730C43v17Ev,
  (VTBL_ENTRY)&_ZN6S730C43v18Ev,
  (VTBL_ENTRY)&_ZN6S730C43v19Ev,
  (VTBL_ENTRY)&_ZN6S730C43v20Ev,
  (VTBL_ENTRY)&_ZN6S730C43v21Ev,
  (VTBL_ENTRY)&_ZN6S730C43v22Ev,
  (VTBL_ENTRY)&_ZN6S730C43v23Ev,
  (VTBL_ENTRY)&_ZN6S730C33v24Ev,
  (VTBL_ENTRY)&_ZN6S730C33v25Ev,
  (VTBL_ENTRY)&_ZN6S730C33v26Ev,
  (VTBL_ENTRY)&_ZN6S730C33v27Ev,
  (VTBL_ENTRY)&_ZN6S730C33v28Ev,
  (VTBL_ENTRY)&_ZN6S730C33v29Ev,
  (VTBL_ENTRY)&_ZN6S730C33v30Ev,
  (VTBL_ENTRY)&_ZN6S730C33v31Ev,
  (VTBL_ENTRY)&_ZN6S730C33v32Ev,
  (VTBL_ENTRY)&_ZN6S730C33v33Ev,
  (VTBL_ENTRY)&_ZN6S730C33v34Ev,
  (VTBL_ENTRY)&_ZN6S730C33v35Ev,
  (VTBL_ENTRY)&_ZN6S730C33v36Ev,
  (VTBL_ENTRY)&_ZN6S730C33v37Ev,
  (VTBL_ENTRY)&_ZN6S730C33v38Ev,
  (VTBL_ENTRY)&_ZN6S730C33v39Ev,
  (VTBL_ENTRY)&_ZN6S730C33v40Ev,
  (VTBL_ENTRY)&_ZN6S730C33v41Ev,
  (VTBL_ENTRY)&_ZN6S730C33v42Ev,
  (VTBL_ENTRY)&_ZN6S730C23v43Ev,
  (VTBL_ENTRY)&_ZN6S730C23v44Ev,
  (VTBL_ENTRY)&_ZN6S730C23v45Ev,
  (VTBL_ENTRY)&_ZN6S730C23v46Ev,
  (VTBL_ENTRY)&_ZN6S730C23v47Ev,
  (VTBL_ENTRY)&_ZN6S730C23v48Ev,
  (VTBL_ENTRY)&_ZN6S730C23v49Ev,
  (VTBL_ENTRY)&_ZN6S730C12v1Ev,
  (VTBL_ENTRY)&_ZN6S730C12v2Ev,
  (VTBL_ENTRY)&_ZN6S730C12v3Ev,
  (VTBL_ENTRY)&_ZN6S730C12v4Ev,
  (VTBL_ENTRY)&_ZN6S730C12v5Ev,
  (VTBL_ENTRY)&_ZN6S730C12v6Ev,
  (VTBL_ENTRY)&_ZN6S730C12v7Ev,
  (VTBL_ENTRY)&_ZN6S730C12v8Ev,
  (VTBL_ENTRY)&_ZN6S730C12v9Ev,
  (VTBL_ENTRY)&_ZN6S730C13v10Ev,
  (VTBL_ENTRY)&_ZN6S730C13v11Ev,
  (VTBL_ENTRY)&_ZN6S730C13v12Ev,
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI6S730C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N6S730C1D1Ev,_ZThn84_N6S730C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N6S730C1D0Ev,_ZThn84_N6S730C1D0Ev),
  (VTBL_ENTRY)&_ZN7S730C113v50Ev,
};
extern VTBL_ENTRY _ZTI6S730C1[];
extern  VTBL_ENTRY _ZTV6S730C1[];
Class_Descriptor cd_S730C1 = {  "S730C1", // class name
  bases_S730C1, 5,
  &(vtc_S730C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,148), // object size
  NSPAIRA(_ZTI6S730C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S730C1),58, //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  S752C4  : S1686C4_nt {
  virtual void  v4(); // _ZN6S752C42v4Ev
  virtual void  v5(); // _ZN6S752C42v5Ev
  virtual void  v6(); // _ZN6S752C42v6Ev
  virtual void  v7(); // _ZN6S752C42v7Ev
  virtual void  v8(); // _ZN6S752C42v8Ev
  ~S752C4(); // tgen
  S752C4(); // tgen
};
//SIG(-1 S752C4) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S752C4 ::v4(){vfunc_called(this, "_ZN6S752C42v4Ev");}
void  S752C4 ::v5(){vfunc_called(this, "_ZN6S752C42v5Ev");}
void  S752C4 ::v6(){vfunc_called(this, "_ZN6S752C42v6Ev");}
void  S752C4 ::v7(){vfunc_called(this, "_ZN6S752C42v7Ev");}
void  S752C4 ::v8(){vfunc_called(this, "_ZN6S752C42v8Ev");}
S752C4 ::~S752C4(){ note_dtor("S752C4", this);} // tgen
S752C4 ::S752C4(){ note_ctor("S752C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S752C4C1Ev();
extern void _ZN6S752C4D1Ev();
Name_Map name_map_S752C4[] = {
  NSPAIR(_ZN6S752C4C1Ev),
  NSPAIR(_ZN6S752C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
static Base_Class bases_S752C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S752C4[];
extern void _ZN6S752C4D1Ev();
extern void _ZN6S752C4D0Ev();
extern void _ZN6S752C42v4Ev();
extern void _ZN6S752C42v5Ev();
extern void _ZN6S752C42v6Ev();
extern void _ZN6S752C42v7Ev();
extern void _ZN6S752C42v8Ev();
static  VTBL_ENTRY vtc_S752C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S752C4[0]),
  (VTBL_ENTRY)&_ZN6S752C4D1Ev,
  (VTBL_ENTRY)&_ZN6S752C4D0Ev,
  (VTBL_ENTRY)&_ZN6S752C42v4Ev,
  (VTBL_ENTRY)&_ZN6S752C42v5Ev,
  (VTBL_ENTRY)&_ZN6S752C42v6Ev,
  (VTBL_ENTRY)&_ZN6S752C42v7Ev,
  (VTBL_ENTRY)&_ZN6S752C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S752C4[];
extern  VTBL_ENTRY _ZTV6S752C4[];
Class_Descriptor cd_S752C4 = {  "S752C4", // class name
  bases_S752C4, 1,
  &(vtc_S752C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S752C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S752C4),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  S752C3  : S752C4 {
  void *s752c3f0[3];
  ::S1686C5_nt s752c3f1;
  virtual void  v9(); // _ZN6S752C32v9Ev
  virtual void  v10(); // _ZN6S752C33v10Ev
  virtual void  v11(); // _ZN6S752C33v11Ev
  virtual void  v12(); // _ZN6S752C33v12Ev
  virtual void  v13(); // _ZN6S752C33v13Ev
  virtual void  v14(); // _ZN6S752C33v14Ev
  virtual void  v15(); // _ZN6S752C33v15Ev
  virtual void  v16(); // _ZN6S752C33v16Ev
  virtual void  v17(); // _ZN6S752C33v17Ev
  virtual void  v18(); // _ZN6S752C33v18Ev
  virtual void  v19(); // _ZN6S752C33v19Ev
  ~S752C3(); // tgen
  S752C3(); // tgen
};
//SIG(-1 S752C3) 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  S752C3 ::v9(){vfunc_called(this, "_ZN6S752C32v9Ev");}
void  S752C3 ::v10(){vfunc_called(this, "_ZN6S752C33v10Ev");}
void  S752C3 ::v11(){vfunc_called(this, "_ZN6S752C33v11Ev");}
void  S752C3 ::v12(){vfunc_called(this, "_ZN6S752C33v12Ev");}
void  S752C3 ::v13(){vfunc_called(this, "_ZN6S752C33v13Ev");}
void  S752C3 ::v14(){vfunc_called(this, "_ZN6S752C33v14Ev");}
void  S752C3 ::v15(){vfunc_called(this, "_ZN6S752C33v15Ev");}
void  S752C3 ::v16(){vfunc_called(this, "_ZN6S752C33v16Ev");}
void  S752C3 ::v17(){vfunc_called(this, "_ZN6S752C33v17Ev");}
void  S752C3 ::v18(){vfunc_called(this, "_ZN6S752C33v18Ev");}
void  S752C3 ::v19(){vfunc_called(this, "_ZN6S752C33v19Ev");}
S752C3 ::~S752C3(){ note_dtor("S752C3", this);} // tgen
S752C3 ::S752C3(){ note_ctor("S752C3", this);} // tgen

static void Test_S752C3()
{
  extern Class_Descriptor cd_S752C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S752C3, buf);
    S752C3 *dp, &lv = *(dp=new (buf) S752C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S752C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S752C3)");
    check_base_class_offset(lv, (S1686C4_nt*)(S752C4*), 0, "S752C3");
    check_base_class_offset(lv, (S752C4*), 0, "S752C3");
    check_field_offset(lv, s752c3f0, ABISELECT(16,8), "S752C3.s752c3f0");
    check_field_offset(lv, s752c3f1, ABISELECT(40,20), "S752C3.s752c3f1");
    test_class_info(&lv, &cd_S752C3);
    dp->~S752C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS752C3(Test_S752C3, "S752C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN6S752C3C1Ev();
extern void _ZN6S752C3D1Ev();
Name_Map name_map_S752C3[] = {
  NSPAIR(_ZN6S752C3C1Ev),
  NSPAIR(_ZN6S752C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S752C4;
extern VTBL_ENTRY _ZTI6S752C4[];
extern  VTBL_ENTRY _ZTV6S752C4[];
static Base_Class bases_S752C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S752C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S752C3[];
extern void _ZN6S752C3D1Ev();
extern void _ZN6S752C3D0Ev();
extern void _ZN6S752C42v4Ev();
extern void _ZN6S752C42v5Ev();
extern void _ZN6S752C42v6Ev();
extern void _ZN6S752C42v7Ev();
extern void _ZN6S752C42v8Ev();
extern void _ZN6S752C32v9Ev();
extern void _ZN6S752C33v10Ev();
extern void _ZN6S752C33v11Ev();
extern void _ZN6S752C33v12Ev();
extern void _ZN6S752C33v13Ev();
extern void _ZN6S752C33v14Ev();
extern void _ZN6S752C33v15Ev();
extern void _ZN6S752C33v16Ev();
extern void _ZN6S752C33v17Ev();
extern void _ZN6S752C33v18Ev();
extern void _ZN6S752C33v19Ev();
static  VTBL_ENTRY vtc_S752C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S752C3[0]),
  (VTBL_ENTRY)&_ZN6S752C3D1Ev,
  (VTBL_ENTRY)&_ZN6S752C3D0Ev,
  (VTBL_ENTRY)&_ZN6S752C42v4Ev,
  (VTBL_ENTRY)&_ZN6S752C42v5Ev,
  (VTBL_ENTRY)&_ZN6S752C42v6Ev,
  (VTBL_ENTRY)&_ZN6S752C42v7Ev,
  (VTBL_ENTRY)&_ZN6S752C42v8Ev,
  (VTBL_ENTRY)&_ZN6S752C32v9Ev,
  (VTBL_ENTRY)&_ZN6S752C33v10Ev,
  (VTBL_ENTRY)&_ZN6S752C33v11Ev,
  (VTBL_ENTRY)&_ZN6S752C33v12Ev,
  (VTBL_ENTRY)&_ZN6S752C33v13Ev,
  (VTBL_ENTRY)&_ZN6S752C33v14Ev,
  (VTBL_ENTRY)&_ZN6S752C33v15Ev,
  (VTBL_ENTRY)&_ZN6S752C33v16Ev,
  (VTBL_ENTRY)&_ZN6S752C33v17Ev,
  (VTBL_ENTRY)&_ZN6S752C33v18Ev,
  (VTBL_ENTRY)&_ZN6S752C33v19Ev,
};
extern VTBL_ENTRY _ZTI6S752C3[];
extern  VTBL_ENTRY _ZTV6S752C3[];
Class_Descriptor cd_S752C3 = {  "S752C3", // class name
  bases_S752C3, 2,
  &(vtc_S752C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI6S752C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S752C3),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  S752C2  : S752C3 {
  ::S1686C5_nt s752c2f0;
  ::S753C9_nt s752c2f1;
  void *s752c2f2[3];
  virtual void  v20(); // _ZN6S752C23v20Ev
  virtual void  v21(); // _ZN6S752C23v21Ev
  virtual void  v22(); // _ZN6S752C23v22Ev
  virtual void  v23(); // _ZN6S752C23v23Ev
  virtual void  v24(); // _ZN6S752C23v24Ev
  virtual void  v25(); // _ZN6S752C23v25Ev
  virtual void  v26(); // _ZN6S752C23v26Ev
  virtual void  v27(); // _ZN6S752C23v27Ev
  ~S752C2(); // tgen
  S752C2(); // tgen
};
//SIG(-1 S752C2) 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  S752C2 ::v20(){vfunc_called(this, "_ZN6S752C23v20Ev");}
void  S752C2 ::v21(){vfunc_called(this, "_ZN6S752C23v21Ev");}
void  S752C2 ::v22(){vfunc_called(this, "_ZN6S752C23v22Ev");}
void  S752C2 ::v23(){vfunc_called(this, "_ZN6S752C23v23Ev");}
void  S752C2 ::v24(){vfunc_called(this, "_ZN6S752C23v24Ev");}
void  S752C2 ::v25(){vfunc_called(this, "_ZN6S752C23v25Ev");}
void  S752C2 ::v26(){vfunc_called(this, "_ZN6S752C23v26Ev");}
void  S752C2 ::v27(){vfunc_called(this, "_ZN6S752C23v27Ev");}
S752C2 ::~S752C2(){ note_dtor("S752C2", this);} // tgen
S752C2 ::S752C2(){ note_ctor("S752C2", this);} // tgen

static void Test_S752C2()
{
  extern Class_Descriptor cd_S752C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S752C2, buf);
    S752C2 *dp, &lv = *(dp=new (buf) S752C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S752C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S752C2)");
    check_base_class_offset(lv, (S1686C4_nt*)(S752C4*)(S752C3*), 0, "S752C2");
    check_base_class_offset(lv, (S752C4*)(S752C3*), 0, "S752C2");
    check_base_class_offset(lv, (S752C3*), 0, "S752C2");
    check_field_offset(lv, s752c2f0, ABISELECT(80,44), "S752C2.s752c2f0");
    check_field_offset(lv, s752c2f1, ABISELECT(120,68), "S752C2.s752c2f1");
    check_field_offset(lv, s752c2f2, ABISELECT(128,72), "S752C2.s752c2f2");
    test_class_info(&lv, &cd_S752C2);
    dp->~S752C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS752C2(Test_S752C2, "S752C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN6S752C2C1Ev();
extern void _ZN6S752C2D1Ev();
Name_Map name_map_S752C2[] = {
  NSPAIR(_ZN6S752C2C1Ev),
  NSPAIR(_ZN6S752C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S752C4;
extern VTBL_ENTRY _ZTI6S752C4[];
extern  VTBL_ENTRY _ZTV6S752C4[];
extern Class_Descriptor cd_S752C3;
extern VTBL_ENTRY _ZTI6S752C3[];
extern  VTBL_ENTRY _ZTV6S752C3[];
static Base_Class bases_S752C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S752C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S752C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S752C2[];
extern void _ZN6S752C2D1Ev();
extern void _ZN6S752C2D0Ev();
extern void _ZN6S752C42v4Ev();
extern void _ZN6S752C42v5Ev();
extern void _ZN6S752C42v6Ev();
extern void _ZN6S752C42v7Ev();
extern void _ZN6S752C42v8Ev();
extern void _ZN6S752C32v9Ev();
extern void _ZN6S752C33v10Ev();
extern void _ZN6S752C33v11Ev();
extern void _ZN6S752C33v12Ev();
extern void _ZN6S752C33v13Ev();
extern void _ZN6S752C33v14Ev();
extern void _ZN6S752C33v15Ev();
extern void _ZN6S752C33v16Ev();
extern void _ZN6S752C33v17Ev();
extern void _ZN6S752C33v18Ev();
extern void _ZN6S752C33v19Ev();
extern void _ZN6S752C23v20Ev();
extern void _ZN6S752C23v21Ev();
extern void _ZN6S752C23v22Ev();
extern void _ZN6S752C23v23Ev();
extern void _ZN6S752C23v24Ev();
extern void _ZN6S752C23v25Ev();
extern void _ZN6S752C23v26Ev();
extern void _ZN6S752C23v27Ev();
static  VTBL_ENTRY vtc_S752C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S752C2[0]),
  (VTBL_ENTRY)&_ZN6S752C2D1Ev,
  (VTBL_ENTRY)&_ZN6S752C2D0Ev,
  (VTBL_ENTRY)&_ZN6S752C42v4Ev,
  (VTBL_ENTRY)&_ZN6S752C42v5Ev,
  (VTBL_ENTRY)&_ZN6S752C42v6Ev,
  (VTBL_ENTRY)&_ZN6S752C42v7Ev,
  (VTBL_ENTRY)&_ZN6S752C42v8Ev,
  (VTBL_ENTRY)&_ZN6S752C32v9Ev,
  (VTBL_ENTRY)&_ZN6S752C33v10Ev,
  (VTBL_ENTRY)&_ZN6S752C33v11Ev,
  (VTBL_ENTRY)&_ZN6S752C33v12Ev,
  (VTBL_ENTRY)&_ZN6S752C33v13Ev,
  (VTBL_ENTRY)&_ZN6S752C33v14Ev,
  (VTBL_ENTRY)&_ZN6S752C33v15Ev,
  (VTBL_ENTRY)&_ZN6S752C33v16Ev,
  (VTBL_ENTRY)&_ZN6S752C33v17Ev,
  (VTBL_ENTRY)&_ZN6S752C33v18Ev,
  (VTBL_ENTRY)&_ZN6S752C33v19Ev,
  (VTBL_ENTRY)&_ZN6S752C23v20Ev,
  (VTBL_ENTRY)&_ZN6S752C23v21Ev,
  (VTBL_ENTRY)&_ZN6S752C23v22Ev,
  (VTBL_ENTRY)&_ZN6S752C23v23Ev,
  (VTBL_ENTRY)&_ZN6S752C23v24Ev,
  (VTBL_ENTRY)&_ZN6S752C23v25Ev,
  (VTBL_ENTRY)&_ZN6S752C23v26Ev,
  (VTBL_ENTRY)&_ZN6S752C23v27Ev,
};
extern VTBL_ENTRY _ZTI6S752C2[];
extern  VTBL_ENTRY _ZTV6S752C2[];
Class_Descriptor cd_S752C2 = {  "S752C2", // class name
  bases_S752C2, 3,
  &(vtc_S752C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI6S752C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S752C2),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  S752C1  : S752C2 , S7368C49 {
  ::S7368C34 s752c1f0;
  void *s752c1f1;
  virtual  ~S752C1(); // _ZN6S752C1D1Ev
  virtual void  v1(); // _ZN6S752C12v1Ev
  virtual void  v2(); // _ZN6S752C12v2Ev
  virtual void  v3(); // _ZN6S752C12v3Ev
  S752C1(); // tgen
};
//SIG(1 S752C1) 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 m FC11{ m Fp Fi[2] FC12{ m}}} vd v1 v2 v3 FC13{ BC14{ vd m Fc} vd FC15{ BC14 vd FL} Fi FC16{ vd m FC17{ m Fp Fi FC18{ m}} FC19{ BC14 vd FL[2]}} FC16 Fi FC17 FC17 Fi FC16 FC16} Fp}


 S752C1 ::~S752C1(){ note_dtor("S752C1", this);}
void  S752C1 ::v1(){vfunc_called(this, "_ZN6S752C12v1Ev");}
void  S752C1 ::v2(){vfunc_called(this, "_ZN6S752C12v2Ev");}
void  S752C1 ::v3(){vfunc_called(this, "_ZN6S752C12v3Ev");}
S752C1 ::S752C1(){ note_ctor("S752C1", this);} // tgen

static void Test_S752C1()
{
  extern Class_Descriptor cd_S752C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(65,83)];
    init_test(&cd_S752C1, buf);
    S752C1 *dp, &lv = *(dp=new (buf) S752C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,328), "sizeof(S752C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S752C1)");
    check_base_class_offset(lv, (S1686C4_nt*)(S752C4*)(S752C3*)(S752C2*), 0, "S752C1");
    check_base_class_offset(lv, (S752C4*)(S752C3*)(S752C2*), 0, "S752C1");
    check_base_class_offset(lv, (S752C3*)(S752C2*), 0, "S752C1");
    check_base_class_offset(lv, (S752C2*), 0, "S752C1");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(152,84), "S752C1");
    check_field_offset(lv, s752c1f0, ABISELECT(184,104), "S752C1.s752c1f0");
    check_field_offset(lv, s752c1f1, ABISELECT(504,324), "S752C1.s752c1f1");
    test_class_info(&lv, &cd_S752C1);
    dp->~S752C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS752C1(Test_S752C1, "S752C1", ABISELECT(512,328));

#else // __cplusplus

extern void _ZN6S752C1C1Ev();
extern void _ZN6S752C1D1Ev();
Name_Map name_map_S752C1[] = {
  NSPAIR(_ZN6S752C1C1Ev),
  NSPAIR(_ZN6S752C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1686C4_nt;
extern VTBL_ENTRY _ZTI10S1686C4_nt[];
extern  VTBL_ENTRY _ZTV10S1686C4_nt[];
extern Class_Descriptor cd_S752C4;
extern VTBL_ENTRY _ZTI6S752C4[];
extern  VTBL_ENTRY _ZTV6S752C4[];
extern Class_Descriptor cd_S752C3;
extern VTBL_ENTRY _ZTI6S752C3[];
extern  VTBL_ENTRY _ZTV6S752C3[];
extern Class_Descriptor cd_S752C2;
extern VTBL_ENTRY _ZTI6S752C2[];
extern  VTBL_ENTRY _ZTV6S752C2[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S752C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1686C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S752C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S752C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S752C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7368C49,    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 _ZTI6S752C1[];
extern void _ZN6S752C1D1Ev();
extern void _ZN6S752C1D0Ev();
extern void _ZN6S752C42v4Ev();
extern void _ZN6S752C42v5Ev();
extern void _ZN6S752C42v6Ev();
extern void _ZN6S752C42v7Ev();
extern void _ZN6S752C42v8Ev();
extern void _ZN6S752C32v9Ev();
extern void _ZN6S752C33v10Ev();
extern void _ZN6S752C33v11Ev();
extern void _ZN6S752C33v12Ev();
extern void _ZN6S752C33v13Ev();
extern void _ZN6S752C33v14Ev();
extern void _ZN6S752C33v15Ev();
extern void _ZN6S752C33v16Ev();
extern void _ZN6S752C33v17Ev();
extern void _ZN6S752C33v18Ev();
extern void _ZN6S752C33v19Ev();
extern void _ZN6S752C23v20Ev();
extern void _ZN6S752C23v21Ev();
extern void _ZN6S752C23v22Ev();
extern void _ZN6S752C23v23Ev();
extern void _ZN6S752C23v24Ev();
extern void _ZN6S752C23v25Ev();
extern void _ZN6S752C23v26Ev();
extern void _ZN6S752C23v27Ev();
extern void _ZN6S752C12v1Ev();
extern void _ZN6S752C12v2Ev();
extern void _ZN6S752C12v3Ev();
extern void ABISELECT(_ZThn152_N6S752C1D1Ev,_ZThn84_N6S752C1D1Ev)();
extern void ABISELECT(_ZThn152_N6S752C1D0Ev,_ZThn84_N6S752C1D0Ev)();
static  VTBL_ENTRY vtc_S752C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S752C1[0]),
  (VTBL_ENTRY)&_ZN6S752C1D1Ev,
  (VTBL_ENTRY)&_ZN6S752C1D0Ev,
  (VTBL_ENTRY)&_ZN6S752C42v4Ev,
  (VTBL_ENTRY)&_ZN6S752C42v5Ev,
  (VTBL_ENTRY)&_ZN6S752C42v6Ev,
  (VTBL_ENTRY)&_ZN6S752C42v7Ev,
  (VTBL_ENTRY)&_ZN6S752C42v8Ev,
  (VTBL_ENTRY)&_ZN6S752C32v9Ev,
  (VTBL_ENTRY)&_ZN6S752C33v10Ev,
  (VTBL_ENTRY)&_ZN6S752C33v11Ev,
  (VTBL_ENTRY)&_ZN6S752C33v12Ev,
  (VTBL_ENTRY)&_ZN6S752C33v13Ev,
  (VTBL_ENTRY)&_ZN6S752C33v14Ev,
  (VTBL_ENTRY)&_ZN6S752C33v15Ev,
  (VTBL_ENTRY)&_ZN6S752C33v16Ev,
  (VTBL_ENTRY)&_ZN6S752C33v17Ev,
  (VTBL_ENTRY)&_ZN6S752C33v18Ev,
  (VTBL_ENTRY)&_ZN6S752C33v19Ev,
  (VTBL_ENTRY)&_ZN6S752C23v20Ev,
  (VTBL_ENTRY)&_ZN6S752C23v21Ev,
  (VTBL_ENTRY)&_ZN6S752C23v22Ev,
  (VTBL_ENTRY)&_ZN6S752C23v23Ev,
  (VTBL_ENTRY)&_ZN6S752C23v24Ev,
  (VTBL_ENTRY)&_ZN6S752C23v25Ev,
  (VTBL_ENTRY)&_ZN6S752C23v26Ev,
  (VTBL_ENTRY)&_ZN6S752C23v27Ev,
  (VTBL_ENTRY)&_ZN6S752C12v1Ev,
  (VTBL_ENTRY)&_ZN6S752C12v2Ev,
  (VTBL_ENTRY)&_ZN6S752C12v3Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI6S752C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S752C1D1Ev,_ZThn84_N6S752C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N6S752C1D0Ev,_ZThn84_N6S752C1D0Ev),
};
extern VTBL_ENTRY _ZTI6S752C1[];
extern  VTBL_ENTRY _ZTV6S752C1[];
Class_Descriptor cd_S752C1 = {  "S752C1", // class name
  bases_S752C1, 5,
  &(vtc_S752C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(512,328), // object size
  NSPAIRA(_ZTI6S752C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S752C1),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  S726C4  : S7368C49 {
  void *s726c4f0;
  ::S10256C12_nt s726c4f1;
  virtual  ~S726C4(); // _ZN6S726C4D1Ev
  virtual void  v12(); // _ZN6S726C43v12Ev
  virtual void  v13(); // _ZN6S726C43v13Ev
  virtual void  v14(); // _ZN6S726C43v14Ev
  virtual void  v15(); // _ZN6S726C43v15Ev
  virtual void  v16(); // _ZN6S726C43v16Ev
  virtual void  v17(); // _ZN6S726C43v17Ev
  virtual void  v18(); // _ZN6S726C43v18Ev
  virtual void  v19(); // _ZN6S726C43v19Ev
  virtual void  v20(); // _ZN6S726C43v20Ev
  virtual void  v21(); // _ZN6S726C43v21Ev
  virtual void  v22(); // _ZN6S726C43v22Ev
  S726C4(); // tgen
};
//SIG(-1 S726C4) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S726C4 ::~S726C4(){ note_dtor("S726C4", this);}
void  S726C4 ::v12(){vfunc_called(this, "_ZN6S726C43v12Ev");}
void  S726C4 ::v13(){vfunc_called(this, "_ZN6S726C43v13Ev");}
void  S726C4 ::v14(){vfunc_called(this, "_ZN6S726C43v14Ev");}
void  S726C4 ::v15(){vfunc_called(this, "_ZN6S726C43v15Ev");}
void  S726C4 ::v16(){vfunc_called(this, "_ZN6S726C43v16Ev");}
void  S726C4 ::v17(){vfunc_called(this, "_ZN6S726C43v17Ev");}
void  S726C4 ::v18(){vfunc_called(this, "_ZN6S726C43v18Ev");}
void  S726C4 ::v19(){vfunc_called(this, "_ZN6S726C43v19Ev");}
void  S726C4 ::v20(){vfunc_called(this, "_ZN6S726C43v20Ev");}
void  S726C4 ::v21(){vfunc_called(this, "_ZN6S726C43v21Ev");}
void  S726C4 ::v22(){vfunc_called(this, "_ZN6S726C43v22Ev");}
S726C4 ::S726C4(){ note_ctor("S726C4", this);} // tgen

static void Test_S726C4()
{
  extern Class_Descriptor cd_S726C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S726C4, buf);
    S726C4 *dp, &lv = *(dp=new (buf) S726C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S726C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S726C4)");
    check_base_class_offset(lv, (S7368C49*), 0, "S726C4");
    check_field_offset(lv, s726c4f0, ABISELECT(32,20), "S726C4.s726c4f0");
    check_field_offset(lv, s726c4f1, ABISELECT(40,24), "S726C4.s726c4f1");
    test_class_info(&lv, &cd_S726C4);
    dp->~S726C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS726C4(Test_S726C4, "S726C4", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN6S726C4C1Ev();
extern void _ZN6S726C4D1Ev();
Name_Map name_map_S726C4[] = {
  NSPAIR(_ZN6S726C4C1Ev),
  NSPAIR(_ZN6S726C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S726C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S726C4[];
extern void _ZN6S726C4D1Ev();
extern void _ZN6S726C4D0Ev();
extern void _ZN6S726C43v12Ev();
extern void _ZN6S726C43v13Ev();
extern void _ZN6S726C43v14Ev();
extern void _ZN6S726C43v15Ev();
extern void _ZN6S726C43v16Ev();
extern void _ZN6S726C43v17Ev();
extern void _ZN6S726C43v18Ev();
extern void _ZN6S726C43v19Ev();
extern void _ZN6S726C43v20Ev();
extern void _ZN6S726C43v21Ev();
extern void _ZN6S726C43v22Ev();
static  VTBL_ENTRY vtc_S726C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S726C4[0]),
  (VTBL_ENTRY)&_ZN6S726C4D1Ev,
  (VTBL_ENTRY)&_ZN6S726C4D0Ev,
  (VTBL_ENTRY)&_ZN6S726C43v12Ev,
  (VTBL_ENTRY)&_ZN6S726C43v13Ev,
  (VTBL_ENTRY)&_ZN6S726C43v14Ev,
  (VTBL_ENTRY)&_ZN6S726C43v15Ev,
  (VTBL_ENTRY)&_ZN6S726C43v16Ev,
  (VTBL_ENTRY)&_ZN6S726C43v17Ev,
  (VTBL_ENTRY)&_ZN6S726C43v18Ev,
  (VTBL_ENTRY)&_ZN6S726C43v19Ev,
  (VTBL_ENTRY)&_ZN6S726C43v20Ev,
  (VTBL_ENTRY)&_ZN6S726C43v21Ev,
  (VTBL_ENTRY)&_ZN6S726C43v22Ev,
};
extern VTBL_ENTRY _ZTI6S726C4[];
extern  VTBL_ENTRY _ZTV6S726C4[];
Class_Descriptor cd_S726C4 = {  "S726C4", // class name
  bases_S726C4, 1,
  &(vtc_S726C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI6S726C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S726C4),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S726C3  : S726C4 {
  int s726c3f0;
  virtual  ~S726C3(); // _ZN6S726C3D1Ev
  virtual void  v23(); // _ZN6S726C33v23Ev
  virtual void  v24(); // _ZN6S726C33v24Ev
  virtual void  v25(); // _ZN6S726C33v25Ev
  virtual void  v26(); // _ZN6S726C33v26Ev
  virtual void  v27(); // _ZN6S726C33v27Ev
  virtual void  v28(); // _ZN6S726C33v28Ev
  virtual void  v29(); // _ZN6S726C33v29Ev
  virtual void  v30(); // _ZN6S726C33v30Ev
  virtual void  v31(); // _ZN6S726C33v31Ev
  virtual void  v32(); // _ZN6S726C33v32Ev
  virtual void  v33(); // _ZN6S726C33v33Ev
  virtual void  v34(); // _ZN6S726C33v34Ev
  virtual void  v35(); // _ZN6S726C33v35Ev
  virtual void  v36(); // _ZN6S726C33v36Ev
  virtual void  v37(); // _ZN6S726C33v37Ev
  virtual void  v38(); // _ZN6S726C33v38Ev
  virtual void  v39(); // _ZN6S726C33v39Ev
  virtual void  v40(); // _ZN6S726C33v40Ev
  virtual void  v41(); // _ZN6S726C33v41Ev
  S726C3(); // tgen
};
//SIG(-1 S726C3) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi}


 S726C3 ::~S726C3(){ note_dtor("S726C3", this);}
void  S726C3 ::v23(){vfunc_called(this, "_ZN6S726C33v23Ev");}
void  S726C3 ::v24(){vfunc_called(this, "_ZN6S726C33v24Ev");}
void  S726C3 ::v25(){vfunc_called(this, "_ZN6S726C33v25Ev");}
void  S726C3 ::v26(){vfunc_called(this, "_ZN6S726C33v26Ev");}
void  S726C3 ::v27(){vfunc_called(this, "_ZN6S726C33v27Ev");}
void  S726C3 ::v28(){vfunc_called(this, "_ZN6S726C33v28Ev");}
void  S726C3 ::v29(){vfunc_called(this, "_ZN6S726C33v29Ev");}
void  S726C3 ::v30(){vfunc_called(this, "_ZN6S726C33v30Ev");}
void  S726C3 ::v31(){vfunc_called(this, "_ZN6S726C33v31Ev");}
void  S726C3 ::v32(){vfunc_called(this, "_ZN6S726C33v32Ev");}
void  S726C3 ::v33(){vfunc_called(this, "_ZN6S726C33v33Ev");}
void  S726C3 ::v34(){vfunc_called(this, "_ZN6S726C33v34Ev");}
void  S726C3 ::v35(){vfunc_called(this, "_ZN6S726C33v35Ev");}
void  S726C3 ::v36(){vfunc_called(this, "_ZN6S726C33v36Ev");}
void  S726C3 ::v37(){vfunc_called(this, "_ZN6S726C33v37Ev");}
void  S726C3 ::v38(){vfunc_called(this, "_ZN6S726C33v38Ev");}
void  S726C3 ::v39(){vfunc_called(this, "_ZN6S726C33v39Ev");}
void  S726C3 ::v40(){vfunc_called(this, "_ZN6S726C33v40Ev");}
void  S726C3 ::v41(){vfunc_called(this, "_ZN6S726C33v41Ev");}
S726C3 ::S726C3(){ note_ctor("S726C3", this);} // tgen

static void Test_S726C3()
{
  extern Class_Descriptor cd_S726C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S726C3, buf);
    S726C3 *dp, &lv = *(dp=new (buf) S726C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S726C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S726C3)");
    check_base_class_offset(lv, (S7368C49*)(S726C4*), 0, "S726C3");
    check_base_class_offset(lv, (S726C4*), 0, "S726C3");
    check_field_offset(lv, s726c3f0, ABISELECT(96,64), "S726C3.s726c3f0");
    test_class_info(&lv, &cd_S726C3);
    dp->~S726C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS726C3(Test_S726C3, "S726C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN6S726C3C1Ev();
extern void _ZN6S726C3D1Ev();
Name_Map name_map_S726C3[] = {
  NSPAIR(_ZN6S726C3C1Ev),
  NSPAIR(_ZN6S726C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S726C4;
extern VTBL_ENTRY _ZTI6S726C4[];
extern  VTBL_ENTRY _ZTV6S726C4[];
static Base_Class bases_S726C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S726C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S726C3[];
extern void _ZN6S726C3D1Ev();
extern void _ZN6S726C3D0Ev();
extern void _ZN6S726C43v12Ev();
extern void _ZN6S726C43v13Ev();
extern void _ZN6S726C43v14Ev();
extern void _ZN6S726C43v15Ev();
extern void _ZN6S726C43v16Ev();
extern void _ZN6S726C43v17Ev();
extern void _ZN6S726C43v18Ev();
extern void _ZN6S726C43v19Ev();
extern void _ZN6S726C43v20Ev();
extern void _ZN6S726C43v21Ev();
extern void _ZN6S726C43v22Ev();
extern void _ZN6S726C33v23Ev();
extern void _ZN6S726C33v24Ev();
extern void _ZN6S726C33v25Ev();
extern void _ZN6S726C33v26Ev();
extern void _ZN6S726C33v27Ev();
extern void _ZN6S726C33v28Ev();
extern void _ZN6S726C33v29Ev();
extern void _ZN6S726C33v30Ev();
extern void _ZN6S726C33v31Ev();
extern void _ZN6S726C33v32Ev();
extern void _ZN6S726C33v33Ev();
extern void _ZN6S726C33v34Ev();
extern void _ZN6S726C33v35Ev();
extern void _ZN6S726C33v36Ev();
extern void _ZN6S726C33v37Ev();
extern void _ZN6S726C33v38Ev();
extern void _ZN6S726C33v39Ev();
extern void _ZN6S726C33v40Ev();
extern void _ZN6S726C33v41Ev();
static  VTBL_ENTRY vtc_S726C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S726C3[0]),
  (VTBL_ENTRY)&_ZN6S726C3D1Ev,
  (VTBL_ENTRY)&_ZN6S726C3D0Ev,
  (VTBL_ENTRY)&_ZN6S726C43v12Ev,
  (VTBL_ENTRY)&_ZN6S726C43v13Ev,
  (VTBL_ENTRY)&_ZN6S726C43v14Ev,
  (VTBL_ENTRY)&_ZN6S726C43v15Ev,
  (VTBL_ENTRY)&_ZN6S726C43v16Ev,
  (VTBL_ENTRY)&_ZN6S726C43v17Ev,
  (VTBL_ENTRY)&_ZN6S726C43v18Ev,
  (VTBL_ENTRY)&_ZN6S726C43v19Ev,
  (VTBL_ENTRY)&_ZN6S726C43v20Ev,
  (VTBL_ENTRY)&_ZN6S726C43v21Ev,
  (VTBL_ENTRY)&_ZN6S726C43v22Ev,
  (VTBL_ENTRY)&_ZN6S726C33v23Ev,
  (VTBL_ENTRY)&_ZN6S726C33v24Ev,
  (VTBL_ENTRY)&_ZN6S726C33v25Ev,
  (VTBL_ENTRY)&_ZN6S726C33v26Ev,
  (VTBL_ENTRY)&_ZN6S726C33v27Ev,
  (VTBL_ENTRY)&_ZN6S726C33v28Ev,
  (VTBL_ENTRY)&_ZN6S726C33v29Ev,
  (VTBL_ENTRY)&_ZN6S726C33v30Ev,
  (VTBL_ENTRY)&_ZN6S726C33v31Ev,
  (VTBL_ENTRY)&_ZN6S726C33v32Ev,
  (VTBL_ENTRY)&_ZN6S726C33v33Ev,
  (VTBL_ENTRY)&_ZN6S726C33v34Ev,
  (VTBL_ENTRY)&_ZN6S726C33v35Ev,
  (VTBL_ENTRY)&_ZN6S726C33v36Ev,
  (VTBL_ENTRY)&_ZN6S726C33v37Ev,
  (VTBL_ENTRY)&_ZN6S726C33v38Ev,
  (VTBL_ENTRY)&_ZN6S726C33v39Ev,
  (VTBL_ENTRY)&_ZN6S726C33v40Ev,
  (VTBL_ENTRY)&_ZN6S726C33v41Ev,
};
extern VTBL_ENTRY _ZTI6S726C3[];
extern  VTBL_ENTRY _ZTV6S726C3[];
Class_Descriptor cd_S726C3 = {  "S726C3", // class name
  bases_S726C3, 2,
  &(vtc_S726C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI6S726C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S726C3),34, //virtual function table var
  2, // 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  S726C2  : S726C3 {
  ::S7368C77 s726c2f0;
  virtual  ~S726C2(); // _ZN6S726C2D1Ev
  virtual void  v42(); // _ZN6S726C23v42Ev
  virtual void  v43(); // _ZN6S726C23v43Ev
  virtual void  v44(); // _ZN6S726C23v44Ev
  virtual void  v45(); // _ZN6S726C23v45Ev
  virtual void  v46(); // _ZN6S726C23v46Ev
  virtual void  v47(); // _ZN6S726C23v47Ev
  virtual void  v48(); // _ZN6S726C23v48Ev
  S726C2(); // tgen
};
//SIG(-1 S726C2) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} vd v1 v2 v3 v4 v5 v6 v7 FC8{ m Fp Fi[2] FC9{ m}}}


 S726C2 ::~S726C2(){ note_dtor("S726C2", this);}
void  S726C2 ::v42(){vfunc_called(this, "_ZN6S726C23v42Ev");}
void  S726C2 ::v43(){vfunc_called(this, "_ZN6S726C23v43Ev");}
void  S726C2 ::v44(){vfunc_called(this, "_ZN6S726C23v44Ev");}
void  S726C2 ::v45(){vfunc_called(this, "_ZN6S726C23v45Ev");}
void  S726C2 ::v46(){vfunc_called(this, "_ZN6S726C23v46Ev");}
void  S726C2 ::v47(){vfunc_called(this, "_ZN6S726C23v47Ev");}
void  S726C2 ::v48(){vfunc_called(this, "_ZN6S726C23v48Ev");}
S726C2 ::S726C2(){ note_ctor("S726C2", this);} // tgen

static void Test_S726C2()
{
  extern Class_Descriptor cd_S726C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S726C2, buf);
    S726C2 *dp, &lv = *(dp=new (buf) S726C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S726C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S726C2)");
    check_base_class_offset(lv, (S7368C49*)(S726C4*)(S726C3*), 0, "S726C2");
    check_base_class_offset(lv, (S726C4*)(S726C3*), 0, "S726C2");
    check_base_class_offset(lv, (S726C3*), 0, "S726C2");
    check_field_offset(lv, s726c2f0, ABISELECT(104,68), "S726C2.s726c2f0");
    test_class_info(&lv, &cd_S726C2);
    dp->~S726C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS726C2(Test_S726C2, "S726C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN6S726C2C1Ev();
extern void _ZN6S726C2D1Ev();
Name_Map name_map_S726C2[] = {
  NSPAIR(_ZN6S726C2C1Ev),
  NSPAIR(_ZN6S726C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S726C4;
extern VTBL_ENTRY _ZTI6S726C4[];
extern  VTBL_ENTRY _ZTV6S726C4[];
extern Class_Descriptor cd_S726C3;
extern VTBL_ENTRY _ZTI6S726C3[];
extern  VTBL_ENTRY _ZTV6S726C3[];
static Base_Class bases_S726C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S726C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S726C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S726C2[];
extern void _ZN6S726C2D1Ev();
extern void _ZN6S726C2D0Ev();
extern void _ZN6S726C43v12Ev();
extern void _ZN6S726C43v13Ev();
extern void _ZN6S726C43v14Ev();
extern void _ZN6S726C43v15Ev();
extern void _ZN6S726C43v16Ev();
extern void _ZN6S726C43v17Ev();
extern void _ZN6S726C43v18Ev();
extern void _ZN6S726C43v19Ev();
extern void _ZN6S726C43v20Ev();
extern void _ZN6S726C43v21Ev();
extern void _ZN6S726C43v22Ev();
extern void _ZN6S726C33v23Ev();
extern void _ZN6S726C33v24Ev();
extern void _ZN6S726C33v25Ev();
extern void _ZN6S726C33v26Ev();
extern void _ZN6S726C33v27Ev();
extern void _ZN6S726C33v28Ev();
extern void _ZN6S726C33v29Ev();
extern void _ZN6S726C33v30Ev();
extern void _ZN6S726C33v31Ev();
extern void _ZN6S726C33v32Ev();
extern void _ZN6S726C33v33Ev();
extern void _ZN6S726C33v34Ev();
extern void _ZN6S726C33v35Ev();
extern void _ZN6S726C33v36Ev();
extern void _ZN6S726C33v37Ev();
extern void _ZN6S726C33v38Ev();
extern void _ZN6S726C33v39Ev();
extern void _ZN6S726C33v40Ev();
extern void _ZN6S726C33v41Ev();
extern void _ZN6S726C23v42Ev();
extern void _ZN6S726C23v43Ev();
extern void _ZN6S726C23v44Ev();
extern void _ZN6S726C23v45Ev();
extern void _ZN6S726C23v46Ev();
extern void _ZN6S726C23v47Ev();
extern void _ZN6S726C23v48Ev();
static  VTBL_ENTRY vtc_S726C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S726C2[0]),
  (VTBL_ENTRY)&_ZN6S726C2D1Ev,
  (VTBL_ENTRY)&_ZN6S726C2D0Ev,
  (VTBL_ENTRY)&_ZN6S726C43v12Ev,
  (VTBL_ENTRY)&_ZN6S726C43v13Ev,
  (VTBL_ENTRY)&_ZN6S726C43v14Ev,
  (VTBL_ENTRY)&_ZN6S726C43v15Ev,
  (VTBL_ENTRY)&_ZN6S726C43v16Ev,
  (VTBL_ENTRY)&_ZN6S726C43v17Ev,
  (VTBL_ENTRY)&_ZN6S726C43v18Ev,
  (VTBL_ENTRY)&_ZN6S726C43v19Ev,
  (VTBL_ENTRY)&_ZN6S726C43v20Ev,
  (VTBL_ENTRY)&_ZN6S726C43v21Ev,
  (VTBL_ENTRY)&_ZN6S726C43v22Ev,
  (VTBL_ENTRY)&_ZN6S726C33v23Ev,
  (VTBL_ENTRY)&_ZN6S726C33v24Ev,
  (VTBL_ENTRY)&_ZN6S726C33v25Ev,
  (VTBL_ENTRY)&_ZN6S726C33v26Ev,
  (VTBL_ENTRY)&_ZN6S726C33v27Ev,
  (VTBL_ENTRY)&_ZN6S726C33v28Ev,
  (VTBL_ENTRY)&_ZN6S726C33v29Ev,
  (VTBL_ENTRY)&_ZN6S726C33v30Ev,
  (VTBL_ENTRY)&_ZN6S726C33v31Ev,
  (VTBL_ENTRY)&_ZN6S726C33v32Ev,
  (VTBL_ENTRY)&_ZN6S726C33v33Ev,
  (VTBL_ENTRY)&_ZN6S726C33v34Ev,
  (VTBL_ENTRY)&_ZN6S726C33v35Ev,
  (VTBL_ENTRY)&_ZN6S726C33v36Ev,
  (VTBL_ENTRY)&_ZN6S726C33v37Ev,
  (VTBL_ENTRY)&_ZN6S726C33v38Ev,
  (VTBL_ENTRY)&_ZN6S726C33v39Ev,
  (VTBL_ENTRY)&_ZN6S726C33v40Ev,
  (VTBL_ENTRY)&_ZN6S726C33v41Ev,
  (VTBL_ENTRY)&_ZN6S726C23v42Ev,
  (VTBL_ENTRY)&_ZN6S726C23v43Ev,
  (VTBL_ENTRY)&_ZN6S726C23v44Ev,
  (VTBL_ENTRY)&_ZN6S726C23v45Ev,
  (VTBL_ENTRY)&_ZN6S726C23v46Ev,
  (VTBL_ENTRY)&_ZN6S726C23v47Ev,
  (VTBL_ENTRY)&_ZN6S726C23v48Ev,
};
extern VTBL_ENTRY _ZTI6S726C2[];
extern  VTBL_ENTRY _ZTV6S726C2[];
Class_Descriptor cd_S726C2 = {  "S726C2", // class name
  bases_S726C2, 3,
  &(vtc_S726C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI6S726C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S726C2),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S726C11  : S7368C18_nt {
  ::S7368C9_nt s726c11f0;
  virtual  ~S726C11(); // _ZN7S726C11D1Ev
  S726C11(); // tgen
};
//SIG(-1 S726C11) C1{ BC2{ vd m Fp} vd FC3{ m Fp Fi FC4{ m}}}


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

static void Test_S726C11()
{
  extern Class_Descriptor cd_S726C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S726C11, buf);
    S726C11 *dp, &lv = *(dp=new (buf) S726C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S726C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S726C11)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S726C11");
    check_field_offset(lv, s726c11f0, ABISELECT(16,8), "S726C11.s726c11f0");
    test_class_info(&lv, &cd_S726C11);
    dp->~S726C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS726C11(Test_S726C11, "S726C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S726C11C1Ev();
extern void _ZN7S726C11D1Ev();
Name_Map name_map_S726C11[] = {
  NSPAIR(_ZN7S726C11C1Ev),
  NSPAIR(_ZN7S726C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S726C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S726C11[];
extern void _ZN7S726C11D1Ev();
extern void _ZN7S726C11D0Ev();
static  VTBL_ENTRY vtc_S726C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S726C11[0]),
  (VTBL_ENTRY)&_ZN7S726C11D1Ev,
  (VTBL_ENTRY)&_ZN7S726C11D0Ev,
};
extern VTBL_ENTRY _ZTI7S726C11[];
extern  VTBL_ENTRY _ZTV7S726C11[];
Class_Descriptor cd_S726C11 = {  "S726C11", // class name
  bases_S726C11, 1,
  &(vtc_S726C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S726C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S726C11),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S726C1  : S726C2 {
  ::S726C11 s726c1f0;
  virtual  ~S726C1(); // _ZN6S726C1D1Ev
  virtual void  v1(); // _ZN6S726C12v1Ev
  virtual void  v2(); // _ZN6S726C12v2Ev
  virtual void  v3(); // _ZN6S726C12v3Ev
  virtual void  v4(); // _ZN6S726C12v4Ev
  virtual void  v5(); // _ZN6S726C12v5Ev
  virtual void  v6(); // _ZN6S726C12v6Ev
  virtual void  v7(); // _ZN6S726C12v7Ev
  virtual void  v8(); // _ZN6S726C12v8Ev
  virtual void  v9(); // _ZN6S726C12v9Ev
  virtual void  v10(); // _ZN6S726C13v10Ev
  virtual void  v11(); // _ZN6S726C13v11Ev
  S726C1(); // tgen
};
//SIG(1 S726C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fi} vd v42 v43 v44 v45 v46 v47 v48 FC9{ m Fp Fi[2] FC10{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC11{ BC12{ vd m Fp} vd FC13{ m Fp Fi FC14{ m}}}}


 S726C1 ::~S726C1(){ note_dtor("S726C1", this);}
void  S726C1 ::v1(){vfunc_called(this, "_ZN6S726C12v1Ev");}
void  S726C1 ::v2(){vfunc_called(this, "_ZN6S726C12v2Ev");}
void  S726C1 ::v3(){vfunc_called(this, "_ZN6S726C12v3Ev");}
void  S726C1 ::v4(){vfunc_called(this, "_ZN6S726C12v4Ev");}
void  S726C1 ::v5(){vfunc_called(this, "_ZN6S726C12v5Ev");}
void  S726C1 ::v6(){vfunc_called(this, "_ZN6S726C12v6Ev");}
void  S726C1 ::v7(){vfunc_called(this, "_ZN6S726C12v7Ev");}
void  S726C1 ::v8(){vfunc_called(this, "_ZN6S726C12v8Ev");}
void  S726C1 ::v9(){vfunc_called(this, "_ZN6S726C12v9Ev");}
void  S726C1 ::v10(){vfunc_called(this, "_ZN6S726C13v10Ev");}
void  S726C1 ::v11(){vfunc_called(this, "_ZN6S726C13v11Ev");}
S726C1 ::S726C1(){ note_ctor("S726C1", this);} // tgen

static void Test_S726C1()
{
  extern Class_Descriptor cd_S726C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,27)];
    init_test(&cd_S726C1, buf);
    S726C1 *dp, &lv = *(dp=new (buf) S726C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,104), "sizeof(S726C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S726C1)");
    check_base_class_offset(lv, (S7368C49*)(S726C4*)(S726C3*)(S726C2*), 0, "S726C1");
    check_base_class_offset(lv, (S726C4*)(S726C3*)(S726C2*), 0, "S726C1");
    check_base_class_offset(lv, (S726C3*)(S726C2*), 0, "S726C1");
    check_base_class_offset(lv, (S726C2*), 0, "S726C1");
    check_field_offset(lv, s726c1f0, ABISELECT(128,84), "S726C1.s726c1f0");
    test_class_info(&lv, &cd_S726C1);
    dp->~S726C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS726C1(Test_S726C1, "S726C1", ABISELECT(160,104));

#else // __cplusplus

extern void _ZN6S726C1C1Ev();
extern void _ZN6S726C1D1Ev();
Name_Map name_map_S726C1[] = {
  NSPAIR(_ZN6S726C1C1Ev),
  NSPAIR(_ZN6S726C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S726C4;
extern VTBL_ENTRY _ZTI6S726C4[];
extern  VTBL_ENTRY _ZTV6S726C4[];
extern Class_Descriptor cd_S726C3;
extern VTBL_ENTRY _ZTI6S726C3[];
extern  VTBL_ENTRY _ZTV6S726C3[];
extern Class_Descriptor cd_S726C2;
extern VTBL_ENTRY _ZTI6S726C2[];
extern  VTBL_ENTRY _ZTV6S726C2[];
static Base_Class bases_S726C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S726C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S726C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S726C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S726C1[];
extern void _ZN6S726C1D1Ev();
extern void _ZN6S726C1D0Ev();
extern void _ZN6S726C43v12Ev();
extern void _ZN6S726C43v13Ev();
extern void _ZN6S726C43v14Ev();
extern void _ZN6S726C43v15Ev();
extern void _ZN6S726C43v16Ev();
extern void _ZN6S726C43v17Ev();
extern void _ZN6S726C43v18Ev();
extern void _ZN6S726C43v19Ev();
extern void _ZN6S726C43v20Ev();
extern void _ZN6S726C43v21Ev();
extern void _ZN6S726C43v22Ev();
extern void _ZN6S726C33v23Ev();
extern void _ZN6S726C33v24Ev();
extern void _ZN6S726C33v25Ev();
extern void _ZN6S726C33v26Ev();
extern void _ZN6S726C33v27Ev();
extern void _ZN6S726C33v28Ev();
extern void _ZN6S726C33v29Ev();
extern void _ZN6S726C33v30Ev();
extern void _ZN6S726C33v31Ev();
extern void _ZN6S726C33v32Ev();
extern void _ZN6S726C33v33Ev();
extern void _ZN6S726C33v34Ev();
extern void _ZN6S726C33v35Ev();
extern void _ZN6S726C33v36Ev();
extern void _ZN6S726C33v37Ev();
extern void _ZN6S726C33v38Ev();
extern void _ZN6S726C33v39Ev();
extern void _ZN6S726C33v40Ev();
extern void _ZN6S726C33v41Ev();
extern void _ZN6S726C23v42Ev();
extern void _ZN6S726C23v43Ev();
extern void _ZN6S726C23v44Ev();
extern void _ZN6S726C23v45Ev();
extern void _ZN6S726C23v46Ev();
extern void _ZN6S726C23v47Ev();
extern void _ZN6S726C23v48Ev();
extern void _ZN6S726C12v1Ev();
extern void _ZN6S726C12v2Ev();
extern void _ZN6S726C12v3Ev();
extern void _ZN6S726C12v4Ev();
extern void _ZN6S726C12v5Ev();
extern void _ZN6S726C12v6Ev();
extern void _ZN6S726C12v7Ev();
extern void _ZN6S726C12v8Ev();
extern void _ZN6S726C12v9Ev();
extern void _ZN6S726C13v10Ev();
extern void _ZN6S726C13v11Ev();
static  VTBL_ENTRY vtc_S726C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S726C1[0]),
  (VTBL_ENTRY)&_ZN6S726C1D1Ev,
  (VTBL_ENTRY)&_ZN6S726C1D0Ev,
  (VTBL_ENTRY)&_ZN6S726C43v12Ev,
  (VTBL_ENTRY)&_ZN6S726C43v13Ev,
  (VTBL_ENTRY)&_ZN6S726C43v14Ev,
  (VTBL_ENTRY)&_ZN6S726C43v15Ev,
  (VTBL_ENTRY)&_ZN6S726C43v16Ev,
  (VTBL_ENTRY)&_ZN6S726C43v17Ev,
  (VTBL_ENTRY)&_ZN6S726C43v18Ev,
  (VTBL_ENTRY)&_ZN6S726C43v19Ev,
  (VTBL_ENTRY)&_ZN6S726C43v20Ev,
  (VTBL_ENTRY)&_ZN6S726C43v21Ev,
  (VTBL_ENTRY)&_ZN6S726C43v22Ev,
  (VTBL_ENTRY)&_ZN6S726C33v23Ev,
  (VTBL_ENTRY)&_ZN6S726C33v24Ev,
  (VTBL_ENTRY)&_ZN6S726C33v25Ev,
  (VTBL_ENTRY)&_ZN6S726C33v26Ev,
  (VTBL_ENTRY)&_ZN6S726C33v27Ev,
  (VTBL_ENTRY)&_ZN6S726C33v28Ev,
  (VTBL_ENTRY)&_ZN6S726C33v29Ev,
  (VTBL_ENTRY)&_ZN6S726C33v30Ev,
  (VTBL_ENTRY)&_ZN6S726C33v31Ev,
  (VTBL_ENTRY)&_ZN6S726C33v32Ev,
  (VTBL_ENTRY)&_ZN6S726C33v33Ev,
  (VTBL_ENTRY)&_ZN6S726C33v34Ev,
  (VTBL_ENTRY)&_ZN6S726C33v35Ev,
  (VTBL_ENTRY)&_ZN6S726C33v36Ev,
  (VTBL_ENTRY)&_ZN6S726C33v37Ev,
  (VTBL_ENTRY)&_ZN6S726C33v38Ev,
  (VTBL_ENTRY)&_ZN6S726C33v39Ev,
  (VTBL_ENTRY)&_ZN6S726C33v40Ev,
  (VTBL_ENTRY)&_ZN6S726C33v41Ev,
  (VTBL_ENTRY)&_ZN6S726C23v42Ev,
  (VTBL_ENTRY)&_ZN6S726C23v43Ev,
  (VTBL_ENTRY)&_ZN6S726C23v44Ev,
  (VTBL_ENTRY)&_ZN6S726C23v45Ev,
  (VTBL_ENTRY)&_ZN6S726C23v46Ev,
  (VTBL_ENTRY)&_ZN6S726C23v47Ev,
  (VTBL_ENTRY)&_ZN6S726C23v48Ev,
  (VTBL_ENTRY)&_ZN6S726C12v1Ev,
  (VTBL_ENTRY)&_ZN6S726C12v2Ev,
  (VTBL_ENTRY)&_ZN6S726C12v3Ev,
  (VTBL_ENTRY)&_ZN6S726C12v4Ev,
  (VTBL_ENTRY)&_ZN6S726C12v5Ev,
  (VTBL_ENTRY)&_ZN6S726C12v6Ev,
  (VTBL_ENTRY)&_ZN6S726C12v7Ev,
  (VTBL_ENTRY)&_ZN6S726C12v8Ev,
  (VTBL_ENTRY)&_ZN6S726C12v9Ev,
  (VTBL_ENTRY)&_ZN6S726C13v10Ev,
  (VTBL_ENTRY)&_ZN6S726C13v11Ev,
};
extern VTBL_ENTRY _ZTI6S726C1[];
extern  VTBL_ENTRY _ZTV6S726C1[];
Class_Descriptor cd_S726C1 = {  "S726C1", // class name
  bases_S726C1, 4,
  &(vtc_S726C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,104), // object size
  NSPAIRA(_ZTI6S726C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S726C1),52, //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  S2032C4  {
  virtual  ~S2032C4(); // _ZN7S2032C4D1Ev
  virtual void  v14(); // _ZN7S2032C43v14Ev
  virtual void  v15(); // _ZN7S2032C43v15Ev
  virtual void  v16(); // _ZN7S2032C43v16Ev
  S2032C4(); // tgen
};
//SIG(-1 S2032C4) C1{ vd v1 v2 v3}


 S2032C4 ::~S2032C4(){ note_dtor("S2032C4", this);}
void  S2032C4 ::v14(){vfunc_called(this, "_ZN7S2032C43v14Ev");}
void  S2032C4 ::v15(){vfunc_called(this, "_ZN7S2032C43v15Ev");}
void  S2032C4 ::v16(){vfunc_called(this, "_ZN7S2032C43v16Ev");}
S2032C4 ::S2032C4(){ note_ctor("S2032C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2032C4C1Ev();
extern void _ZN7S2032C4D1Ev();
Name_Map name_map_S2032C4[] = {
  NSPAIR(_ZN7S2032C4C1Ev),
  NSPAIR(_ZN7S2032C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2032C4[];
extern void _ZN7S2032C4D1Ev();
extern void _ZN7S2032C4D0Ev();
extern void _ZN7S2032C43v14Ev();
extern void _ZN7S2032C43v15Ev();
extern void _ZN7S2032C43v16Ev();
static  VTBL_ENTRY vtc_S2032C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2032C4[0]),
  (VTBL_ENTRY)&_ZN7S2032C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2032C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v16Ev,
};
extern VTBL_ENTRY _ZTI7S2032C4[];
extern  VTBL_ENTRY _ZTV7S2032C4[];
Class_Descriptor cd_S2032C4 = {  "S2032C4", // class name
  0,0,//no base classes
  &(vtc_S2032C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2032C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2032C4),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  S2032C3  : S2032C4 {
  virtual  ~S2032C3(); // _ZN7S2032C3D1Ev
  virtual void  v17(); // _ZN7S2032C33v17Ev
  virtual void  v18(); // _ZN7S2032C33v18Ev
  virtual void  v19(); // _ZN7S2032C33v19Ev
  S2032C3(); // tgen
};
//SIG(-1 S2032C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2032C3 ::~S2032C3(){ note_dtor("S2032C3", this);}
void  S2032C3 ::v17(){vfunc_called(this, "_ZN7S2032C33v17Ev");}
void  S2032C3 ::v18(){vfunc_called(this, "_ZN7S2032C33v18Ev");}
void  S2032C3 ::v19(){vfunc_called(this, "_ZN7S2032C33v19Ev");}
S2032C3 ::S2032C3(){ note_ctor("S2032C3", this);} // tgen

static void Test_S2032C3()
{
  extern Class_Descriptor cd_S2032C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2032C3, buf);
    S2032C3 *dp, &lv = *(dp=new (buf) S2032C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2032C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2032C3)");
    check_base_class_offset(lv, (S2032C4*), 0, "S2032C3");
    test_class_info(&lv, &cd_S2032C3);
    dp->~S2032C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2032C3(Test_S2032C3, "S2032C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2032C3C1Ev();
extern void _ZN7S2032C3D1Ev();
Name_Map name_map_S2032C3[] = {
  NSPAIR(_ZN7S2032C3C1Ev),
  NSPAIR(_ZN7S2032C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2032C4;
extern VTBL_ENTRY _ZTI7S2032C4[];
extern  VTBL_ENTRY _ZTV7S2032C4[];
static Base_Class bases_S2032C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2032C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2032C3[];
extern void _ZN7S2032C3D1Ev();
extern void _ZN7S2032C3D0Ev();
extern void _ZN7S2032C43v14Ev();
extern void _ZN7S2032C43v15Ev();
extern void _ZN7S2032C43v16Ev();
extern void _ZN7S2032C33v17Ev();
extern void _ZN7S2032C33v18Ev();
extern void _ZN7S2032C33v19Ev();
static  VTBL_ENTRY vtc_S2032C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2032C3[0]),
  (VTBL_ENTRY)&_ZN7S2032C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2032C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v19Ev,
};
extern VTBL_ENTRY _ZTI7S2032C3[];
extern  VTBL_ENTRY _ZTV7S2032C3[];
Class_Descriptor cd_S2032C3 = {  "S2032C3", // class name
  bases_S2032C3, 1,
  &(vtc_S2032C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2032C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2032C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2032C2  : S2032C3 {
  ::S7368C77 s2032c2f0;
  ::S2026C7_nt s2032c2f1;
  char s2032c2f2;
  virtual  ~S2032C2(); // _ZN7S2032C2D1Ev
  virtual void  v20(); // _ZN7S2032C23v20Ev
  virtual void  v21(); // _ZN7S2032C23v21Ev
  virtual void  v22(); // _ZN7S2032C23v22Ev
  S2032C2(); // tgen
};
//SIG(-1 S2032C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc}


 S2032C2 ::~S2032C2(){ note_dtor("S2032C2", this);}
void  S2032C2 ::v20(){vfunc_called(this, "_ZN7S2032C23v20Ev");}
void  S2032C2 ::v21(){vfunc_called(this, "_ZN7S2032C23v21Ev");}
void  S2032C2 ::v22(){vfunc_called(this, "_ZN7S2032C23v22Ev");}
S2032C2 ::S2032C2(){ note_ctor("S2032C2", this);} // tgen

static void Test_S2032C2()
{
  extern Class_Descriptor cd_S2032C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2032C2, buf);
    S2032C2 *dp, &lv = *(dp=new (buf) S2032C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2032C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2032C2)");
    check_base_class_offset(lv, (S2032C4*)(S2032C3*), 0, "S2032C2");
    check_base_class_offset(lv, (S2032C3*), 0, "S2032C2");
    check_field_offset(lv, s2032c2f0, ABISELECT(8,4), "S2032C2.s2032c2f0");
    check_field_offset(lv, s2032c2f1, ABISELECT(32,20), "S2032C2.s2032c2f1");
    check_field_offset(lv, s2032c2f2, ABISELECT(64,52), "S2032C2.s2032c2f2");
    test_class_info(&lv, &cd_S2032C2);
    dp->~S2032C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2032C2(Test_S2032C2, "S2032C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2032C2C1Ev();
extern void _ZN7S2032C2D1Ev();
Name_Map name_map_S2032C2[] = {
  NSPAIR(_ZN7S2032C2C1Ev),
  NSPAIR(_ZN7S2032C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2032C4;
extern VTBL_ENTRY _ZTI7S2032C4[];
extern  VTBL_ENTRY _ZTV7S2032C4[];
extern Class_Descriptor cd_S2032C3;
extern VTBL_ENTRY _ZTI7S2032C3[];
extern  VTBL_ENTRY _ZTV7S2032C3[];
static Base_Class bases_S2032C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2032C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2032C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2032C2[];
extern void _ZN7S2032C2D1Ev();
extern void _ZN7S2032C2D0Ev();
extern void _ZN7S2032C43v14Ev();
extern void _ZN7S2032C43v15Ev();
extern void _ZN7S2032C43v16Ev();
extern void _ZN7S2032C33v17Ev();
extern void _ZN7S2032C33v18Ev();
extern void _ZN7S2032C33v19Ev();
extern void _ZN7S2032C23v20Ev();
extern void _ZN7S2032C23v21Ev();
extern void _ZN7S2032C23v22Ev();
static  VTBL_ENTRY vtc_S2032C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2032C2[0]),
  (VTBL_ENTRY)&_ZN7S2032C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2032C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2032C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2032C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2032C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S2032C2[];
extern  VTBL_ENTRY _ZTV7S2032C2[];
Class_Descriptor cd_S2032C2 = {  "S2032C2", // class name
  bases_S2032C2, 2,
  &(vtc_S2032C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2032C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2032C2),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  S2032C10  {
  void *s2032c10f0[2];
  virtual  ~S2032C10(); // _ZN8S2032C10D1Ev
  virtual void  v23(); // _ZN8S2032C103v23Ev
  virtual void  v24(); // _ZN8S2032C103v24Ev
  virtual void  v25(); // _ZN8S2032C103v25Ev
  virtual void  v26(); // _ZN8S2032C103v26Ev
  virtual void  v27(); // _ZN8S2032C103v27Ev
  virtual void  v28(); // _ZN8S2032C103v28Ev
  virtual void  v29(); // _ZN8S2032C103v29Ev
  virtual void  v30(); // _ZN8S2032C103v30Ev
  virtual void  v31(); // _ZN8S2032C103v31Ev
  virtual void  v32(); // _ZN8S2032C103v32Ev
  virtual void  v33(); // _ZN8S2032C103v33Ev
  virtual void  v34(); // _ZN8S2032C103v34Ev
  virtual void  v35(); // _ZN8S2032C103v35Ev
  virtual void  v36(); // _ZN8S2032C103v36Ev
  S2032C10(); // tgen
};
//SIG(-1 S2032C10) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2032C10 ::~S2032C10(){ note_dtor("S2032C10", this);}
void  S2032C10 ::v23(){vfunc_called(this, "_ZN8S2032C103v23Ev");}
void  S2032C10 ::v24(){vfunc_called(this, "_ZN8S2032C103v24Ev");}
void  S2032C10 ::v25(){vfunc_called(this, "_ZN8S2032C103v25Ev");}
void  S2032C10 ::v26(){vfunc_called(this, "_ZN8S2032C103v26Ev");}
void  S2032C10 ::v27(){vfunc_called(this, "_ZN8S2032C103v27Ev");}
void  S2032C10 ::v28(){vfunc_called(this, "_ZN8S2032C103v28Ev");}
void  S2032C10 ::v29(){vfunc_called(this, "_ZN8S2032C103v29Ev");}
void  S2032C10 ::v30(){vfunc_called(this, "_ZN8S2032C103v30Ev");}
void  S2032C10 ::v31(){vfunc_called(this, "_ZN8S2032C103v31Ev");}
void  S2032C10 ::v32(){vfunc_called(this, "_ZN8S2032C103v32Ev");}
void  S2032C10 ::v33(){vfunc_called(this, "_ZN8S2032C103v33Ev");}
void  S2032C10 ::v34(){vfunc_called(this, "_ZN8S2032C103v34Ev");}
void  S2032C10 ::v35(){vfunc_called(this, "_ZN8S2032C103v35Ev");}
void  S2032C10 ::v36(){vfunc_called(this, "_ZN8S2032C103v36Ev");}
S2032C10 ::S2032C10(){ note_ctor("S2032C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2032C10C1Ev();
extern void _ZN8S2032C10D1Ev();
Name_Map name_map_S2032C10[] = {
  NSPAIR(_ZN8S2032C10C1Ev),
  NSPAIR(_ZN8S2032C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2032C10[];
extern void _ZN8S2032C10D1Ev();
extern void _ZN8S2032C10D0Ev();
extern void _ZN8S2032C103v23Ev();
extern void _ZN8S2032C103v24Ev();
extern void _ZN8S2032C103v25Ev();
extern void _ZN8S2032C103v26Ev();
extern void _ZN8S2032C103v27Ev();
extern void _ZN8S2032C103v28Ev();
extern void _ZN8S2032C103v29Ev();
extern void _ZN8S2032C103v30Ev();
extern void _ZN8S2032C103v31Ev();
extern void _ZN8S2032C103v32Ev();
extern void _ZN8S2032C103v33Ev();
extern void _ZN8S2032C103v34Ev();
extern void _ZN8S2032C103v35Ev();
extern void _ZN8S2032C103v36Ev();
static  VTBL_ENTRY vtc_S2032C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2032C10[0]),
  (VTBL_ENTRY)&_ZN8S2032C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2032C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v35Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v36Ev,
};
extern VTBL_ENTRY _ZTI8S2032C10[];
extern  VTBL_ENTRY _ZTV8S2032C10[];
Class_Descriptor cd_S2032C10 = {  "S2032C10", // class name
  0,0,//no base classes
  &(vtc_S2032C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S2032C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2032C10),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2032C9  : S2032C10 {
  ::S7368C58 s2032c9f0;
  virtual  ~S2032C9(); // _ZN7S2032C9D1Ev
  virtual void  v37(); // _ZN7S2032C93v37Ev
  virtual void  v38(); // _ZN7S2032C93v38Ev
  virtual void  v39(); // _ZN7S2032C93v39Ev
  virtual void  v40(); // _ZN7S2032C93v40Ev
  virtual void  v41(); // _ZN7S2032C93v41Ev
  virtual void  v42(); // _ZN7S2032C93v42Ev
  virtual void  v43(); // _ZN7S2032C93v43Ev
  S2032C9(); // tgen
};
//SIG(-1 S2032C9) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2032C9 ::~S2032C9(){ note_dtor("S2032C9", this);}
void  S2032C9 ::v37(){vfunc_called(this, "_ZN7S2032C93v37Ev");}
void  S2032C9 ::v38(){vfunc_called(this, "_ZN7S2032C93v38Ev");}
void  S2032C9 ::v39(){vfunc_called(this, "_ZN7S2032C93v39Ev");}
void  S2032C9 ::v40(){vfunc_called(this, "_ZN7S2032C93v40Ev");}
void  S2032C9 ::v41(){vfunc_called(this, "_ZN7S2032C93v41Ev");}
void  S2032C9 ::v42(){vfunc_called(this, "_ZN7S2032C93v42Ev");}
void  S2032C9 ::v43(){vfunc_called(this, "_ZN7S2032C93v43Ev");}
S2032C9 ::S2032C9(){ note_ctor("S2032C9", this);} // tgen

static void Test_S2032C9()
{
  extern Class_Descriptor cd_S2032C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2032C9, buf);
    S2032C9 *dp, &lv = *(dp=new (buf) S2032C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2032C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2032C9)");
    check_base_class_offset(lv, (S2032C10*), 0, "S2032C9");
    check_field_offset(lv, s2032c9f0, ABISELECT(24,12), "S2032C9.s2032c9f0");
    test_class_info(&lv, &cd_S2032C9);
    dp->~S2032C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2032C9(Test_S2032C9, "S2032C9", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2032C9C1Ev();
extern void _ZN7S2032C9D1Ev();
Name_Map name_map_S2032C9[] = {
  NSPAIR(_ZN7S2032C9C1Ev),
  NSPAIR(_ZN7S2032C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2032C10;
extern VTBL_ENTRY _ZTI8S2032C10[];
extern  VTBL_ENTRY _ZTV8S2032C10[];
static Base_Class bases_S2032C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2032C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2032C9[];
extern void _ZN7S2032C9D1Ev();
extern void _ZN7S2032C9D0Ev();
extern void _ZN8S2032C103v23Ev();
extern void _ZN8S2032C103v24Ev();
extern void _ZN8S2032C103v25Ev();
extern void _ZN8S2032C103v26Ev();
extern void _ZN8S2032C103v27Ev();
extern void _ZN8S2032C103v28Ev();
extern void _ZN8S2032C103v29Ev();
extern void _ZN8S2032C103v30Ev();
extern void _ZN8S2032C103v31Ev();
extern void _ZN8S2032C103v32Ev();
extern void _ZN8S2032C103v33Ev();
extern void _ZN8S2032C103v34Ev();
extern void _ZN8S2032C103v35Ev();
extern void _ZN8S2032C103v36Ev();
extern void _ZN7S2032C93v37Ev();
extern void _ZN7S2032C93v38Ev();
extern void _ZN7S2032C93v39Ev();
extern void _ZN7S2032C93v40Ev();
extern void _ZN7S2032C93v41Ev();
extern void _ZN7S2032C93v42Ev();
extern void _ZN7S2032C93v43Ev();
static  VTBL_ENTRY vtc_S2032C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2032C9[0]),
  (VTBL_ENTRY)&_ZN7S2032C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2032C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v35Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v36Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v42Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v43Ev,
};
extern VTBL_ENTRY _ZTI7S2032C9[];
extern  VTBL_ENTRY _ZTV7S2032C9[];
Class_Descriptor cd_S2032C9 = {  "S2032C9", // class name
  bases_S2032C9, 1,
  &(vtc_S2032C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2032C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2032C9),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2032C13  : S2011C14_nt {
  int s2032c13f0;
  ::S2011C28_nt s2032c13f1;
  ~S2032C13(); // tgen
  S2032C13(); // tgen
};
//SIG(-1 S2032C13) C1{ BC2{ vd} Fi FC3{ Fi FC4{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}}


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

static void Test_S2032C13()
{
  extern Class_Descriptor cd_S2032C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,38)];
    init_test(&cd_S2032C13, buf);
    S2032C13 *dp, &lv = *(dp=new (buf) S2032C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,148), "sizeof(S2032C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2032C13)");
    check_base_class_offset(lv, (S2011C14_nt*), 0, "S2032C13");
    check_field_offset(lv, s2032c13f0, ABISELECT(8,4), "S2032C13.s2032c13f0");
    check_field_offset(lv, s2032c13f1, ABISELECT(16,8), "S2032C13.s2032c13f1");
    test_class_info(&lv, &cd_S2032C13);
    dp->~S2032C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2032C13(Test_S2032C13, "S2032C13", ABISELECT(200,148));

#else // __cplusplus

extern void _ZN8S2032C13C1Ev();
extern void _ZN8S2032C13D1Ev();
Name_Map name_map_S2032C13[] = {
  NSPAIR(_ZN8S2032C13C1Ev),
  NSPAIR(_ZN8S2032C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
static Base_Class bases_S2032C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2032C13[];
extern void _ZN8S2032C13D1Ev();
extern void _ZN8S2032C13D0Ev();
static  VTBL_ENTRY vtc_S2032C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2032C13[0]),
  (VTBL_ENTRY)&_ZN8S2032C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2032C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S2032C13[];
extern  VTBL_ENTRY _ZTV8S2032C13[];
Class_Descriptor cd_S2032C13 = {  "S2032C13", // class name
  bases_S2032C13, 1,
  &(vtc_S2032C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,148), // object size
  NSPAIRA(_ZTI8S2032C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2032C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2032C1  : S2032C2 , S2032C9 {
  ::S2032C13 s2032c1f0;
  void *s2032c1f1;
  virtual  ~S2032C1(); // _ZN7S2032C1D1Ev
  virtual void  v1(); // _ZN7S2032C12v1Ev
  virtual void  v2(); // _ZN7S2032C12v2Ev
  virtual void  v3(); // _ZN7S2032C12v3Ev
  virtual void  v4(); // _ZN7S2032C12v4Ev
  virtual void  v5(); // _ZN7S2032C12v5Ev
  virtual void  v6(); // _ZN7S2032C12v6Ev
  virtual void  v7(); // _ZN7S2032C12v7Ev
  virtual void  v8(); // _ZN7S2032C12v8Ev
  virtual void  v9(); // _ZN7S2032C12v9Ev
  virtual void  v10(); // _ZN7S2032C13v10Ev
  virtual void  v11(); // _ZN7S2032C13v11Ev
  virtual void  v12(); // _ZN7S2032C13v12Ev
  virtual void  v13(); // _ZN7S2032C13v13Ev
  S2032C1(); // tgen
};
//SIG(1 S2032C1) C1{ BC2{ BC3{ BC4{ vd v14 v15 v16} vd v17 v18 v19} vd v20 v21 v22 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ FL[4]}} Fc} BC9{ BC10{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 Fp[2]} vd v37 v38 v39 v40 v41 v42 v43 FC11{ m Fp Fi[2] FC12{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC13{ BC14{ vd} Fi FC15{ Fi FC16{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}} Fp}


 S2032C1 ::~S2032C1(){ note_dtor("S2032C1", this);}
void  S2032C1 ::v1(){vfunc_called(this, "_ZN7S2032C12v1Ev");}
void  S2032C1 ::v2(){vfunc_called(this, "_ZN7S2032C12v2Ev");}
void  S2032C1 ::v3(){vfunc_called(this, "_ZN7S2032C12v3Ev");}
void  S2032C1 ::v4(){vfunc_called(this, "_ZN7S2032C12v4Ev");}
void  S2032C1 ::v5(){vfunc_called(this, "_ZN7S2032C12v5Ev");}
void  S2032C1 ::v6(){vfunc_called(this, "_ZN7S2032C12v6Ev");}
void  S2032C1 ::v7(){vfunc_called(this, "_ZN7S2032C12v7Ev");}
void  S2032C1 ::v8(){vfunc_called(this, "_ZN7S2032C12v8Ev");}
void  S2032C1 ::v9(){vfunc_called(this, "_ZN7S2032C12v9Ev");}
void  S2032C1 ::v10(){vfunc_called(this, "_ZN7S2032C13v10Ev");}
void  S2032C1 ::v11(){vfunc_called(this, "_ZN7S2032C13v11Ev");}
void  S2032C1 ::v12(){vfunc_called(this, "_ZN7S2032C13v12Ev");}
void  S2032C1 ::v13(){vfunc_called(this, "_ZN7S2032C13v13Ev");}
S2032C1 ::S2032C1(){ note_ctor("S2032C1", this);} // tgen

static void Test_S2032C1()
{
  extern Class_Descriptor cd_S2032C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,60)];
    init_test(&cd_S2032C1, buf);
    S2032C1 *dp, &lv = *(dp=new (buf) S2032C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,236), "sizeof(S2032C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2032C1)");
    check_base_class_offset(lv, (S2032C4*)(S2032C3*)(S2032C2*), 0, "S2032C1");
    check_base_class_offset(lv, (S2032C3*)(S2032C2*), 0, "S2032C1");
    check_base_class_offset(lv, (S2032C2*), 0, "S2032C1");
    check_base_class_offset(lv, (S2032C10*)(S2032C9*), ABISELECT(72,56), "S2032C1");
    check_base_class_offset(lv, (S2032C9*), ABISELECT(72,56), "S2032C1");
    check_field_offset(lv, s2032c1f0, ABISELECT(120,84), "S2032C1.s2032c1f0");
    check_field_offset(lv, s2032c1f1, ABISELECT(320,232), "S2032C1.s2032c1f1");
    test_class_info(&lv, &cd_S2032C1);
    dp->~S2032C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2032C1(Test_S2032C1, "S2032C1", ABISELECT(328,236));

#else // __cplusplus

extern void _ZN7S2032C1C1Ev();
extern void _ZN7S2032C1D1Ev();
Name_Map name_map_S2032C1[] = {
  NSPAIR(_ZN7S2032C1C1Ev),
  NSPAIR(_ZN7S2032C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2032C4;
extern VTBL_ENTRY _ZTI7S2032C4[];
extern  VTBL_ENTRY _ZTV7S2032C4[];
extern Class_Descriptor cd_S2032C3;
extern VTBL_ENTRY _ZTI7S2032C3[];
extern  VTBL_ENTRY _ZTV7S2032C3[];
extern Class_Descriptor cd_S2032C2;
extern VTBL_ENTRY _ZTI7S2032C2[];
extern  VTBL_ENTRY _ZTV7S2032C2[];
extern Class_Descriptor cd_S2032C10;
extern VTBL_ENTRY _ZTI8S2032C10[];
extern  VTBL_ENTRY _ZTV8S2032C10[];
extern Class_Descriptor cd_S2032C9;
extern VTBL_ENTRY _ZTI7S2032C9[];
extern  VTBL_ENTRY _ZTV7S2032C9[];
static Base_Class bases_S2032C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2032C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2032C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2032C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2032C10,    ABISELECT(72,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2032C9,    ABISELECT(72,56), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2032C1[];
extern void _ZN7S2032C1D1Ev();
extern void _ZN7S2032C1D0Ev();
extern void _ZN7S2032C43v14Ev();
extern void _ZN7S2032C43v15Ev();
extern void _ZN7S2032C43v16Ev();
extern void _ZN7S2032C33v17Ev();
extern void _ZN7S2032C33v18Ev();
extern void _ZN7S2032C33v19Ev();
extern void _ZN7S2032C23v20Ev();
extern void _ZN7S2032C23v21Ev();
extern void _ZN7S2032C23v22Ev();
extern void _ZN7S2032C12v1Ev();
extern void _ZN7S2032C12v2Ev();
extern void _ZN7S2032C12v3Ev();
extern void _ZN7S2032C12v4Ev();
extern void _ZN7S2032C12v5Ev();
extern void _ZN7S2032C12v6Ev();
extern void _ZN7S2032C12v7Ev();
extern void _ZN7S2032C12v8Ev();
extern void _ZN7S2032C12v9Ev();
extern void _ZN7S2032C13v10Ev();
extern void _ZN7S2032C13v11Ev();
extern void _ZN7S2032C13v12Ev();
extern void _ZN7S2032C13v13Ev();
extern void ABISELECT(_ZThn72_N7S2032C1D1Ev,_ZThn56_N7S2032C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2032C1D0Ev,_ZThn56_N7S2032C1D0Ev)();
extern void _ZN8S2032C103v23Ev();
extern void _ZN8S2032C103v24Ev();
extern void _ZN8S2032C103v25Ev();
extern void _ZN8S2032C103v26Ev();
extern void _ZN8S2032C103v27Ev();
extern void _ZN8S2032C103v28Ev();
extern void _ZN8S2032C103v29Ev();
extern void _ZN8S2032C103v30Ev();
extern void _ZN8S2032C103v31Ev();
extern void _ZN8S2032C103v32Ev();
extern void _ZN8S2032C103v33Ev();
extern void _ZN8S2032C103v34Ev();
extern void _ZN8S2032C103v35Ev();
extern void _ZN8S2032C103v36Ev();
extern void _ZN7S2032C93v37Ev();
extern void _ZN7S2032C93v38Ev();
extern void _ZN7S2032C93v39Ev();
extern void _ZN7S2032C93v40Ev();
extern void _ZN7S2032C93v41Ev();
extern void _ZN7S2032C93v42Ev();
extern void _ZN7S2032C93v43Ev();
static  VTBL_ENTRY vtc_S2032C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2032C1[0]),
  (VTBL_ENTRY)&_ZN7S2032C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2032C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2032C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2032C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2032C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2032C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2032C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2032C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2032C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2032C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2032C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2032C13v13Ev,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S2032C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2032C1D1Ev,_ZThn56_N7S2032C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2032C1D0Ev,_ZThn56_N7S2032C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2032C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v35Ev,
  (VTBL_ENTRY)&_ZN8S2032C103v36Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v42Ev,
  (VTBL_ENTRY)&_ZN7S2032C93v43Ev,
};
extern VTBL_ENTRY _ZTI7S2032C1[];
extern  VTBL_ENTRY _ZTV7S2032C1[];
Class_Descriptor cd_S2032C1 = {  "S2032C1", // class name
  bases_S2032C1, 5,
  &(vtc_S2032C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,236), // object size
  NSPAIRA(_ZTI7S2032C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2032C1),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  S2031C4  {
  virtual  ~S2031C4(); // _ZN7S2031C4D1Ev
  virtual void  v14(); // _ZN7S2031C43v14Ev
  virtual void  v15(); // _ZN7S2031C43v15Ev
  virtual void  v16(); // _ZN7S2031C43v16Ev
  S2031C4(); // tgen
};
//SIG(-1 S2031C4) C1{ vd v1 v2 v3}


 S2031C4 ::~S2031C4(){ note_dtor("S2031C4", this);}
void  S2031C4 ::v14(){vfunc_called(this, "_ZN7S2031C43v14Ev");}
void  S2031C4 ::v15(){vfunc_called(this, "_ZN7S2031C43v15Ev");}
void  S2031C4 ::v16(){vfunc_called(this, "_ZN7S2031C43v16Ev");}
S2031C4 ::S2031C4(){ note_ctor("S2031C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2031C4C1Ev();
extern void _ZN7S2031C4D1Ev();
Name_Map name_map_S2031C4[] = {
  NSPAIR(_ZN7S2031C4C1Ev),
  NSPAIR(_ZN7S2031C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2031C4[];
extern void _ZN7S2031C4D1Ev();
extern void _ZN7S2031C4D0Ev();
extern void _ZN7S2031C43v14Ev();
extern void _ZN7S2031C43v15Ev();
extern void _ZN7S2031C43v16Ev();
static  VTBL_ENTRY vtc_S2031C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2031C4[0]),
  (VTBL_ENTRY)&_ZN7S2031C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2031C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v16Ev,
};
extern VTBL_ENTRY _ZTI7S2031C4[];
extern  VTBL_ENTRY _ZTV7S2031C4[];
Class_Descriptor cd_S2031C4 = {  "S2031C4", // class name
  0,0,//no base classes
  &(vtc_S2031C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2031C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2031C4),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  S2031C3  : S2031C4 {
  virtual  ~S2031C3(); // _ZN7S2031C3D1Ev
  virtual void  v17(); // _ZN7S2031C33v17Ev
  virtual void  v18(); // _ZN7S2031C33v18Ev
  virtual void  v19(); // _ZN7S2031C33v19Ev
  S2031C3(); // tgen
};
//SIG(-1 S2031C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2031C3 ::~S2031C3(){ note_dtor("S2031C3", this);}
void  S2031C3 ::v17(){vfunc_called(this, "_ZN7S2031C33v17Ev");}
void  S2031C3 ::v18(){vfunc_called(this, "_ZN7S2031C33v18Ev");}
void  S2031C3 ::v19(){vfunc_called(this, "_ZN7S2031C33v19Ev");}
S2031C3 ::S2031C3(){ note_ctor("S2031C3", this);} // tgen

static void Test_S2031C3()
{
  extern Class_Descriptor cd_S2031C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2031C3, buf);
    S2031C3 *dp, &lv = *(dp=new (buf) S2031C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2031C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2031C3)");
    check_base_class_offset(lv, (S2031C4*), 0, "S2031C3");
    test_class_info(&lv, &cd_S2031C3);
    dp->~S2031C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2031C3(Test_S2031C3, "S2031C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2031C3C1Ev();
extern void _ZN7S2031C3D1Ev();
Name_Map name_map_S2031C3[] = {
  NSPAIR(_ZN7S2031C3C1Ev),
  NSPAIR(_ZN7S2031C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2031C4;
extern VTBL_ENTRY _ZTI7S2031C4[];
extern  VTBL_ENTRY _ZTV7S2031C4[];
static Base_Class bases_S2031C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2031C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2031C3[];
extern void _ZN7S2031C3D1Ev();
extern void _ZN7S2031C3D0Ev();
extern void _ZN7S2031C43v14Ev();
extern void _ZN7S2031C43v15Ev();
extern void _ZN7S2031C43v16Ev();
extern void _ZN7S2031C33v17Ev();
extern void _ZN7S2031C33v18Ev();
extern void _ZN7S2031C33v19Ev();
static  VTBL_ENTRY vtc_S2031C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2031C3[0]),
  (VTBL_ENTRY)&_ZN7S2031C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2031C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v19Ev,
};
extern VTBL_ENTRY _ZTI7S2031C3[];
extern  VTBL_ENTRY _ZTV7S2031C3[];
Class_Descriptor cd_S2031C3 = {  "S2031C3", // class name
  bases_S2031C3, 1,
  &(vtc_S2031C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2031C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2031C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2031C2  : S2031C3 {
  ::S7368C77 s2031c2f0;
  ::S10256C6_nt s2031c2f1;
  char s2031c2f2;
  virtual  ~S2031C2(); // _ZN7S2031C2D1Ev
  virtual void  v20(); // _ZN7S2031C23v20Ev
  virtual void  v21(); // _ZN7S2031C23v21Ev
  virtual void  v22(); // _ZN7S2031C23v22Ev
  S2031C2(); // tgen
};
//SIG(-1 S2031C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc}


 S2031C2 ::~S2031C2(){ note_dtor("S2031C2", this);}
void  S2031C2 ::v20(){vfunc_called(this, "_ZN7S2031C23v20Ev");}
void  S2031C2 ::v21(){vfunc_called(this, "_ZN7S2031C23v21Ev");}
void  S2031C2 ::v22(){vfunc_called(this, "_ZN7S2031C23v22Ev");}
S2031C2 ::S2031C2(){ note_ctor("S2031C2", this);} // tgen

static void Test_S2031C2()
{
  extern Class_Descriptor cd_S2031C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S2031C2, buf);
    S2031C2 *dp, &lv = *(dp=new (buf) S2031C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S2031C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2031C2)");
    check_base_class_offset(lv, (S2031C4*)(S2031C3*), 0, "S2031C2");
    check_base_class_offset(lv, (S2031C3*), 0, "S2031C2");
    check_field_offset(lv, s2031c2f0, ABISELECT(8,4), "S2031C2.s2031c2f0");
    check_field_offset(lv, s2031c2f1, ABISELECT(32,20), "S2031C2.s2031c2f1");
    check_field_offset(lv, s2031c2f2, ABISELECT(64,36), "S2031C2.s2031c2f2");
    test_class_info(&lv, &cd_S2031C2);
    dp->~S2031C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2031C2(Test_S2031C2, "S2031C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S2031C2C1Ev();
extern void _ZN7S2031C2D1Ev();
Name_Map name_map_S2031C2[] = {
  NSPAIR(_ZN7S2031C2C1Ev),
  NSPAIR(_ZN7S2031C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2031C4;
extern VTBL_ENTRY _ZTI7S2031C4[];
extern  VTBL_ENTRY _ZTV7S2031C4[];
extern Class_Descriptor cd_S2031C3;
extern VTBL_ENTRY _ZTI7S2031C3[];
extern  VTBL_ENTRY _ZTV7S2031C3[];
static Base_Class bases_S2031C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2031C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2031C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2031C2[];
extern void _ZN7S2031C2D1Ev();
extern void _ZN7S2031C2D0Ev();
extern void _ZN7S2031C43v14Ev();
extern void _ZN7S2031C43v15Ev();
extern void _ZN7S2031C43v16Ev();
extern void _ZN7S2031C33v17Ev();
extern void _ZN7S2031C33v18Ev();
extern void _ZN7S2031C33v19Ev();
extern void _ZN7S2031C23v20Ev();
extern void _ZN7S2031C23v21Ev();
extern void _ZN7S2031C23v22Ev();
static  VTBL_ENTRY vtc_S2031C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2031C2[0]),
  (VTBL_ENTRY)&_ZN7S2031C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2031C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2031C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2031C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2031C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S2031C2[];
extern  VTBL_ENTRY _ZTV7S2031C2[];
Class_Descriptor cd_S2031C2 = {  "S2031C2", // class name
  bases_S2031C2, 2,
  &(vtc_S2031C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S2031C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2031C2),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  S2031C10  {
  void *s2031c10f0[2];
  virtual  ~S2031C10(); // _ZN8S2031C10D1Ev
  virtual void  v23(); // _ZN8S2031C103v23Ev
  virtual void  v24(); // _ZN8S2031C103v24Ev
  virtual void  v25(); // _ZN8S2031C103v25Ev
  virtual void  v26(); // _ZN8S2031C103v26Ev
  virtual void  v27(); // _ZN8S2031C103v27Ev
  virtual void  v28(); // _ZN8S2031C103v28Ev
  virtual void  v29(); // _ZN8S2031C103v29Ev
  virtual void  v30(); // _ZN8S2031C103v30Ev
  virtual void  v31(); // _ZN8S2031C103v31Ev
  virtual void  v32(); // _ZN8S2031C103v32Ev
  virtual void  v33(); // _ZN8S2031C103v33Ev
  virtual void  v34(); // _ZN8S2031C103v34Ev
  virtual void  v35(); // _ZN8S2031C103v35Ev
  virtual void  v36(); // _ZN8S2031C103v36Ev
  S2031C10(); // tgen
};
//SIG(-1 S2031C10) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2031C10 ::~S2031C10(){ note_dtor("S2031C10", this);}
void  S2031C10 ::v23(){vfunc_called(this, "_ZN8S2031C103v23Ev");}
void  S2031C10 ::v24(){vfunc_called(this, "_ZN8S2031C103v24Ev");}
void  S2031C10 ::v25(){vfunc_called(this, "_ZN8S2031C103v25Ev");}
void  S2031C10 ::v26(){vfunc_called(this, "_ZN8S2031C103v26Ev");}
void  S2031C10 ::v27(){vfunc_called(this, "_ZN8S2031C103v27Ev");}
void  S2031C10 ::v28(){vfunc_called(this, "_ZN8S2031C103v28Ev");}
void  S2031C10 ::v29(){vfunc_called(this, "_ZN8S2031C103v29Ev");}
void  S2031C10 ::v30(){vfunc_called(this, "_ZN8S2031C103v30Ev");}
void  S2031C10 ::v31(){vfunc_called(this, "_ZN8S2031C103v31Ev");}
void  S2031C10 ::v32(){vfunc_called(this, "_ZN8S2031C103v32Ev");}
void  S2031C10 ::v33(){vfunc_called(this, "_ZN8S2031C103v33Ev");}
void  S2031C10 ::v34(){vfunc_called(this, "_ZN8S2031C103v34Ev");}
void  S2031C10 ::v35(){vfunc_called(this, "_ZN8S2031C103v35Ev");}
void  S2031C10 ::v36(){vfunc_called(this, "_ZN8S2031C103v36Ev");}
S2031C10 ::S2031C10(){ note_ctor("S2031C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2031C10C1Ev();
extern void _ZN8S2031C10D1Ev();
Name_Map name_map_S2031C10[] = {
  NSPAIR(_ZN8S2031C10C1Ev),
  NSPAIR(_ZN8S2031C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2031C10[];
extern void _ZN8S2031C10D1Ev();
extern void _ZN8S2031C10D0Ev();
extern void _ZN8S2031C103v23Ev();
extern void _ZN8S2031C103v24Ev();
extern void _ZN8S2031C103v25Ev();
extern void _ZN8S2031C103v26Ev();
extern void _ZN8S2031C103v27Ev();
extern void _ZN8S2031C103v28Ev();
extern void _ZN8S2031C103v29Ev();
extern void _ZN8S2031C103v30Ev();
extern void _ZN8S2031C103v31Ev();
extern void _ZN8S2031C103v32Ev();
extern void _ZN8S2031C103v33Ev();
extern void _ZN8S2031C103v34Ev();
extern void _ZN8S2031C103v35Ev();
extern void _ZN8S2031C103v36Ev();
static  VTBL_ENTRY vtc_S2031C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2031C10[0]),
  (VTBL_ENTRY)&_ZN8S2031C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2031C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v35Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v36Ev,
};
extern VTBL_ENTRY _ZTI8S2031C10[];
extern  VTBL_ENTRY _ZTV8S2031C10[];
Class_Descriptor cd_S2031C10 = {  "S2031C10", // class name
  0,0,//no base classes
  &(vtc_S2031C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S2031C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2031C10),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2031C9  : S2031C10 {
  ::S7368C58 s2031c9f0;
  virtual  ~S2031C9(); // _ZN7S2031C9D1Ev
  virtual void  v37(); // _ZN7S2031C93v37Ev
  virtual void  v38(); // _ZN7S2031C93v38Ev
  virtual void  v39(); // _ZN7S2031C93v39Ev
  virtual void  v40(); // _ZN7S2031C93v40Ev
  virtual void  v41(); // _ZN7S2031C93v41Ev
  virtual void  v42(); // _ZN7S2031C93v42Ev
  virtual void  v43(); // _ZN7S2031C93v43Ev
  S2031C9(); // tgen
};
//SIG(-1 S2031C9) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2031C9 ::~S2031C9(){ note_dtor("S2031C9", this);}
void  S2031C9 ::v37(){vfunc_called(this, "_ZN7S2031C93v37Ev");}
void  S2031C9 ::v38(){vfunc_called(this, "_ZN7S2031C93v38Ev");}
void  S2031C9 ::v39(){vfunc_called(this, "_ZN7S2031C93v39Ev");}
void  S2031C9 ::v40(){vfunc_called(this, "_ZN7S2031C93v40Ev");}
void  S2031C9 ::v41(){vfunc_called(this, "_ZN7S2031C93v41Ev");}
void  S2031C9 ::v42(){vfunc_called(this, "_ZN7S2031C93v42Ev");}
void  S2031C9 ::v43(){vfunc_called(this, "_ZN7S2031C93v43Ev");}
S2031C9 ::S2031C9(){ note_ctor("S2031C9", this);} // tgen

static void Test_S2031C9()
{
  extern Class_Descriptor cd_S2031C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2031C9, buf);
    S2031C9 *dp, &lv = *(dp=new (buf) S2031C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2031C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2031C9)");
    check_base_class_offset(lv, (S2031C10*), 0, "S2031C9");
    check_field_offset(lv, s2031c9f0, ABISELECT(24,12), "S2031C9.s2031c9f0");
    test_class_info(&lv, &cd_S2031C9);
    dp->~S2031C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2031C9(Test_S2031C9, "S2031C9", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2031C9C1Ev();
extern void _ZN7S2031C9D1Ev();
Name_Map name_map_S2031C9[] = {
  NSPAIR(_ZN7S2031C9C1Ev),
  NSPAIR(_ZN7S2031C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2031C10;
extern VTBL_ENTRY _ZTI8S2031C10[];
extern  VTBL_ENTRY _ZTV8S2031C10[];
static Base_Class bases_S2031C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2031C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2031C9[];
extern void _ZN7S2031C9D1Ev();
extern void _ZN7S2031C9D0Ev();
extern void _ZN8S2031C103v23Ev();
extern void _ZN8S2031C103v24Ev();
extern void _ZN8S2031C103v25Ev();
extern void _ZN8S2031C103v26Ev();
extern void _ZN8S2031C103v27Ev();
extern void _ZN8S2031C103v28Ev();
extern void _ZN8S2031C103v29Ev();
extern void _ZN8S2031C103v30Ev();
extern void _ZN8S2031C103v31Ev();
extern void _ZN8S2031C103v32Ev();
extern void _ZN8S2031C103v33Ev();
extern void _ZN8S2031C103v34Ev();
extern void _ZN8S2031C103v35Ev();
extern void _ZN8S2031C103v36Ev();
extern void _ZN7S2031C93v37Ev();
extern void _ZN7S2031C93v38Ev();
extern void _ZN7S2031C93v39Ev();
extern void _ZN7S2031C93v40Ev();
extern void _ZN7S2031C93v41Ev();
extern void _ZN7S2031C93v42Ev();
extern void _ZN7S2031C93v43Ev();
static  VTBL_ENTRY vtc_S2031C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2031C9[0]),
  (VTBL_ENTRY)&_ZN7S2031C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2031C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v35Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v36Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v42Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v43Ev,
};
extern VTBL_ENTRY _ZTI7S2031C9[];
extern  VTBL_ENTRY _ZTV7S2031C9[];
Class_Descriptor cd_S2031C9 = {  "S2031C9", // class name
  bases_S2031C9, 1,
  &(vtc_S2031C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2031C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2031C9),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2031C1  : S2031C2 , S2031C9 {
  ::S2032C13 s2031c1f0;
  void *s2031c1f1;
  virtual  ~S2031C1(); // _ZN7S2031C1D1Ev
  virtual void  v1(); // _ZN7S2031C12v1Ev
  virtual void  v2(); // _ZN7S2031C12v2Ev
  virtual void  v3(); // _ZN7S2031C12v3Ev
  virtual void  v4(); // _ZN7S2031C12v4Ev
  virtual void  v5(); // _ZN7S2031C12v5Ev
  virtual void  v6(); // _ZN7S2031C12v6Ev
  virtual void  v7(); // _ZN7S2031C12v7Ev
  virtual void  v8(); // _ZN7S2031C12v8Ev
  virtual void  v9(); // _ZN7S2031C12v9Ev
  virtual void  v10(); // _ZN7S2031C13v10Ev
  virtual void  v11(); // _ZN7S2031C13v11Ev
  virtual void  v12(); // _ZN7S2031C13v12Ev
  virtual void  v13(); // _ZN7S2031C13v13Ev
  S2031C1(); // tgen
};
//SIG(1 S2031C1) C1{ BC2{ BC3{ BC4{ vd v14 v15 v16} vd v17 v18 v19} vd v20 v21 v22 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FC8{ Fl[4]}} Fc} BC9{ BC10{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 Fp[2]} vd v37 v38 v39 v40 v41 v42 v43 FC11{ m Fp Fi[2] FC12{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC13{ BC14{ vd} Fi FC15{ Fi FC16{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}} Fp}


 S2031C1 ::~S2031C1(){ note_dtor("S2031C1", this);}
void  S2031C1 ::v1(){vfunc_called(this, "_ZN7S2031C12v1Ev");}
void  S2031C1 ::v2(){vfunc_called(this, "_ZN7S2031C12v2Ev");}
void  S2031C1 ::v3(){vfunc_called(this, "_ZN7S2031C12v3Ev");}
void  S2031C1 ::v4(){vfunc_called(this, "_ZN7S2031C12v4Ev");}
void  S2031C1 ::v5(){vfunc_called(this, "_ZN7S2031C12v5Ev");}
void  S2031C1 ::v6(){vfunc_called(this, "_ZN7S2031C12v6Ev");}
void  S2031C1 ::v7(){vfunc_called(this, "_ZN7S2031C12v7Ev");}
void  S2031C1 ::v8(){vfunc_called(this, "_ZN7S2031C12v8Ev");}
void  S2031C1 ::v9(){vfunc_called(this, "_ZN7S2031C12v9Ev");}
void  S2031C1 ::v10(){vfunc_called(this, "_ZN7S2031C13v10Ev");}
void  S2031C1 ::v11(){vfunc_called(this, "_ZN7S2031C13v11Ev");}
void  S2031C1 ::v12(){vfunc_called(this, "_ZN7S2031C13v12Ev");}
void  S2031C1 ::v13(){vfunc_called(this, "_ZN7S2031C13v13Ev");}
S2031C1 ::S2031C1(){ note_ctor("S2031C1", this);} // tgen

static void Test_S2031C1()
{
  extern Class_Descriptor cd_S2031C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,56)];
    init_test(&cd_S2031C1, buf);
    S2031C1 *dp, &lv = *(dp=new (buf) S2031C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,220), "sizeof(S2031C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2031C1)");
    check_base_class_offset(lv, (S2031C4*)(S2031C3*)(S2031C2*), 0, "S2031C1");
    check_base_class_offset(lv, (S2031C3*)(S2031C2*), 0, "S2031C1");
    check_base_class_offset(lv, (S2031C2*), 0, "S2031C1");
    check_base_class_offset(lv, (S2031C10*)(S2031C9*), ABISELECT(72,40), "S2031C1");
    check_base_class_offset(lv, (S2031C9*), ABISELECT(72,40), "S2031C1");
    check_field_offset(lv, s2031c1f0, ABISELECT(120,68), "S2031C1.s2031c1f0");
    check_field_offset(lv, s2031c1f1, ABISELECT(320,216), "S2031C1.s2031c1f1");
    test_class_info(&lv, &cd_S2031C1);
    dp->~S2031C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2031C1(Test_S2031C1, "S2031C1", ABISELECT(328,220));

#else // __cplusplus

extern void _ZN7S2031C1C1Ev();
extern void _ZN7S2031C1D1Ev();
Name_Map name_map_S2031C1[] = {
  NSPAIR(_ZN7S2031C1C1Ev),
  NSPAIR(_ZN7S2031C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2031C4;
extern VTBL_ENTRY _ZTI7S2031C4[];
extern  VTBL_ENTRY _ZTV7S2031C4[];
extern Class_Descriptor cd_S2031C3;
extern VTBL_ENTRY _ZTI7S2031C3[];
extern  VTBL_ENTRY _ZTV7S2031C3[];
extern Class_Descriptor cd_S2031C2;
extern VTBL_ENTRY _ZTI7S2031C2[];
extern  VTBL_ENTRY _ZTV7S2031C2[];
extern Class_Descriptor cd_S2031C10;
extern VTBL_ENTRY _ZTI8S2031C10[];
extern  VTBL_ENTRY _ZTV8S2031C10[];
extern Class_Descriptor cd_S2031C9;
extern VTBL_ENTRY _ZTI7S2031C9[];
extern  VTBL_ENTRY _ZTV7S2031C9[];
static Base_Class bases_S2031C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2031C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2031C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2031C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2031C10,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2031C9,    ABISELECT(72,40), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2031C1[];
extern void _ZN7S2031C1D1Ev();
extern void _ZN7S2031C1D0Ev();
extern void _ZN7S2031C43v14Ev();
extern void _ZN7S2031C43v15Ev();
extern void _ZN7S2031C43v16Ev();
extern void _ZN7S2031C33v17Ev();
extern void _ZN7S2031C33v18Ev();
extern void _ZN7S2031C33v19Ev();
extern void _ZN7S2031C23v20Ev();
extern void _ZN7S2031C23v21Ev();
extern void _ZN7S2031C23v22Ev();
extern void _ZN7S2031C12v1Ev();
extern void _ZN7S2031C12v2Ev();
extern void _ZN7S2031C12v3Ev();
extern void _ZN7S2031C12v4Ev();
extern void _ZN7S2031C12v5Ev();
extern void _ZN7S2031C12v6Ev();
extern void _ZN7S2031C12v7Ev();
extern void _ZN7S2031C12v8Ev();
extern void _ZN7S2031C12v9Ev();
extern void _ZN7S2031C13v10Ev();
extern void _ZN7S2031C13v11Ev();
extern void _ZN7S2031C13v12Ev();
extern void _ZN7S2031C13v13Ev();
extern void ABISELECT(_ZThn72_N7S2031C1D1Ev,_ZThn40_N7S2031C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2031C1D0Ev,_ZThn40_N7S2031C1D0Ev)();
extern void _ZN8S2031C103v23Ev();
extern void _ZN8S2031C103v24Ev();
extern void _ZN8S2031C103v25Ev();
extern void _ZN8S2031C103v26Ev();
extern void _ZN8S2031C103v27Ev();
extern void _ZN8S2031C103v28Ev();
extern void _ZN8S2031C103v29Ev();
extern void _ZN8S2031C103v30Ev();
extern void _ZN8S2031C103v31Ev();
extern void _ZN8S2031C103v32Ev();
extern void _ZN8S2031C103v33Ev();
extern void _ZN8S2031C103v34Ev();
extern void _ZN8S2031C103v35Ev();
extern void _ZN8S2031C103v36Ev();
extern void _ZN7S2031C93v37Ev();
extern void _ZN7S2031C93v38Ev();
extern void _ZN7S2031C93v39Ev();
extern void _ZN7S2031C93v40Ev();
extern void _ZN7S2031C93v41Ev();
extern void _ZN7S2031C93v42Ev();
extern void _ZN7S2031C93v43Ev();
static  VTBL_ENTRY vtc_S2031C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2031C1[0]),
  (VTBL_ENTRY)&_ZN7S2031C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2031C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2031C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2031C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2031C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2031C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2031C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2031C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2031C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2031C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2031C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2031C13v13Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2031C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2031C1D1Ev,_ZThn40_N7S2031C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2031C1D0Ev,_ZThn40_N7S2031C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2031C103v23Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v24Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v25Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v26Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v27Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v28Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v29Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v30Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v31Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v32Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v33Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v34Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v35Ev,
  (VTBL_ENTRY)&_ZN8S2031C103v36Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v37Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v38Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v39Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v40Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v41Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v42Ev,
  (VTBL_ENTRY)&_ZN7S2031C93v43Ev,
};
extern VTBL_ENTRY _ZTI7S2031C1[];
extern  VTBL_ENTRY _ZTV7S2031C1[];
Class_Descriptor cd_S2031C1 = {  "S2031C1", // class name
  bases_S2031C1, 5,
  &(vtc_S2031C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,220), // object size
  NSPAIRA(_ZTI7S2031C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2031C1),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  S2034C4  {
  virtual  ~S2034C4(); // _ZN7S2034C4D1Ev
  virtual void  v14(); // _ZN7S2034C43v14Ev
  virtual void  v15(); // _ZN7S2034C43v15Ev
  virtual void  v16(); // _ZN7S2034C43v16Ev
  S2034C4(); // tgen
};
//SIG(-1 S2034C4) C1{ vd v1 v2 v3}


 S2034C4 ::~S2034C4(){ note_dtor("S2034C4", this);}
void  S2034C4 ::v14(){vfunc_called(this, "_ZN7S2034C43v14Ev");}
void  S2034C4 ::v15(){vfunc_called(this, "_ZN7S2034C43v15Ev");}
void  S2034C4 ::v16(){vfunc_called(this, "_ZN7S2034C43v16Ev");}
S2034C4 ::S2034C4(){ note_ctor("S2034C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2034C4C1Ev();
extern void _ZN7S2034C4D1Ev();
Name_Map name_map_S2034C4[] = {
  NSPAIR(_ZN7S2034C4C1Ev),
  NSPAIR(_ZN7S2034C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2034C4[];
extern void _ZN7S2034C4D1Ev();
extern void _ZN7S2034C4D0Ev();
extern void _ZN7S2034C43v14Ev();
extern void _ZN7S2034C43v15Ev();
extern void _ZN7S2034C43v16Ev();
static  VTBL_ENTRY vtc_S2034C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2034C4[0]),
  (VTBL_ENTRY)&_ZN7S2034C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2034C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v16Ev,
};
extern VTBL_ENTRY _ZTI7S2034C4[];
extern  VTBL_ENTRY _ZTV7S2034C4[];
Class_Descriptor cd_S2034C4 = {  "S2034C4", // class name
  0,0,//no base classes
  &(vtc_S2034C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2034C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2034C4),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  S2034C3  : S2034C4 {
  virtual  ~S2034C3(); // _ZN7S2034C3D1Ev
  virtual void  v17(); // _ZN7S2034C33v17Ev
  virtual void  v18(); // _ZN7S2034C33v18Ev
  virtual void  v19(); // _ZN7S2034C33v19Ev
  S2034C3(); // tgen
};
//SIG(-1 S2034C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3}


 S2034C3 ::~S2034C3(){ note_dtor("S2034C3", this);}
void  S2034C3 ::v17(){vfunc_called(this, "_ZN7S2034C33v17Ev");}
void  S2034C3 ::v18(){vfunc_called(this, "_ZN7S2034C33v18Ev");}
void  S2034C3 ::v19(){vfunc_called(this, "_ZN7S2034C33v19Ev");}
S2034C3 ::S2034C3(){ note_ctor("S2034C3", this);} // tgen

static void Test_S2034C3()
{
  extern Class_Descriptor cd_S2034C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2034C3, buf);
    S2034C3 *dp, &lv = *(dp=new (buf) S2034C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2034C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2034C3)");
    check_base_class_offset(lv, (S2034C4*), 0, "S2034C3");
    test_class_info(&lv, &cd_S2034C3);
    dp->~S2034C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2034C3(Test_S2034C3, "S2034C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2034C3C1Ev();
extern void _ZN7S2034C3D1Ev();
Name_Map name_map_S2034C3[] = {
  NSPAIR(_ZN7S2034C3C1Ev),
  NSPAIR(_ZN7S2034C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2034C4;
extern VTBL_ENTRY _ZTI7S2034C4[];
extern  VTBL_ENTRY _ZTV7S2034C4[];
static Base_Class bases_S2034C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2034C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2034C3[];
extern void _ZN7S2034C3D1Ev();
extern void _ZN7S2034C3D0Ev();
extern void _ZN7S2034C43v14Ev();
extern void _ZN7S2034C43v15Ev();
extern void _ZN7S2034C43v16Ev();
extern void _ZN7S2034C33v17Ev();
extern void _ZN7S2034C33v18Ev();
extern void _ZN7S2034C33v19Ev();
static  VTBL_ENTRY vtc_S2034C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2034C3[0]),
  (VTBL_ENTRY)&_ZN7S2034C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2034C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v19Ev,
};
extern VTBL_ENTRY _ZTI7S2034C3[];
extern  VTBL_ENTRY _ZTV7S2034C3[];
Class_Descriptor cd_S2034C3 = {  "S2034C3", // class name
  bases_S2034C3, 1,
  &(vtc_S2034C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2034C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2034C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2034C2  : S2034C3 {
  ::S7368C77 s2034c2f0;
  ::S2013C7_nt s2034c2f1;
  char s2034c2f2;
  virtual  ~S2034C2(); // _ZN7S2034C2D1Ev
  virtual void  v20(); // _ZN7S2034C23v20Ev
  virtual void  v21(); // _ZN7S2034C23v21Ev
  virtual void  v22(); // _ZN7S2034C23v22Ev
  S2034C2(); // tgen
};
//SIG(-1 S2034C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9} vd v1 v2 v3 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc}


 S2034C2 ::~S2034C2(){ note_dtor("S2034C2", this);}
void  S2034C2 ::v20(){vfunc_called(this, "_ZN7S2034C23v20Ev");}
void  S2034C2 ::v21(){vfunc_called(this, "_ZN7S2034C23v21Ev");}
void  S2034C2 ::v22(){vfunc_called(this, "_ZN7S2034C23v22Ev");}
S2034C2 ::S2034C2(){ note_ctor("S2034C2", this);} // tgen

static void Test_S2034C2()
{
  extern Class_Descriptor cd_S2034C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2034C2, buf);
    S2034C2 *dp, &lv = *(dp=new (buf) S2034C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2034C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2034C2)");
    check_base_class_offset(lv, (S2034C4*)(S2034C3*), 0, "S2034C2");
    check_base_class_offset(lv, (S2034C3*), 0, "S2034C2");
    check_field_offset(lv, s2034c2f0, ABISELECT(8,4), "S2034C2.s2034c2f0");
    check_field_offset(lv, s2034c2f1, ABISELECT(32,20), "S2034C2.s2034c2f1");
    check_field_offset(lv, s2034c2f2, ABISELECT(64,52), "S2034C2.s2034c2f2");
    test_class_info(&lv, &cd_S2034C2);
    dp->~S2034C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2034C2(Test_S2034C2, "S2034C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2034C2C1Ev();
extern void _ZN7S2034C2D1Ev();
Name_Map name_map_S2034C2[] = {
  NSPAIR(_ZN7S2034C2C1Ev),
  NSPAIR(_ZN7S2034C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2034C4;
extern VTBL_ENTRY _ZTI7S2034C4[];
extern  VTBL_ENTRY _ZTV7S2034C4[];
extern Class_Descriptor cd_S2034C3;
extern VTBL_ENTRY _ZTI7S2034C3[];
extern  VTBL_ENTRY _ZTV7S2034C3[];
static Base_Class bases_S2034C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2034C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2034C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2034C2[];
extern void _ZN7S2034C2D1Ev();
extern void _ZN7S2034C2D0Ev();
extern void _ZN7S2034C43v14Ev();
extern void _ZN7S2034C43v15Ev();
extern void _ZN7S2034C43v16Ev();
extern void _ZN7S2034C33v17Ev();
extern void _ZN7S2034C33v18Ev();
extern void _ZN7S2034C33v19Ev();
extern void _ZN7S2034C23v20Ev();
extern void _ZN7S2034C23v21Ev();
extern void _ZN7S2034C23v22Ev();
static  VTBL_ENTRY vtc_S2034C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2034C2[0]),
  (VTBL_ENTRY)&_ZN7S2034C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2034C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2034C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2034C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2034C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S2034C2[];
extern  VTBL_ENTRY _ZTV7S2034C2[];
Class_Descriptor cd_S2034C2 = {  "S2034C2", // class name
  bases_S2034C2, 2,
  &(vtc_S2034C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2034C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2034C2),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  S2034C9  {
  void *s2034c9f0[2];
  virtual  ~S2034C9(); // _ZN7S2034C9D1Ev
  virtual void  v23(); // _ZN7S2034C93v23Ev
  virtual void  v24(); // _ZN7S2034C93v24Ev
  virtual void  v25(); // _ZN7S2034C93v25Ev
  virtual void  v26(); // _ZN7S2034C93v26Ev
  virtual void  v27(); // _ZN7S2034C93v27Ev
  virtual void  v28(); // _ZN7S2034C93v28Ev
  virtual void  v29(); // _ZN7S2034C93v29Ev
  virtual void  v30(); // _ZN7S2034C93v30Ev
  virtual void  v31(); // _ZN7S2034C93v31Ev
  virtual void  v32(); // _ZN7S2034C93v32Ev
  virtual void  v33(); // _ZN7S2034C93v33Ev
  virtual void  v34(); // _ZN7S2034C93v34Ev
  virtual void  v35(); // _ZN7S2034C93v35Ev
  virtual void  v36(); // _ZN7S2034C93v36Ev
  S2034C9(); // tgen
};
//SIG(-1 S2034C9) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2]}


 S2034C9 ::~S2034C9(){ note_dtor("S2034C9", this);}
void  S2034C9 ::v23(){vfunc_called(this, "_ZN7S2034C93v23Ev");}
void  S2034C9 ::v24(){vfunc_called(this, "_ZN7S2034C93v24Ev");}
void  S2034C9 ::v25(){vfunc_called(this, "_ZN7S2034C93v25Ev");}
void  S2034C9 ::v26(){vfunc_called(this, "_ZN7S2034C93v26Ev");}
void  S2034C9 ::v27(){vfunc_called(this, "_ZN7S2034C93v27Ev");}
void  S2034C9 ::v28(){vfunc_called(this, "_ZN7S2034C93v28Ev");}
void  S2034C9 ::v29(){vfunc_called(this, "_ZN7S2034C93v29Ev");}
void  S2034C9 ::v30(){vfunc_called(this, "_ZN7S2034C93v30Ev");}
void  S2034C9 ::v31(){vfunc_called(this, "_ZN7S2034C93v31Ev");}
void  S2034C9 ::v32(){vfunc_called(this, "_ZN7S2034C93v32Ev");}
void  S2034C9 ::v33(){vfunc_called(this, "_ZN7S2034C93v33Ev");}
void  S2034C9 ::v34(){vfunc_called(this, "_ZN7S2034C93v34Ev");}
void  S2034C9 ::v35(){vfunc_called(this, "_ZN7S2034C93v35Ev");}
void  S2034C9 ::v36(){vfunc_called(this, "_ZN7S2034C93v36Ev");}
S2034C9 ::S2034C9(){ note_ctor("S2034C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2034C9C1Ev();
extern void _ZN7S2034C9D1Ev();
Name_Map name_map_S2034C9[] = {
  NSPAIR(_ZN7S2034C9C1Ev),
  NSPAIR(_ZN7S2034C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2034C9[];
extern void _ZN7S2034C9D1Ev();
extern void _ZN7S2034C9D0Ev();
extern void _ZN7S2034C93v23Ev();
extern void _ZN7S2034C93v24Ev();
extern void _ZN7S2034C93v25Ev();
extern void _ZN7S2034C93v26Ev();
extern void _ZN7S2034C93v27Ev();
extern void _ZN7S2034C93v28Ev();
extern void _ZN7S2034C93v29Ev();
extern void _ZN7S2034C93v30Ev();
extern void _ZN7S2034C93v31Ev();
extern void _ZN7S2034C93v32Ev();
extern void _ZN7S2034C93v33Ev();
extern void _ZN7S2034C93v34Ev();
extern void _ZN7S2034C93v35Ev();
extern void _ZN7S2034C93v36Ev();
static  VTBL_ENTRY vtc_S2034C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2034C9[0]),
  (VTBL_ENTRY)&_ZN7S2034C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2034C9D0Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v33Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v34Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v35Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v36Ev,
};
extern VTBL_ENTRY _ZTI7S2034C9[];
extern  VTBL_ENTRY _ZTV7S2034C9[];
Class_Descriptor cd_S2034C9 = {  "S2034C9", // class name
  0,0,//no base classes
  &(vtc_S2034C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2034C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2034C9),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2034C8  : S2034C9 {
  ::S7368C58 s2034c8f0;
  virtual  ~S2034C8(); // _ZN7S2034C8D1Ev
  virtual void  v37(); // _ZN7S2034C83v37Ev
  virtual void  v38(); // _ZN7S2034C83v38Ev
  virtual void  v39(); // _ZN7S2034C83v39Ev
  virtual void  v40(); // _ZN7S2034C83v40Ev
  virtual void  v41(); // _ZN7S2034C83v41Ev
  virtual void  v42(); // _ZN7S2034C83v42Ev
  virtual void  v43(); // _ZN7S2034C83v43Ev
  S2034C8(); // tgen
};
//SIG(-1 S2034C8) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp Fi[2] FC4{ m}}}


 S2034C8 ::~S2034C8(){ note_dtor("S2034C8", this);}
void  S2034C8 ::v37(){vfunc_called(this, "_ZN7S2034C83v37Ev");}
void  S2034C8 ::v38(){vfunc_called(this, "_ZN7S2034C83v38Ev");}
void  S2034C8 ::v39(){vfunc_called(this, "_ZN7S2034C83v39Ev");}
void  S2034C8 ::v40(){vfunc_called(this, "_ZN7S2034C83v40Ev");}
void  S2034C8 ::v41(){vfunc_called(this, "_ZN7S2034C83v41Ev");}
void  S2034C8 ::v42(){vfunc_called(this, "_ZN7S2034C83v42Ev");}
void  S2034C8 ::v43(){vfunc_called(this, "_ZN7S2034C83v43Ev");}
S2034C8 ::S2034C8(){ note_ctor("S2034C8", this);} // tgen

static void Test_S2034C8()
{
  extern Class_Descriptor cd_S2034C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S2034C8, buf);
    S2034C8 *dp, &lv = *(dp=new (buf) S2034C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S2034C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2034C8)");
    check_base_class_offset(lv, (S2034C9*), 0, "S2034C8");
    check_field_offset(lv, s2034c8f0, ABISELECT(24,12), "S2034C8.s2034c8f0");
    test_class_info(&lv, &cd_S2034C8);
    dp->~S2034C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2034C8(Test_S2034C8, "S2034C8", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S2034C8C1Ev();
extern void _ZN7S2034C8D1Ev();
Name_Map name_map_S2034C8[] = {
  NSPAIR(_ZN7S2034C8C1Ev),
  NSPAIR(_ZN7S2034C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2034C9;
extern VTBL_ENTRY _ZTI7S2034C9[];
extern  VTBL_ENTRY _ZTV7S2034C9[];
static Base_Class bases_S2034C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2034C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2034C8[];
extern void _ZN7S2034C8D1Ev();
extern void _ZN7S2034C8D0Ev();
extern void _ZN7S2034C93v23Ev();
extern void _ZN7S2034C93v24Ev();
extern void _ZN7S2034C93v25Ev();
extern void _ZN7S2034C93v26Ev();
extern void _ZN7S2034C93v27Ev();
extern void _ZN7S2034C93v28Ev();
extern void _ZN7S2034C93v29Ev();
extern void _ZN7S2034C93v30Ev();
extern void _ZN7S2034C93v31Ev();
extern void _ZN7S2034C93v32Ev();
extern void _ZN7S2034C93v33Ev();
extern void _ZN7S2034C93v34Ev();
extern void _ZN7S2034C93v35Ev();
extern void _ZN7S2034C93v36Ev();
extern void _ZN7S2034C83v37Ev();
extern void _ZN7S2034C83v38Ev();
extern void _ZN7S2034C83v39Ev();
extern void _ZN7S2034C83v40Ev();
extern void _ZN7S2034C83v41Ev();
extern void _ZN7S2034C83v42Ev();
extern void _ZN7S2034C83v43Ev();
static  VTBL_ENTRY vtc_S2034C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2034C8[0]),
  (VTBL_ENTRY)&_ZN7S2034C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2034C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v33Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v34Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v35Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v36Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v37Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v38Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v39Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v40Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v41Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v42Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v43Ev,
};
extern VTBL_ENTRY _ZTI7S2034C8[];
extern  VTBL_ENTRY _ZTV7S2034C8[];
Class_Descriptor cd_S2034C8 = {  "S2034C8", // class name
  bases_S2034C8, 1,
  &(vtc_S2034C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S2034C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2034C8),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2034C1  : S2034C2 , S2034C8 {
  ::S2032C13 s2034c1f0;
  void *s2034c1f1;
  virtual  ~S2034C1(); // _ZN7S2034C1D1Ev
  virtual void  v1(); // _ZN7S2034C12v1Ev
  virtual void  v2(); // _ZN7S2034C12v2Ev
  virtual void  v3(); // _ZN7S2034C12v3Ev
  virtual void  v4(); // _ZN7S2034C12v4Ev
  virtual void  v5(); // _ZN7S2034C12v5Ev
  virtual void  v6(); // _ZN7S2034C12v6Ev
  virtual void  v7(); // _ZN7S2034C12v7Ev
  virtual void  v8(); // _ZN7S2034C12v8Ev
  virtual void  v9(); // _ZN7S2034C12v9Ev
  virtual void  v10(); // _ZN7S2034C13v10Ev
  virtual void  v11(); // _ZN7S2034C13v11Ev
  virtual void  v12(); // _ZN7S2034C13v12Ev
  virtual void  v13(); // _ZN7S2034C13v13Ev
  S2034C1(); // tgen
};
//SIG(1 S2034C1) C1{ BC2{ BC3{ BC4{ vd v14 v15 v16} vd v17 v18 v19} vd v20 v21 v22 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} BC8{ BC9{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 Fp[2]} vd v37 v38 v39 v40 v41 v42 v43 FC10{ m Fp Fi[2] FC11{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC12{ BC13{ vd} Fi FC14{ Fi FC15{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]}} Fp}


 S2034C1 ::~S2034C1(){ note_dtor("S2034C1", this);}
void  S2034C1 ::v1(){vfunc_called(this, "_ZN7S2034C12v1Ev");}
void  S2034C1 ::v2(){vfunc_called(this, "_ZN7S2034C12v2Ev");}
void  S2034C1 ::v3(){vfunc_called(this, "_ZN7S2034C12v3Ev");}
void  S2034C1 ::v4(){vfunc_called(this, "_ZN7S2034C12v4Ev");}
void  S2034C1 ::v5(){vfunc_called(this, "_ZN7S2034C12v5Ev");}
void  S2034C1 ::v6(){vfunc_called(this, "_ZN7S2034C12v6Ev");}
void  S2034C1 ::v7(){vfunc_called(this, "_ZN7S2034C12v7Ev");}
void  S2034C1 ::v8(){vfunc_called(this, "_ZN7S2034C12v8Ev");}
void  S2034C1 ::v9(){vfunc_called(this, "_ZN7S2034C12v9Ev");}
void  S2034C1 ::v10(){vfunc_called(this, "_ZN7S2034C13v10Ev");}
void  S2034C1 ::v11(){vfunc_called(this, "_ZN7S2034C13v11Ev");}
void  S2034C1 ::v12(){vfunc_called(this, "_ZN7S2034C13v12Ev");}
void  S2034C1 ::v13(){vfunc_called(this, "_ZN7S2034C13v13Ev");}
S2034C1 ::S2034C1(){ note_ctor("S2034C1", this);} // tgen

static void Test_S2034C1()
{
  extern Class_Descriptor cd_S2034C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,60)];
    init_test(&cd_S2034C1, buf);
    S2034C1 *dp, &lv = *(dp=new (buf) S2034C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,236), "sizeof(S2034C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2034C1)");
    check_base_class_offset(lv, (S2034C4*)(S2034C3*)(S2034C2*), 0, "S2034C1");
    check_base_class_offset(lv, (S2034C3*)(S2034C2*), 0, "S2034C1");
    check_base_class_offset(lv, (S2034C2*), 0, "S2034C1");
    check_base_class_offset(lv, (S2034C9*)(S2034C8*), ABISELECT(72,56), "S2034C1");
    check_base_class_offset(lv, (S2034C8*), ABISELECT(72,56), "S2034C1");
    check_field_offset(lv, s2034c1f0, ABISELECT(120,84), "S2034C1.s2034c1f0");
    check_field_offset(lv, s2034c1f1, ABISELECT(320,232), "S2034C1.s2034c1f1");
    test_class_info(&lv, &cd_S2034C1);
    dp->~S2034C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2034C1(Test_S2034C1, "S2034C1", ABISELECT(328,236));

#else // __cplusplus

extern void _ZN7S2034C1C1Ev();
extern void _ZN7S2034C1D1Ev();
Name_Map name_map_S2034C1[] = {
  NSPAIR(_ZN7S2034C1C1Ev),
  NSPAIR(_ZN7S2034C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2034C4;
extern VTBL_ENTRY _ZTI7S2034C4[];
extern  VTBL_ENTRY _ZTV7S2034C4[];
extern Class_Descriptor cd_S2034C3;
extern VTBL_ENTRY _ZTI7S2034C3[];
extern  VTBL_ENTRY _ZTV7S2034C3[];
extern Class_Descriptor cd_S2034C2;
extern VTBL_ENTRY _ZTI7S2034C2[];
extern  VTBL_ENTRY _ZTV7S2034C2[];
extern Class_Descriptor cd_S2034C9;
extern VTBL_ENTRY _ZTI7S2034C9[];
extern  VTBL_ENTRY _ZTV7S2034C9[];
extern Class_Descriptor cd_S2034C8;
extern VTBL_ENTRY _ZTI7S2034C8[];
extern  VTBL_ENTRY _ZTV7S2034C8[];
static Base_Class bases_S2034C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2034C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2034C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2034C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2034C9,    ABISELECT(72,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2034C8,    ABISELECT(72,56), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2034C1[];
extern void _ZN7S2034C1D1Ev();
extern void _ZN7S2034C1D0Ev();
extern void _ZN7S2034C43v14Ev();
extern void _ZN7S2034C43v15Ev();
extern void _ZN7S2034C43v16Ev();
extern void _ZN7S2034C33v17Ev();
extern void _ZN7S2034C33v18Ev();
extern void _ZN7S2034C33v19Ev();
extern void _ZN7S2034C23v20Ev();
extern void _ZN7S2034C23v21Ev();
extern void _ZN7S2034C23v22Ev();
extern void _ZN7S2034C12v1Ev();
extern void _ZN7S2034C12v2Ev();
extern void _ZN7S2034C12v3Ev();
extern void _ZN7S2034C12v4Ev();
extern void _ZN7S2034C12v5Ev();
extern void _ZN7S2034C12v6Ev();
extern void _ZN7S2034C12v7Ev();
extern void _ZN7S2034C12v8Ev();
extern void _ZN7S2034C12v9Ev();
extern void _ZN7S2034C13v10Ev();
extern void _ZN7S2034C13v11Ev();
extern void _ZN7S2034C13v12Ev();
extern void _ZN7S2034C13v13Ev();
extern void ABISELECT(_ZThn72_N7S2034C1D1Ev,_ZThn56_N7S2034C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2034C1D0Ev,_ZThn56_N7S2034C1D0Ev)();
extern void _ZN7S2034C93v23Ev();
extern void _ZN7S2034C93v24Ev();
extern void _ZN7S2034C93v25Ev();
extern void _ZN7S2034C93v26Ev();
extern void _ZN7S2034C93v27Ev();
extern void _ZN7S2034C93v28Ev();
extern void _ZN7S2034C93v29Ev();
extern void _ZN7S2034C93v30Ev();
extern void _ZN7S2034C93v31Ev();
extern void _ZN7S2034C93v32Ev();
extern void _ZN7S2034C93v33Ev();
extern void _ZN7S2034C93v34Ev();
extern void _ZN7S2034C93v35Ev();
extern void _ZN7S2034C93v36Ev();
extern void _ZN7S2034C83v37Ev();
extern void _ZN7S2034C83v38Ev();
extern void _ZN7S2034C83v39Ev();
extern void _ZN7S2034C83v40Ev();
extern void _ZN7S2034C83v41Ev();
extern void _ZN7S2034C83v42Ev();
extern void _ZN7S2034C83v43Ev();
static  VTBL_ENTRY vtc_S2034C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2034C1[0]),
  (VTBL_ENTRY)&_ZN7S2034C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2034C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2034C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2034C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2034C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2034C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2034C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2034C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2034C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2034C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2034C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2034C13v13Ev,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S2034C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2034C1D1Ev,_ZThn56_N7S2034C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2034C1D0Ev,_ZThn56_N7S2034C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2034C93v23Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v27Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v28Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v29Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v30Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v31Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v32Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v33Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v34Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v35Ev,
  (VTBL_ENTRY)&_ZN7S2034C93v36Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v37Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v38Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v39Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v40Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v41Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v42Ev,
  (VTBL_ENTRY)&_ZN7S2034C83v43Ev,
};
extern VTBL_ENTRY _ZTI7S2034C1[];
extern  VTBL_ENTRY _ZTV7S2034C1[];
Class_Descriptor cd_S2034C1 = {  "S2034C1", // class name
  bases_S2034C1, 5,
  &(vtc_S2034C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,236), // object size
  NSPAIRA(_ZTI7S2034C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2034C1),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  S725C4  : S7368C49 {
  void *s725c4f0;
  ::S10256C12_nt s725c4f1;
  virtual  ~S725C4(); // _ZN6S725C4D1Ev
  virtual void  v11(); // _ZN6S725C43v11Ev
  virtual void  v12(); // _ZN6S725C43v12Ev
  virtual void  v13(); // _ZN6S725C43v13Ev
  virtual void  v14(); // _ZN6S725C43v14Ev
  virtual void  v15(); // _ZN6S725C43v15Ev
  virtual void  v16(); // _ZN6S725C43v16Ev
  virtual void  v17(); // _ZN6S725C43v17Ev
  virtual void  v18(); // _ZN6S725C43v18Ev
  virtual void  v19(); // _ZN6S725C43v19Ev
  virtual void  v20(); // _ZN6S725C43v20Ev
  virtual void  v21(); // _ZN6S725C43v21Ev
  S725C4(); // tgen
};
//SIG(-1 S725C4) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S725C4 ::~S725C4(){ note_dtor("S725C4", this);}
void  S725C4 ::v11(){vfunc_called(this, "_ZN6S725C43v11Ev");}
void  S725C4 ::v12(){vfunc_called(this, "_ZN6S725C43v12Ev");}
void  S725C4 ::v13(){vfunc_called(this, "_ZN6S725C43v13Ev");}
void  S725C4 ::v14(){vfunc_called(this, "_ZN6S725C43v14Ev");}
void  S725C4 ::v15(){vfunc_called(this, "_ZN6S725C43v15Ev");}
void  S725C4 ::v16(){vfunc_called(this, "_ZN6S725C43v16Ev");}
void  S725C4 ::v17(){vfunc_called(this, "_ZN6S725C43v17Ev");}
void  S725C4 ::v18(){vfunc_called(this, "_ZN6S725C43v18Ev");}
void  S725C4 ::v19(){vfunc_called(this, "_ZN6S725C43v19Ev");}
void  S725C4 ::v20(){vfunc_called(this, "_ZN6S725C43v20Ev");}
void  S725C4 ::v21(){vfunc_called(this, "_ZN6S725C43v21Ev");}
S725C4 ::S725C4(){ note_ctor("S725C4", this);} // tgen

static void Test_S725C4()
{
  extern Class_Descriptor cd_S725C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S725C4, buf);
    S725C4 *dp, &lv = *(dp=new (buf) S725C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S725C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S725C4)");
    check_base_class_offset(lv, (S7368C49*), 0, "S725C4");
    check_field_offset(lv, s725c4f0, ABISELECT(32,20), "S725C4.s725c4f0");
    check_field_offset(lv, s725c4f1, ABISELECT(40,24), "S725C4.s725c4f1");
    test_class_info(&lv, &cd_S725C4);
    dp->~S725C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS725C4(Test_S725C4, "S725C4", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN6S725C4C1Ev();
extern void _ZN6S725C4D1Ev();
Name_Map name_map_S725C4[] = {
  NSPAIR(_ZN6S725C4C1Ev),
  NSPAIR(_ZN6S725C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S725C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S725C4[];
extern void _ZN6S725C4D1Ev();
extern void _ZN6S725C4D0Ev();
extern void _ZN6S725C43v11Ev();
extern void _ZN6S725C43v12Ev();
extern void _ZN6S725C43v13Ev();
extern void _ZN6S725C43v14Ev();
extern void _ZN6S725C43v15Ev();
extern void _ZN6S725C43v16Ev();
extern void _ZN6S725C43v17Ev();
extern void _ZN6S725C43v18Ev();
extern void _ZN6S725C43v19Ev();
extern void _ZN6S725C43v20Ev();
extern void _ZN6S725C43v21Ev();
static  VTBL_ENTRY vtc_S725C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S725C4[0]),
  (VTBL_ENTRY)&_ZN6S725C4D1Ev,
  (VTBL_ENTRY)&_ZN6S725C4D0Ev,
  (VTBL_ENTRY)&_ZN6S725C43v11Ev,
  (VTBL_ENTRY)&_ZN6S725C43v12Ev,
  (VTBL_ENTRY)&_ZN6S725C43v13Ev,
  (VTBL_ENTRY)&_ZN6S725C43v14Ev,
  (VTBL_ENTRY)&_ZN6S725C43v15Ev,
  (VTBL_ENTRY)&_ZN6S725C43v16Ev,
  (VTBL_ENTRY)&_ZN6S725C43v17Ev,
  (VTBL_ENTRY)&_ZN6S725C43v18Ev,
  (VTBL_ENTRY)&_ZN6S725C43v19Ev,
  (VTBL_ENTRY)&_ZN6S725C43v20Ev,
  (VTBL_ENTRY)&_ZN6S725C43v21Ev,
};
extern VTBL_ENTRY _ZTI6S725C4[];
extern  VTBL_ENTRY _ZTV6S725C4[];
Class_Descriptor cd_S725C4 = {  "S725C4", // class name
  bases_S725C4, 1,
  &(vtc_S725C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI6S725C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S725C4),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S725C3  : S725C4 {
  int s725c3f0;
  virtual  ~S725C3(); // _ZN6S725C3D1Ev
  virtual void  v22(); // _ZN6S725C33v22Ev
  virtual void  v23(); // _ZN6S725C33v23Ev
  virtual void  v24(); // _ZN6S725C33v24Ev
  virtual void  v25(); // _ZN6S725C33v25Ev
  virtual void  v26(); // _ZN6S725C33v26Ev
  virtual void  v27(); // _ZN6S725C33v27Ev
  virtual void  v28(); // _ZN6S725C33v28Ev
  virtual void  v29(); // _ZN6S725C33v29Ev
  virtual void  v30(); // _ZN6S725C33v30Ev
  virtual void  v31(); // _ZN6S725C33v31Ev
  virtual void  v32(); // _ZN6S725C33v32Ev
  virtual void  v33(); // _ZN6S725C33v33Ev
  virtual void  v34(); // _ZN6S725C33v34Ev
  virtual void  v35(); // _ZN6S725C33v35Ev
  virtual void  v36(); // _ZN6S725C33v36Ev
  virtual void  v37(); // _ZN6S725C33v37Ev
  virtual void  v38(); // _ZN6S725C33v38Ev
  virtual void  v39(); // _ZN6S725C33v39Ev
  virtual void  v40(); // _ZN6S725C33v40Ev
  S725C3(); // tgen
};
//SIG(-1 S725C3) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi}


 S725C3 ::~S725C3(){ note_dtor("S725C3", this);}
void  S725C3 ::v22(){vfunc_called(this, "_ZN6S725C33v22Ev");}
void  S725C3 ::v23(){vfunc_called(this, "_ZN6S725C33v23Ev");}
void  S725C3 ::v24(){vfunc_called(this, "_ZN6S725C33v24Ev");}
void  S725C3 ::v25(){vfunc_called(this, "_ZN6S725C33v25Ev");}
void  S725C3 ::v26(){vfunc_called(this, "_ZN6S725C33v26Ev");}
void  S725C3 ::v27(){vfunc_called(this, "_ZN6S725C33v27Ev");}
void  S725C3 ::v28(){vfunc_called(this, "_ZN6S725C33v28Ev");}
void  S725C3 ::v29(){vfunc_called(this, "_ZN6S725C33v29Ev");}
void  S725C3 ::v30(){vfunc_called(this, "_ZN6S725C33v30Ev");}
void  S725C3 ::v31(){vfunc_called(this, "_ZN6S725C33v31Ev");}
void  S725C3 ::v32(){vfunc_called(this, "_ZN6S725C33v32Ev");}
void  S725C3 ::v33(){vfunc_called(this, "_ZN6S725C33v33Ev");}
void  S725C3 ::v34(){vfunc_called(this, "_ZN6S725C33v34Ev");}
void  S725C3 ::v35(){vfunc_called(this, "_ZN6S725C33v35Ev");}
void  S725C3 ::v36(){vfunc_called(this, "_ZN6S725C33v36Ev");}
void  S725C3 ::v37(){vfunc_called(this, "_ZN6S725C33v37Ev");}
void  S725C3 ::v38(){vfunc_called(this, "_ZN6S725C33v38Ev");}
void  S725C3 ::v39(){vfunc_called(this, "_ZN6S725C33v39Ev");}
void  S725C3 ::v40(){vfunc_called(this, "_ZN6S725C33v40Ev");}
S725C3 ::S725C3(){ note_ctor("S725C3", this);} // tgen

static void Test_S725C3()
{
  extern Class_Descriptor cd_S725C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S725C3, buf);
    S725C3 *dp, &lv = *(dp=new (buf) S725C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S725C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S725C3)");
    check_base_class_offset(lv, (S7368C49*)(S725C4*), 0, "S725C3");
    check_base_class_offset(lv, (S725C4*), 0, "S725C3");
    check_field_offset(lv, s725c3f0, ABISELECT(96,64), "S725C3.s725c3f0");
    test_class_info(&lv, &cd_S725C3);
    dp->~S725C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS725C3(Test_S725C3, "S725C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN6S725C3C1Ev();
extern void _ZN6S725C3D1Ev();
Name_Map name_map_S725C3[] = {
  NSPAIR(_ZN6S725C3C1Ev),
  NSPAIR(_ZN6S725C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S725C4;
extern VTBL_ENTRY _ZTI6S725C4[];
extern  VTBL_ENTRY _ZTV6S725C4[];
static Base_Class bases_S725C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S725C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S725C3[];
extern void _ZN6S725C3D1Ev();
extern void _ZN6S725C3D0Ev();
extern void _ZN6S725C43v11Ev();
extern void _ZN6S725C43v12Ev();
extern void _ZN6S725C43v13Ev();
extern void _ZN6S725C43v14Ev();
extern void _ZN6S725C43v15Ev();
extern void _ZN6S725C43v16Ev();
extern void _ZN6S725C43v17Ev();
extern void _ZN6S725C43v18Ev();
extern void _ZN6S725C43v19Ev();
extern void _ZN6S725C43v20Ev();
extern void _ZN6S725C43v21Ev();
extern void _ZN6S725C33v22Ev();
extern void _ZN6S725C33v23Ev();
extern void _ZN6S725C33v24Ev();
extern void _ZN6S725C33v25Ev();
extern void _ZN6S725C33v26Ev();
extern void _ZN6S725C33v27Ev();
extern void _ZN6S725C33v28Ev();
extern void _ZN6S725C33v29Ev();
extern void _ZN6S725C33v30Ev();
extern void _ZN6S725C33v31Ev();
extern void _ZN6S725C33v32Ev();
extern void _ZN6S725C33v33Ev();
extern void _ZN6S725C33v34Ev();
extern void _ZN6S725C33v35Ev();
extern void _ZN6S725C33v36Ev();
extern void _ZN6S725C33v37Ev();
extern void _ZN6S725C33v38Ev();
extern void _ZN6S725C33v39Ev();
extern void _ZN6S725C33v40Ev();
static  VTBL_ENTRY vtc_S725C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S725C3[0]),
  (VTBL_ENTRY)&_ZN6S725C3D1Ev,
  (VTBL_ENTRY)&_ZN6S725C3D0Ev,
  (VTBL_ENTRY)&_ZN6S725C43v11Ev,
  (VTBL_ENTRY)&_ZN6S725C43v12Ev,
  (VTBL_ENTRY)&_ZN6S725C43v13Ev,
  (VTBL_ENTRY)&_ZN6S725C43v14Ev,
  (VTBL_ENTRY)&_ZN6S725C43v15Ev,
  (VTBL_ENTRY)&_ZN6S725C43v16Ev,
  (VTBL_ENTRY)&_ZN6S725C43v17Ev,
  (VTBL_ENTRY)&_ZN6S725C43v18Ev,
  (VTBL_ENTRY)&_ZN6S725C43v19Ev,
  (VTBL_ENTRY)&_ZN6S725C43v20Ev,
  (VTBL_ENTRY)&_ZN6S725C43v21Ev,
  (VTBL_ENTRY)&_ZN6S725C33v22Ev,
  (VTBL_ENTRY)&_ZN6S725C33v23Ev,
  (VTBL_ENTRY)&_ZN6S725C33v24Ev,
  (VTBL_ENTRY)&_ZN6S725C33v25Ev,
  (VTBL_ENTRY)&_ZN6S725C33v26Ev,
  (VTBL_ENTRY)&_ZN6S725C33v27Ev,
  (VTBL_ENTRY)&_ZN6S725C33v28Ev,
  (VTBL_ENTRY)&_ZN6S725C33v29Ev,
  (VTBL_ENTRY)&_ZN6S725C33v30Ev,
  (VTBL_ENTRY)&_ZN6S725C33v31Ev,
  (VTBL_ENTRY)&_ZN6S725C33v32Ev,
  (VTBL_ENTRY)&_ZN6S725C33v33Ev,
  (VTBL_ENTRY)&_ZN6S725C33v34Ev,
  (VTBL_ENTRY)&_ZN6S725C33v35Ev,
  (VTBL_ENTRY)&_ZN6S725C33v36Ev,
  (VTBL_ENTRY)&_ZN6S725C33v37Ev,
  (VTBL_ENTRY)&_ZN6S725C33v38Ev,
  (VTBL_ENTRY)&_ZN6S725C33v39Ev,
  (VTBL_ENTRY)&_ZN6S725C33v40Ev,
};
extern VTBL_ENTRY _ZTI6S725C3[];
extern  VTBL_ENTRY _ZTV6S725C3[];
Class_Descriptor cd_S725C3 = {  "S725C3", // class name
  bases_S725C3, 2,
  &(vtc_S725C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI6S725C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S725C3),34, //virtual function table var
  2, // 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  S725C2  : S725C3 {
  ::S7368C77 s725c2f0;
  virtual  ~S725C2(); // _ZN6S725C2D1Ev
  virtual void  v41(); // _ZN6S725C23v41Ev
  virtual void  v42(); // _ZN6S725C23v42Ev
  virtual void  v43(); // _ZN6S725C23v43Ev
  virtual void  v44(); // _ZN6S725C23v44Ev
  virtual void  v45(); // _ZN6S725C23v45Ev
  virtual void  v46(); // _ZN6S725C23v46Ev
  virtual void  v47(); // _ZN6S725C23v47Ev
  S725C2(); // tgen
};
//SIG(-1 S725C2) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} vd v1 v2 v3 v4 v5 v6 v7 FC8{ m Fp Fi[2] FC9{ m}}}


 S725C2 ::~S725C2(){ note_dtor("S725C2", this);}
void  S725C2 ::v41(){vfunc_called(this, "_ZN6S725C23v41Ev");}
void  S725C2 ::v42(){vfunc_called(this, "_ZN6S725C23v42Ev");}
void  S725C2 ::v43(){vfunc_called(this, "_ZN6S725C23v43Ev");}
void  S725C2 ::v44(){vfunc_called(this, "_ZN6S725C23v44Ev");}
void  S725C2 ::v45(){vfunc_called(this, "_ZN6S725C23v45Ev");}
void  S725C2 ::v46(){vfunc_called(this, "_ZN6S725C23v46Ev");}
void  S725C2 ::v47(){vfunc_called(this, "_ZN6S725C23v47Ev");}
S725C2 ::S725C2(){ note_ctor("S725C2", this);} // tgen

static void Test_S725C2()
{
  extern Class_Descriptor cd_S725C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S725C2, buf);
    S725C2 *dp, &lv = *(dp=new (buf) S725C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S725C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S725C2)");
    check_base_class_offset(lv, (S7368C49*)(S725C4*)(S725C3*), 0, "S725C2");
    check_base_class_offset(lv, (S725C4*)(S725C3*), 0, "S725C2");
    check_base_class_offset(lv, (S725C3*), 0, "S725C2");
    check_field_offset(lv, s725c2f0, ABISELECT(104,68), "S725C2.s725c2f0");
    test_class_info(&lv, &cd_S725C2);
    dp->~S725C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS725C2(Test_S725C2, "S725C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN6S725C2C1Ev();
extern void _ZN6S725C2D1Ev();
Name_Map name_map_S725C2[] = {
  NSPAIR(_ZN6S725C2C1Ev),
  NSPAIR(_ZN6S725C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S725C4;
extern VTBL_ENTRY _ZTI6S725C4[];
extern  VTBL_ENTRY _ZTV6S725C4[];
extern Class_Descriptor cd_S725C3;
extern VTBL_ENTRY _ZTI6S725C3[];
extern  VTBL_ENTRY _ZTV6S725C3[];
static Base_Class bases_S725C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S725C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S725C2[];
extern void _ZN6S725C2D1Ev();
extern void _ZN6S725C2D0Ev();
extern void _ZN6S725C43v11Ev();
extern void _ZN6S725C43v12Ev();
extern void _ZN6S725C43v13Ev();
extern void _ZN6S725C43v14Ev();
extern void _ZN6S725C43v15Ev();
extern void _ZN6S725C43v16Ev();
extern void _ZN6S725C43v17Ev();
extern void _ZN6S725C43v18Ev();
extern void _ZN6S725C43v19Ev();
extern void _ZN6S725C43v20Ev();
extern void _ZN6S725C43v21Ev();
extern void _ZN6S725C33v22Ev();
extern void _ZN6S725C33v23Ev();
extern void _ZN6S725C33v24Ev();
extern void _ZN6S725C33v25Ev();
extern void _ZN6S725C33v26Ev();
extern void _ZN6S725C33v27Ev();
extern void _ZN6S725C33v28Ev();
extern void _ZN6S725C33v29Ev();
extern void _ZN6S725C33v30Ev();
extern void _ZN6S725C33v31Ev();
extern void _ZN6S725C33v32Ev();
extern void _ZN6S725C33v33Ev();
extern void _ZN6S725C33v34Ev();
extern void _ZN6S725C33v35Ev();
extern void _ZN6S725C33v36Ev();
extern void _ZN6S725C33v37Ev();
extern void _ZN6S725C33v38Ev();
extern void _ZN6S725C33v39Ev();
extern void _ZN6S725C33v40Ev();
extern void _ZN6S725C23v41Ev();
extern void _ZN6S725C23v42Ev();
extern void _ZN6S725C23v43Ev();
extern void _ZN6S725C23v44Ev();
extern void _ZN6S725C23v45Ev();
extern void _ZN6S725C23v46Ev();
extern void _ZN6S725C23v47Ev();
static  VTBL_ENTRY vtc_S725C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S725C2[0]),
  (VTBL_ENTRY)&_ZN6S725C2D1Ev,
  (VTBL_ENTRY)&_ZN6S725C2D0Ev,
  (VTBL_ENTRY)&_ZN6S725C43v11Ev,
  (VTBL_ENTRY)&_ZN6S725C43v12Ev,
  (VTBL_ENTRY)&_ZN6S725C43v13Ev,
  (VTBL_ENTRY)&_ZN6S725C43v14Ev,
  (VTBL_ENTRY)&_ZN6S725C43v15Ev,
  (VTBL_ENTRY)&_ZN6S725C43v16Ev,
  (VTBL_ENTRY)&_ZN6S725C43v17Ev,
  (VTBL_ENTRY)&_ZN6S725C43v18Ev,
  (VTBL_ENTRY)&_ZN6S725C43v19Ev,
  (VTBL_ENTRY)&_ZN6S725C43v20Ev,
  (VTBL_ENTRY)&_ZN6S725C43v21Ev,
  (VTBL_ENTRY)&_ZN6S725C33v22Ev,
  (VTBL_ENTRY)&_ZN6S725C33v23Ev,
  (VTBL_ENTRY)&_ZN6S725C33v24Ev,
  (VTBL_ENTRY)&_ZN6S725C33v25Ev,
  (VTBL_ENTRY)&_ZN6S725C33v26Ev,
  (VTBL_ENTRY)&_ZN6S725C33v27Ev,
  (VTBL_ENTRY)&_ZN6S725C33v28Ev,
  (VTBL_ENTRY)&_ZN6S725C33v29Ev,
  (VTBL_ENTRY)&_ZN6S725C33v30Ev,
  (VTBL_ENTRY)&_ZN6S725C33v31Ev,
  (VTBL_ENTRY)&_ZN6S725C33v32Ev,
  (VTBL_ENTRY)&_ZN6S725C33v33Ev,
  (VTBL_ENTRY)&_ZN6S725C33v34Ev,
  (VTBL_ENTRY)&_ZN6S725C33v35Ev,
  (VTBL_ENTRY)&_ZN6S725C33v36Ev,
  (VTBL_ENTRY)&_ZN6S725C33v37Ev,
  (VTBL_ENTRY)&_ZN6S725C33v38Ev,
  (VTBL_ENTRY)&_ZN6S725C33v39Ev,
  (VTBL_ENTRY)&_ZN6S725C33v40Ev,
  (VTBL_ENTRY)&_ZN6S725C23v41Ev,
  (VTBL_ENTRY)&_ZN6S725C23v42Ev,
  (VTBL_ENTRY)&_ZN6S725C23v43Ev,
  (VTBL_ENTRY)&_ZN6S725C23v44Ev,
  (VTBL_ENTRY)&_ZN6S725C23v45Ev,
  (VTBL_ENTRY)&_ZN6S725C23v46Ev,
  (VTBL_ENTRY)&_ZN6S725C23v47Ev,
};
extern VTBL_ENTRY _ZTI6S725C2[];
extern  VTBL_ENTRY _ZTV6S725C2[];
Class_Descriptor cd_S725C2 = {  "S725C2", // class name
  bases_S725C2, 3,
  &(vtc_S725C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI6S725C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S725C2),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S725C1  : S725C2 {
  ::S7368C73 s725c1f0;
  virtual  ~S725C1(); // _ZN6S725C1D1Ev
  virtual void  v1(); // _ZN6S725C12v1Ev
  virtual void  v2(); // _ZN6S725C12v2Ev
  virtual void  v3(); // _ZN6S725C12v3Ev
  virtual void  v4(); // _ZN6S725C12v4Ev
  virtual void  v5(); // _ZN6S725C12v5Ev
  virtual void  v6(); // _ZN6S725C12v6Ev
  virtual void  v7(); // _ZN6S725C12v7Ev
  virtual void  v8(); // _ZN6S725C12v8Ev
  virtual void  v9(); // _ZN6S725C12v9Ev
  virtual void  v10(); // _ZN6S725C13v10Ev
  S725C1(); // tgen
};
//SIG(1 S725C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 Fi} vd v41 v42 v43 v44 v45 v46 v47 FC9{ m Fp Fi[2] FC10{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC11{ BC12{ vd m Fp} vd Fi[2]}}


 S725C1 ::~S725C1(){ note_dtor("S725C1", this);}
void  S725C1 ::v1(){vfunc_called(this, "_ZN6S725C12v1Ev");}
void  S725C1 ::v2(){vfunc_called(this, "_ZN6S725C12v2Ev");}
void  S725C1 ::v3(){vfunc_called(this, "_ZN6S725C12v3Ev");}
void  S725C1 ::v4(){vfunc_called(this, "_ZN6S725C12v4Ev");}
void  S725C1 ::v5(){vfunc_called(this, "_ZN6S725C12v5Ev");}
void  S725C1 ::v6(){vfunc_called(this, "_ZN6S725C12v6Ev");}
void  S725C1 ::v7(){vfunc_called(this, "_ZN6S725C12v7Ev");}
void  S725C1 ::v8(){vfunc_called(this, "_ZN6S725C12v8Ev");}
void  S725C1 ::v9(){vfunc_called(this, "_ZN6S725C12v9Ev");}
void  S725C1 ::v10(){vfunc_called(this, "_ZN6S725C13v10Ev");}
S725C1 ::S725C1(){ note_ctor("S725C1", this);} // tgen

static void Test_S725C1()
{
  extern Class_Descriptor cd_S725C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,26)];
    init_test(&cd_S725C1, buf);
    S725C1 *dp, &lv = *(dp=new (buf) S725C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S725C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S725C1)");
    check_base_class_offset(lv, (S7368C49*)(S725C4*)(S725C3*)(S725C2*), 0, "S725C1");
    check_base_class_offset(lv, (S725C4*)(S725C3*)(S725C2*), 0, "S725C1");
    check_base_class_offset(lv, (S725C3*)(S725C2*), 0, "S725C1");
    check_base_class_offset(lv, (S725C2*), 0, "S725C1");
    check_field_offset(lv, s725c1f0, ABISELECT(128,84), "S725C1.s725c1f0");
    test_class_info(&lv, &cd_S725C1);
    dp->~S725C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS725C1(Test_S725C1, "S725C1", ABISELECT(152,100));

#else // __cplusplus

extern void _ZN6S725C1C1Ev();
extern void _ZN6S725C1D1Ev();
Name_Map name_map_S725C1[] = {
  NSPAIR(_ZN6S725C1C1Ev),
  NSPAIR(_ZN6S725C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S725C4;
extern VTBL_ENTRY _ZTI6S725C4[];
extern  VTBL_ENTRY _ZTV6S725C4[];
extern Class_Descriptor cd_S725C3;
extern VTBL_ENTRY _ZTI6S725C3[];
extern  VTBL_ENTRY _ZTV6S725C3[];
extern Class_Descriptor cd_S725C2;
extern VTBL_ENTRY _ZTI6S725C2[];
extern  VTBL_ENTRY _ZTV6S725C2[];
static Base_Class bases_S725C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S725C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S725C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S725C1[];
extern void _ZN6S725C1D1Ev();
extern void _ZN6S725C1D0Ev();
extern void _ZN6S725C43v11Ev();
extern void _ZN6S725C43v12Ev();
extern void _ZN6S725C43v13Ev();
extern void _ZN6S725C43v14Ev();
extern void _ZN6S725C43v15Ev();
extern void _ZN6S725C43v16Ev();
extern void _ZN6S725C43v17Ev();
extern void _ZN6S725C43v18Ev();
extern void _ZN6S725C43v19Ev();
extern void _ZN6S725C43v20Ev();
extern void _ZN6S725C43v21Ev();
extern void _ZN6S725C33v22Ev();
extern void _ZN6S725C33v23Ev();
extern void _ZN6S725C33v24Ev();
extern void _ZN6S725C33v25Ev();
extern void _ZN6S725C33v26Ev();
extern void _ZN6S725C33v27Ev();
extern void _ZN6S725C33v28Ev();
extern void _ZN6S725C33v29Ev();
extern void _ZN6S725C33v30Ev();
extern void _ZN6S725C33v31Ev();
extern void _ZN6S725C33v32Ev();
extern void _ZN6S725C33v33Ev();
extern void _ZN6S725C33v34Ev();
extern void _ZN6S725C33v35Ev();
extern void _ZN6S725C33v36Ev();
extern void _ZN6S725C33v37Ev();
extern void _ZN6S725C33v38Ev();
extern void _ZN6S725C33v39Ev();
extern void _ZN6S725C33v40Ev();
extern void _ZN6S725C23v41Ev();
extern void _ZN6S725C23v42Ev();
extern void _ZN6S725C23v43Ev();
extern void _ZN6S725C23v44Ev();
extern void _ZN6S725C23v45Ev();
extern void _ZN6S725C23v46Ev();
extern void _ZN6S725C23v47Ev();
extern void _ZN6S725C12v1Ev();
extern void _ZN6S725C12v2Ev();
extern void _ZN6S725C12v3Ev();
extern void _ZN6S725C12v4Ev();
extern void _ZN6S725C12v5Ev();
extern void _ZN6S725C12v6Ev();
extern void _ZN6S725C12v7Ev();
extern void _ZN6S725C12v8Ev();
extern void _ZN6S725C12v9Ev();
extern void _ZN6S725C13v10Ev();
static  VTBL_ENTRY vtc_S725C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S725C1[0]),
  (VTBL_ENTRY)&_ZN6S725C1D1Ev,
  (VTBL_ENTRY)&_ZN6S725C1D0Ev,
  (VTBL_ENTRY)&_ZN6S725C43v11Ev,
  (VTBL_ENTRY)&_ZN6S725C43v12Ev,
  (VTBL_ENTRY)&_ZN6S725C43v13Ev,
  (VTBL_ENTRY)&_ZN6S725C43v14Ev,
  (VTBL_ENTRY)&_ZN6S725C43v15Ev,
  (VTBL_ENTRY)&_ZN6S725C43v16Ev,
  (VTBL_ENTRY)&_ZN6S725C43v17Ev,
  (VTBL_ENTRY)&_ZN6S725C43v18Ev,
  (VTBL_ENTRY)&_ZN6S725C43v19Ev,
  (VTBL_ENTRY)&_ZN6S725C43v20Ev,
  (VTBL_ENTRY)&_ZN6S725C43v21Ev,
  (VTBL_ENTRY)&_ZN6S725C33v22Ev,
  (VTBL_ENTRY)&_ZN6S725C33v23Ev,
  (VTBL_ENTRY)&_ZN6S725C33v24Ev,
  (VTBL_ENTRY)&_ZN6S725C33v25Ev,
  (VTBL_ENTRY)&_ZN6S725C33v26Ev,
  (VTBL_ENTRY)&_ZN6S725C33v27Ev,
  (VTBL_ENTRY)&_ZN6S725C33v28Ev,
  (VTBL_ENTRY)&_ZN6S725C33v29Ev,
  (VTBL_ENTRY)&_ZN6S725C33v30Ev,
  (VTBL_ENTRY)&_ZN6S725C33v31Ev,
  (VTBL_ENTRY)&_ZN6S725C33v32Ev,
  (VTBL_ENTRY)&_ZN6S725C33v33Ev,
  (VTBL_ENTRY)&_ZN6S725C33v34Ev,
  (VTBL_ENTRY)&_ZN6S725C33v35Ev,
  (VTBL_ENTRY)&_ZN6S725C33v36Ev,
  (VTBL_ENTRY)&_ZN6S725C33v37Ev,
  (VTBL_ENTRY)&_ZN6S725C33v38Ev,
  (VTBL_ENTRY)&_ZN6S725C33v39Ev,
  (VTBL_ENTRY)&_ZN6S725C33v40Ev,
  (VTBL_ENTRY)&_ZN6S725C23v41Ev,
  (VTBL_ENTRY)&_ZN6S725C23v42Ev,
  (VTBL_ENTRY)&_ZN6S725C23v43Ev,
  (VTBL_ENTRY)&_ZN6S725C23v44Ev,
  (VTBL_ENTRY)&_ZN6S725C23v45Ev,
  (VTBL_ENTRY)&_ZN6S725C23v46Ev,
  (VTBL_ENTRY)&_ZN6S725C23v47Ev,
  (VTBL_ENTRY)&_ZN6S725C12v1Ev,
  (VTBL_ENTRY)&_ZN6S725C12v2Ev,
  (VTBL_ENTRY)&_ZN6S725C12v3Ev,
  (VTBL_ENTRY)&_ZN6S725C12v4Ev,
  (VTBL_ENTRY)&_ZN6S725C12v5Ev,
  (VTBL_ENTRY)&_ZN6S725C12v6Ev,
  (VTBL_ENTRY)&_ZN6S725C12v7Ev,
  (VTBL_ENTRY)&_ZN6S725C12v8Ev,
  (VTBL_ENTRY)&_ZN6S725C12v9Ev,
  (VTBL_ENTRY)&_ZN6S725C13v10Ev,
};
extern VTBL_ENTRY _ZTI6S725C1[];
extern  VTBL_ENTRY _ZTV6S725C1[];
Class_Descriptor cd_S725C1 = {  "S725C1", // class name
  bases_S725C1, 4,
  &(vtc_S725C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,100), // object size
  NSPAIRA(_ZTI6S725C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S725C1),51, //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  S727C4  : S7368C49 {
  void *s727c4f0;
  ::S10256C12_nt s727c4f1;
  virtual  ~S727C4(); // _ZN6S727C4D1Ev
  virtual void  v12(); // _ZN6S727C43v12Ev
  virtual void  v13(); // _ZN6S727C43v13Ev
  virtual void  v14(); // _ZN6S727C43v14Ev
  virtual void  v15(); // _ZN6S727C43v15Ev
  virtual void  v16(); // _ZN6S727C43v16Ev
  virtual void  v17(); // _ZN6S727C43v17Ev
  virtual void  v18(); // _ZN6S727C43v18Ev
  virtual void  v19(); // _ZN6S727C43v19Ev
  virtual void  v20(); // _ZN6S727C43v20Ev
  virtual void  v21(); // _ZN6S727C43v21Ev
  virtual void  v22(); // _ZN6S727C43v22Ev
  S727C4(); // tgen
};
//SIG(-1 S727C4) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S727C4 ::~S727C4(){ note_dtor("S727C4", this);}
void  S727C4 ::v12(){vfunc_called(this, "_ZN6S727C43v12Ev");}
void  S727C4 ::v13(){vfunc_called(this, "_ZN6S727C43v13Ev");}
void  S727C4 ::v14(){vfunc_called(this, "_ZN6S727C43v14Ev");}
void  S727C4 ::v15(){vfunc_called(this, "_ZN6S727C43v15Ev");}
void  S727C4 ::v16(){vfunc_called(this, "_ZN6S727C43v16Ev");}
void  S727C4 ::v17(){vfunc_called(this, "_ZN6S727C43v17Ev");}
void  S727C4 ::v18(){vfunc_called(this, "_ZN6S727C43v18Ev");}
void  S727C4 ::v19(){vfunc_called(this, "_ZN6S727C43v19Ev");}
void  S727C4 ::v20(){vfunc_called(this, "_ZN6S727C43v20Ev");}
void  S727C4 ::v21(){vfunc_called(this, "_ZN6S727C43v21Ev");}
void  S727C4 ::v22(){vfunc_called(this, "_ZN6S727C43v22Ev");}
S727C4 ::S727C4(){ note_ctor("S727C4", this);} // tgen

static void Test_S727C4()
{
  extern Class_Descriptor cd_S727C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S727C4, buf);
    S727C4 *dp, &lv = *(dp=new (buf) S727C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S727C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S727C4)");
    check_base_class_offset(lv, (S7368C49*), 0, "S727C4");
    check_field_offset(lv, s727c4f0, ABISELECT(32,20), "S727C4.s727c4f0");
    check_field_offset(lv, s727c4f1, ABISELECT(40,24), "S727C4.s727c4f1");
    test_class_info(&lv, &cd_S727C4);
    dp->~S727C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS727C4(Test_S727C4, "S727C4", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN6S727C4C1Ev();
extern void _ZN6S727C4D1Ev();
Name_Map name_map_S727C4[] = {
  NSPAIR(_ZN6S727C4C1Ev),
  NSPAIR(_ZN6S727C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S727C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S727C4[];
extern void _ZN6S727C4D1Ev();
extern void _ZN6S727C4D0Ev();
extern void _ZN6S727C43v12Ev();
extern void _ZN6S727C43v13Ev();
extern void _ZN6S727C43v14Ev();
extern void _ZN6S727C43v15Ev();
extern void _ZN6S727C43v16Ev();
extern void _ZN6S727C43v17Ev();
extern void _ZN6S727C43v18Ev();
extern void _ZN6S727C43v19Ev();
extern void _ZN6S727C43v20Ev();
extern void _ZN6S727C43v21Ev();
extern void _ZN6S727C43v22Ev();
static  VTBL_ENTRY vtc_S727C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S727C4[0]),
  (VTBL_ENTRY)&_ZN6S727C4D1Ev,
  (VTBL_ENTRY)&_ZN6S727C4D0Ev,
  (VTBL_ENTRY)&_ZN6S727C43v12Ev,
  (VTBL_ENTRY)&_ZN6S727C43v13Ev,
  (VTBL_ENTRY)&_ZN6S727C43v14Ev,
  (VTBL_ENTRY)&_ZN6S727C43v15Ev,
  (VTBL_ENTRY)&_ZN6S727C43v16Ev,
  (VTBL_ENTRY)&_ZN6S727C43v17Ev,
  (VTBL_ENTRY)&_ZN6S727C43v18Ev,
  (VTBL_ENTRY)&_ZN6S727C43v19Ev,
  (VTBL_ENTRY)&_ZN6S727C43v20Ev,
  (VTBL_ENTRY)&_ZN6S727C43v21Ev,
  (VTBL_ENTRY)&_ZN6S727C43v22Ev,
};
extern VTBL_ENTRY _ZTI6S727C4[];
extern  VTBL_ENTRY _ZTV6S727C4[];
Class_Descriptor cd_S727C4 = {  "S727C4", // class name
  bases_S727C4, 1,
  &(vtc_S727C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI6S727C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S727C4),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S727C3  : S727C4 {
  int s727c3f0;
  virtual  ~S727C3(); // _ZN6S727C3D1Ev
  virtual void  v23(); // _ZN6S727C33v23Ev
  virtual void  v24(); // _ZN6S727C33v24Ev
  virtual void  v25(); // _ZN6S727C33v25Ev
  virtual void  v26(); // _ZN6S727C33v26Ev
  virtual void  v27(); // _ZN6S727C33v27Ev
  virtual void  v28(); // _ZN6S727C33v28Ev
  virtual void  v29(); // _ZN6S727C33v29Ev
  virtual void  v30(); // _ZN6S727C33v30Ev
  virtual void  v31(); // _ZN6S727C33v31Ev
  virtual void  v32(); // _ZN6S727C33v32Ev
  virtual void  v33(); // _ZN6S727C33v33Ev
  virtual void  v34(); // _ZN6S727C33v34Ev
  virtual void  v35(); // _ZN6S727C33v35Ev
  virtual void  v36(); // _ZN6S727C33v36Ev
  virtual void  v37(); // _ZN6S727C33v37Ev
  virtual void  v38(); // _ZN6S727C33v38Ev
  virtual void  v39(); // _ZN6S727C33v39Ev
  virtual void  v40(); // _ZN6S727C33v40Ev
  virtual void  v41(); // _ZN6S727C33v41Ev
  S727C3(); // tgen
};
//SIG(-1 S727C3) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi}


 S727C3 ::~S727C3(){ note_dtor("S727C3", this);}
void  S727C3 ::v23(){vfunc_called(this, "_ZN6S727C33v23Ev");}
void  S727C3 ::v24(){vfunc_called(this, "_ZN6S727C33v24Ev");}
void  S727C3 ::v25(){vfunc_called(this, "_ZN6S727C33v25Ev");}
void  S727C3 ::v26(){vfunc_called(this, "_ZN6S727C33v26Ev");}
void  S727C3 ::v27(){vfunc_called(this, "_ZN6S727C33v27Ev");}
void  S727C3 ::v28(){vfunc_called(this, "_ZN6S727C33v28Ev");}
void  S727C3 ::v29(){vfunc_called(this, "_ZN6S727C33v29Ev");}
void  S727C3 ::v30(){vfunc_called(this, "_ZN6S727C33v30Ev");}
void  S727C3 ::v31(){vfunc_called(this, "_ZN6S727C33v31Ev");}
void  S727C3 ::v32(){vfunc_called(this, "_ZN6S727C33v32Ev");}
void  S727C3 ::v33(){vfunc_called(this, "_ZN6S727C33v33Ev");}
void  S727C3 ::v34(){vfunc_called(this, "_ZN6S727C33v34Ev");}
void  S727C3 ::v35(){vfunc_called(this, "_ZN6S727C33v35Ev");}
void  S727C3 ::v36(){vfunc_called(this, "_ZN6S727C33v36Ev");}
void  S727C3 ::v37(){vfunc_called(this, "_ZN6S727C33v37Ev");}
void  S727C3 ::v38(){vfunc_called(this, "_ZN6S727C33v38Ev");}
void  S727C3 ::v39(){vfunc_called(this, "_ZN6S727C33v39Ev");}
void  S727C3 ::v40(){vfunc_called(this, "_ZN6S727C33v40Ev");}
void  S727C3 ::v41(){vfunc_called(this, "_ZN6S727C33v41Ev");}
S727C3 ::S727C3(){ note_ctor("S727C3", this);} // tgen

static void Test_S727C3()
{
  extern Class_Descriptor cd_S727C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S727C3, buf);
    S727C3 *dp, &lv = *(dp=new (buf) S727C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S727C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S727C3)");
    check_base_class_offset(lv, (S7368C49*)(S727C4*), 0, "S727C3");
    check_base_class_offset(lv, (S727C4*), 0, "S727C3");
    check_field_offset(lv, s727c3f0, ABISELECT(96,64), "S727C3.s727c3f0");
    test_class_info(&lv, &cd_S727C3);
    dp->~S727C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS727C3(Test_S727C3, "S727C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN6S727C3C1Ev();
extern void _ZN6S727C3D1Ev();
Name_Map name_map_S727C3[] = {
  NSPAIR(_ZN6S727C3C1Ev),
  NSPAIR(_ZN6S727C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S727C4;
extern VTBL_ENTRY _ZTI6S727C4[];
extern  VTBL_ENTRY _ZTV6S727C4[];
static Base_Class bases_S727C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S727C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S727C3[];
extern void _ZN6S727C3D1Ev();
extern void _ZN6S727C3D0Ev();
extern void _ZN6S727C43v12Ev();
extern void _ZN6S727C43v13Ev();
extern void _ZN6S727C43v14Ev();
extern void _ZN6S727C43v15Ev();
extern void _ZN6S727C43v16Ev();
extern void _ZN6S727C43v17Ev();
extern void _ZN6S727C43v18Ev();
extern void _ZN6S727C43v19Ev();
extern void _ZN6S727C43v20Ev();
extern void _ZN6S727C43v21Ev();
extern void _ZN6S727C43v22Ev();
extern void _ZN6S727C33v23Ev();
extern void _ZN6S727C33v24Ev();
extern void _ZN6S727C33v25Ev();
extern void _ZN6S727C33v26Ev();
extern void _ZN6S727C33v27Ev();
extern void _ZN6S727C33v28Ev();
extern void _ZN6S727C33v29Ev();
extern void _ZN6S727C33v30Ev();
extern void _ZN6S727C33v31Ev();
extern void _ZN6S727C33v32Ev();
extern void _ZN6S727C33v33Ev();
extern void _ZN6S727C33v34Ev();
extern void _ZN6S727C33v35Ev();
extern void _ZN6S727C33v36Ev();
extern void _ZN6S727C33v37Ev();
extern void _ZN6S727C33v38Ev();
extern void _ZN6S727C33v39Ev();
extern void _ZN6S727C33v40Ev();
extern void _ZN6S727C33v41Ev();
static  VTBL_ENTRY vtc_S727C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S727C3[0]),
  (VTBL_ENTRY)&_ZN6S727C3D1Ev,
  (VTBL_ENTRY)&_ZN6S727C3D0Ev,
  (VTBL_ENTRY)&_ZN6S727C43v12Ev,
  (VTBL_ENTRY)&_ZN6S727C43v13Ev,
  (VTBL_ENTRY)&_ZN6S727C43v14Ev,
  (VTBL_ENTRY)&_ZN6S727C43v15Ev,
  (VTBL_ENTRY)&_ZN6S727C43v16Ev,
  (VTBL_ENTRY)&_ZN6S727C43v17Ev,
  (VTBL_ENTRY)&_ZN6S727C43v18Ev,
  (VTBL_ENTRY)&_ZN6S727C43v19Ev,
  (VTBL_ENTRY)&_ZN6S727C43v20Ev,
  (VTBL_ENTRY)&_ZN6S727C43v21Ev,
  (VTBL_ENTRY)&_ZN6S727C43v22Ev,
  (VTBL_ENTRY)&_ZN6S727C33v23Ev,
  (VTBL_ENTRY)&_ZN6S727C33v24Ev,
  (VTBL_ENTRY)&_ZN6S727C33v25Ev,
  (VTBL_ENTRY)&_ZN6S727C33v26Ev,
  (VTBL_ENTRY)&_ZN6S727C33v27Ev,
  (VTBL_ENTRY)&_ZN6S727C33v28Ev,
  (VTBL_ENTRY)&_ZN6S727C33v29Ev,
  (VTBL_ENTRY)&_ZN6S727C33v30Ev,
  (VTBL_ENTRY)&_ZN6S727C33v31Ev,
  (VTBL_ENTRY)&_ZN6S727C33v32Ev,
  (VTBL_ENTRY)&_ZN6S727C33v33Ev,
  (VTBL_ENTRY)&_ZN6S727C33v34Ev,
  (VTBL_ENTRY)&_ZN6S727C33v35Ev,
  (VTBL_ENTRY)&_ZN6S727C33v36Ev,
  (VTBL_ENTRY)&_ZN6S727C33v37Ev,
  (VTBL_ENTRY)&_ZN6S727C33v38Ev,
  (VTBL_ENTRY)&_ZN6S727C33v39Ev,
  (VTBL_ENTRY)&_ZN6S727C33v40Ev,
  (VTBL_ENTRY)&_ZN6S727C33v41Ev,
};
extern VTBL_ENTRY _ZTI6S727C3[];
extern  VTBL_ENTRY _ZTV6S727C3[];
Class_Descriptor cd_S727C3 = {  "S727C3", // class name
  bases_S727C3, 2,
  &(vtc_S727C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI6S727C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S727C3),34, //virtual function table var
  2, // 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  S727C2  : S727C3 {
  ::S7368C77 s727c2f0;
  virtual  ~S727C2(); // _ZN6S727C2D1Ev
  virtual void  v42(); // _ZN6S727C23v42Ev
  virtual void  v43(); // _ZN6S727C23v43Ev
  virtual void  v44(); // _ZN6S727C23v44Ev
  virtual void  v45(); // _ZN6S727C23v45Ev
  virtual void  v46(); // _ZN6S727C23v46Ev
  virtual void  v47(); // _ZN6S727C23v47Ev
  virtual void  v48(); // _ZN6S727C23v48Ev
  S727C2(); // tgen
};
//SIG(-1 S727C2) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} vd v1 v2 v3 v4 v5 v6 v7 FC8{ m Fp Fi[2] FC9{ m}}}


 S727C2 ::~S727C2(){ note_dtor("S727C2", this);}
void  S727C2 ::v42(){vfunc_called(this, "_ZN6S727C23v42Ev");}
void  S727C2 ::v43(){vfunc_called(this, "_ZN6S727C23v43Ev");}
void  S727C2 ::v44(){vfunc_called(this, "_ZN6S727C23v44Ev");}
void  S727C2 ::v45(){vfunc_called(this, "_ZN6S727C23v45Ev");}
void  S727C2 ::v46(){vfunc_called(this, "_ZN6S727C23v46Ev");}
void  S727C2 ::v47(){vfunc_called(this, "_ZN6S727C23v47Ev");}
void  S727C2 ::v48(){vfunc_called(this, "_ZN6S727C23v48Ev");}
S727C2 ::S727C2(){ note_ctor("S727C2", this);} // tgen

static void Test_S727C2()
{
  extern Class_Descriptor cd_S727C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S727C2, buf);
    S727C2 *dp, &lv = *(dp=new (buf) S727C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S727C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S727C2)");
    check_base_class_offset(lv, (S7368C49*)(S727C4*)(S727C3*), 0, "S727C2");
    check_base_class_offset(lv, (S727C4*)(S727C3*), 0, "S727C2");
    check_base_class_offset(lv, (S727C3*), 0, "S727C2");
    check_field_offset(lv, s727c2f0, ABISELECT(104,68), "S727C2.s727c2f0");
    test_class_info(&lv, &cd_S727C2);
    dp->~S727C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS727C2(Test_S727C2, "S727C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN6S727C2C1Ev();
extern void _ZN6S727C2D1Ev();
Name_Map name_map_S727C2[] = {
  NSPAIR(_ZN6S727C2C1Ev),
  NSPAIR(_ZN6S727C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S727C4;
extern VTBL_ENTRY _ZTI6S727C4[];
extern  VTBL_ENTRY _ZTV6S727C4[];
extern Class_Descriptor cd_S727C3;
extern VTBL_ENTRY _ZTI6S727C3[];
extern  VTBL_ENTRY _ZTV6S727C3[];
static Base_Class bases_S727C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S727C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S727C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S727C2[];
extern void _ZN6S727C2D1Ev();
extern void _ZN6S727C2D0Ev();
extern void _ZN6S727C43v12Ev();
extern void _ZN6S727C43v13Ev();
extern void _ZN6S727C43v14Ev();
extern void _ZN6S727C43v15Ev();
extern void _ZN6S727C43v16Ev();
extern void _ZN6S727C43v17Ev();
extern void _ZN6S727C43v18Ev();
extern void _ZN6S727C43v19Ev();
extern void _ZN6S727C43v20Ev();
extern void _ZN6S727C43v21Ev();
extern void _ZN6S727C43v22Ev();
extern void _ZN6S727C33v23Ev();
extern void _ZN6S727C33v24Ev();
extern void _ZN6S727C33v25Ev();
extern void _ZN6S727C33v26Ev();
extern void _ZN6S727C33v27Ev();
extern void _ZN6S727C33v28Ev();
extern void _ZN6S727C33v29Ev();
extern void _ZN6S727C33v30Ev();
extern void _ZN6S727C33v31Ev();
extern void _ZN6S727C33v32Ev();
extern void _ZN6S727C33v33Ev();
extern void _ZN6S727C33v34Ev();
extern void _ZN6S727C33v35Ev();
extern void _ZN6S727C33v36Ev();
extern void _ZN6S727C33v37Ev();
extern void _ZN6S727C33v38Ev();
extern void _ZN6S727C33v39Ev();
extern void _ZN6S727C33v40Ev();
extern void _ZN6S727C33v41Ev();
extern void _ZN6S727C23v42Ev();
extern void _ZN6S727C23v43Ev();
extern void _ZN6S727C23v44Ev();
extern void _ZN6S727C23v45Ev();
extern void _ZN6S727C23v46Ev();
extern void _ZN6S727C23v47Ev();
extern void _ZN6S727C23v48Ev();
static  VTBL_ENTRY vtc_S727C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S727C2[0]),
  (VTBL_ENTRY)&_ZN6S727C2D1Ev,
  (VTBL_ENTRY)&_ZN6S727C2D0Ev,
  (VTBL_ENTRY)&_ZN6S727C43v12Ev,
  (VTBL_ENTRY)&_ZN6S727C43v13Ev,
  (VTBL_ENTRY)&_ZN6S727C43v14Ev,
  (VTBL_ENTRY)&_ZN6S727C43v15Ev,
  (VTBL_ENTRY)&_ZN6S727C43v16Ev,
  (VTBL_ENTRY)&_ZN6S727C43v17Ev,
  (VTBL_ENTRY)&_ZN6S727C43v18Ev,
  (VTBL_ENTRY)&_ZN6S727C43v19Ev,
  (VTBL_ENTRY)&_ZN6S727C43v20Ev,
  (VTBL_ENTRY)&_ZN6S727C43v21Ev,
  (VTBL_ENTRY)&_ZN6S727C43v22Ev,
  (VTBL_ENTRY)&_ZN6S727C33v23Ev,
  (VTBL_ENTRY)&_ZN6S727C33v24Ev,
  (VTBL_ENTRY)&_ZN6S727C33v25Ev,
  (VTBL_ENTRY)&_ZN6S727C33v26Ev,
  (VTBL_ENTRY)&_ZN6S727C33v27Ev,
  (VTBL_ENTRY)&_ZN6S727C33v28Ev,
  (VTBL_ENTRY)&_ZN6S727C33v29Ev,
  (VTBL_ENTRY)&_ZN6S727C33v30Ev,
  (VTBL_ENTRY)&_ZN6S727C33v31Ev,
  (VTBL_ENTRY)&_ZN6S727C33v32Ev,
  (VTBL_ENTRY)&_ZN6S727C33v33Ev,
  (VTBL_ENTRY)&_ZN6S727C33v34Ev,
  (VTBL_ENTRY)&_ZN6S727C33v35Ev,
  (VTBL_ENTRY)&_ZN6S727C33v36Ev,
  (VTBL_ENTRY)&_ZN6S727C33v37Ev,
  (VTBL_ENTRY)&_ZN6S727C33v38Ev,
  (VTBL_ENTRY)&_ZN6S727C33v39Ev,
  (VTBL_ENTRY)&_ZN6S727C33v40Ev,
  (VTBL_ENTRY)&_ZN6S727C33v41Ev,
  (VTBL_ENTRY)&_ZN6S727C23v42Ev,
  (VTBL_ENTRY)&_ZN6S727C23v43Ev,
  (VTBL_ENTRY)&_ZN6S727C23v44Ev,
  (VTBL_ENTRY)&_ZN6S727C23v45Ev,
  (VTBL_ENTRY)&_ZN6S727C23v46Ev,
  (VTBL_ENTRY)&_ZN6S727C23v47Ev,
  (VTBL_ENTRY)&_ZN6S727C23v48Ev,
};
extern VTBL_ENTRY _ZTI6S727C2[];
extern  VTBL_ENTRY _ZTV6S727C2[];
Class_Descriptor cd_S727C2 = {  "S727C2", // class name
  bases_S727C2, 3,
  &(vtc_S727C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI6S727C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S727C2),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S727C1  : S727C2 {
  void *s727c1f0;
  virtual  ~S727C1(); // _ZN6S727C1D1Ev
  virtual void  v1(); // _ZN6S727C12v1Ev
  virtual void  v2(); // _ZN6S727C12v2Ev
  virtual void  v3(); // _ZN6S727C12v3Ev
  virtual void  v4(); // _ZN6S727C12v4Ev
  virtual void  v5(); // _ZN6S727C12v5Ev
  virtual void  v6(); // _ZN6S727C12v6Ev
  virtual void  v7(); // _ZN6S727C12v7Ev
  virtual void  v8(); // _ZN6S727C12v8Ev
  virtual void  v9(); // _ZN6S727C12v9Ev
  virtual void  v10(); // _ZN6S727C13v10Ev
  virtual void  v11(); // _ZN6S727C13v11Ev
  S727C1(); // tgen
};
//SIG(1 S727C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fi} vd v42 v43 v44 v45 v46 v47 v48 FC9{ m Fp Fi[2] FC10{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S727C1 ::~S727C1(){ note_dtor("S727C1", this);}
void  S727C1 ::v1(){vfunc_called(this, "_ZN6S727C12v1Ev");}
void  S727C1 ::v2(){vfunc_called(this, "_ZN6S727C12v2Ev");}
void  S727C1 ::v3(){vfunc_called(this, "_ZN6S727C12v3Ev");}
void  S727C1 ::v4(){vfunc_called(this, "_ZN6S727C12v4Ev");}
void  S727C1 ::v5(){vfunc_called(this, "_ZN6S727C12v5Ev");}
void  S727C1 ::v6(){vfunc_called(this, "_ZN6S727C12v6Ev");}
void  S727C1 ::v7(){vfunc_called(this, "_ZN6S727C12v7Ev");}
void  S727C1 ::v8(){vfunc_called(this, "_ZN6S727C12v8Ev");}
void  S727C1 ::v9(){vfunc_called(this, "_ZN6S727C12v9Ev");}
void  S727C1 ::v10(){vfunc_called(this, "_ZN6S727C13v10Ev");}
void  S727C1 ::v11(){vfunc_called(this, "_ZN6S727C13v11Ev");}
S727C1 ::S727C1(){ note_ctor("S727C1", this);} // tgen

static void Test_S727C1()
{
  extern Class_Descriptor cd_S727C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S727C1, buf);
    S727C1 *dp, &lv = *(dp=new (buf) S727C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S727C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S727C1)");
    check_base_class_offset(lv, (S7368C49*)(S727C4*)(S727C3*)(S727C2*), 0, "S727C1");
    check_base_class_offset(lv, (S727C4*)(S727C3*)(S727C2*), 0, "S727C1");
    check_base_class_offset(lv, (S727C3*)(S727C2*), 0, "S727C1");
    check_base_class_offset(lv, (S727C2*), 0, "S727C1");
    check_field_offset(lv, s727c1f0, ABISELECT(128,84), "S727C1.s727c1f0");
    test_class_info(&lv, &cd_S727C1);
    dp->~S727C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS727C1(Test_S727C1, "S727C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN6S727C1C1Ev();
extern void _ZN6S727C1D1Ev();
Name_Map name_map_S727C1[] = {
  NSPAIR(_ZN6S727C1C1Ev),
  NSPAIR(_ZN6S727C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S727C4;
extern VTBL_ENTRY _ZTI6S727C4[];
extern  VTBL_ENTRY _ZTV6S727C4[];
extern Class_Descriptor cd_S727C3;
extern VTBL_ENTRY _ZTI6S727C3[];
extern  VTBL_ENTRY _ZTV6S727C3[];
extern Class_Descriptor cd_S727C2;
extern VTBL_ENTRY _ZTI6S727C2[];
extern  VTBL_ENTRY _ZTV6S727C2[];
static Base_Class bases_S727C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S727C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S727C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S727C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S727C1[];
extern void _ZN6S727C1D1Ev();
extern void _ZN6S727C1D0Ev();
extern void _ZN6S727C43v12Ev();
extern void _ZN6S727C43v13Ev();
extern void _ZN6S727C43v14Ev();
extern void _ZN6S727C43v15Ev();
extern void _ZN6S727C43v16Ev();
extern void _ZN6S727C43v17Ev();
extern void _ZN6S727C43v18Ev();
extern void _ZN6S727C43v19Ev();
extern void _ZN6S727C43v20Ev();
extern void _ZN6S727C43v21Ev();
extern void _ZN6S727C43v22Ev();
extern void _ZN6S727C33v23Ev();
extern void _ZN6S727C33v24Ev();
extern void _ZN6S727C33v25Ev();
extern void _ZN6S727C33v26Ev();
extern void _ZN6S727C33v27Ev();
extern void _ZN6S727C33v28Ev();
extern void _ZN6S727C33v29Ev();
extern void _ZN6S727C33v30Ev();
extern void _ZN6S727C33v31Ev();
extern void _ZN6S727C33v32Ev();
extern void _ZN6S727C33v33Ev();
extern void _ZN6S727C33v34Ev();
extern void _ZN6S727C33v35Ev();
extern void _ZN6S727C33v36Ev();
extern void _ZN6S727C33v37Ev();
extern void _ZN6S727C33v38Ev();
extern void _ZN6S727C33v39Ev();
extern void _ZN6S727C33v40Ev();
extern void _ZN6S727C33v41Ev();
extern void _ZN6S727C23v42Ev();
extern void _ZN6S727C23v43Ev();
extern void _ZN6S727C23v44Ev();
extern void _ZN6S727C23v45Ev();
extern void _ZN6S727C23v46Ev();
extern void _ZN6S727C23v47Ev();
extern void _ZN6S727C23v48Ev();
extern void _ZN6S727C12v1Ev();
extern void _ZN6S727C12v2Ev();
extern void _ZN6S727C12v3Ev();
extern void _ZN6S727C12v4Ev();
extern void _ZN6S727C12v5Ev();
extern void _ZN6S727C12v6Ev();
extern void _ZN6S727C12v7Ev();
extern void _ZN6S727C12v8Ev();
extern void _ZN6S727C12v9Ev();
extern void _ZN6S727C13v10Ev();
extern void _ZN6S727C13v11Ev();
static  VTBL_ENTRY vtc_S727C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S727C1[0]),
  (VTBL_ENTRY)&_ZN6S727C1D1Ev,
  (VTBL_ENTRY)&_ZN6S727C1D0Ev,
  (VTBL_ENTRY)&_ZN6S727C43v12Ev,
  (VTBL_ENTRY)&_ZN6S727C43v13Ev,
  (VTBL_ENTRY)&_ZN6S727C43v14Ev,
  (VTBL_ENTRY)&_ZN6S727C43v15Ev,
  (VTBL_ENTRY)&_ZN6S727C43v16Ev,
  (VTBL_ENTRY)&_ZN6S727C43v17Ev,
  (VTBL_ENTRY)&_ZN6S727C43v18Ev,
  (VTBL_ENTRY)&_ZN6S727C43v19Ev,
  (VTBL_ENTRY)&_ZN6S727C43v20Ev,
  (VTBL_ENTRY)&_ZN6S727C43v21Ev,
  (VTBL_ENTRY)&_ZN6S727C43v22Ev,
  (VTBL_ENTRY)&_ZN6S727C33v23Ev,
  (VTBL_ENTRY)&_ZN6S727C33v24Ev,
  (VTBL_ENTRY)&_ZN6S727C33v25Ev,
  (VTBL_ENTRY)&_ZN6S727C33v26Ev,
  (VTBL_ENTRY)&_ZN6S727C33v27Ev,
  (VTBL_ENTRY)&_ZN6S727C33v28Ev,
  (VTBL_ENTRY)&_ZN6S727C33v29Ev,
  (VTBL_ENTRY)&_ZN6S727C33v30Ev,
  (VTBL_ENTRY)&_ZN6S727C33v31Ev,
  (VTBL_ENTRY)&_ZN6S727C33v32Ev,
  (VTBL_ENTRY)&_ZN6S727C33v33Ev,
  (VTBL_ENTRY)&_ZN6S727C33v34Ev,
  (VTBL_ENTRY)&_ZN6S727C33v35Ev,
  (VTBL_ENTRY)&_ZN6S727C33v36Ev,
  (VTBL_ENTRY)&_ZN6S727C33v37Ev,
  (VTBL_ENTRY)&_ZN6S727C33v38Ev,
  (VTBL_ENTRY)&_ZN6S727C33v39Ev,
  (VTBL_ENTRY)&_ZN6S727C33v40Ev,
  (VTBL_ENTRY)&_ZN6S727C33v41Ev,
  (VTBL_ENTRY)&_ZN6S727C23v42Ev,
  (VTBL_ENTRY)&_ZN6S727C23v43Ev,
  (VTBL_ENTRY)&_ZN6S727C23v44Ev,
  (VTBL_ENTRY)&_ZN6S727C23v45Ev,
  (VTBL_ENTRY)&_ZN6S727C23v46Ev,
  (VTBL_ENTRY)&_ZN6S727C23v47Ev,
  (VTBL_ENTRY)&_ZN6S727C23v48Ev,
  (VTBL_ENTRY)&_ZN6S727C12v1Ev,
  (VTBL_ENTRY)&_ZN6S727C12v2Ev,
  (VTBL_ENTRY)&_ZN6S727C12v3Ev,
  (VTBL_ENTRY)&_ZN6S727C12v4Ev,
  (VTBL_ENTRY)&_ZN6S727C12v5Ev,
  (VTBL_ENTRY)&_ZN6S727C12v6Ev,
  (VTBL_ENTRY)&_ZN6S727C12v7Ev,
  (VTBL_ENTRY)&_ZN6S727C12v8Ev,
  (VTBL_ENTRY)&_ZN6S727C12v9Ev,
  (VTBL_ENTRY)&_ZN6S727C13v10Ev,
  (VTBL_ENTRY)&_ZN6S727C13v11Ev,
};
extern VTBL_ENTRY _ZTI6S727C1[];
extern  VTBL_ENTRY _ZTV6S727C1[];
Class_Descriptor cd_S727C1 = {  "S727C1", // class name
  bases_S727C1, 4,
  &(vtc_S727C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI6S727C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S727C1),52, //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  S5196C3  {
  virtual  ~S5196C3(); // _ZN7S5196C3D1Ev
  virtual void  v4(); // _ZN7S5196C32v4Ev
  virtual void  v5(); // _ZN7S5196C32v5Ev
  S5196C3(); // tgen
};
//SIG(-1 S5196C3) C1{ vd v1 v2}


 S5196C3 ::~S5196C3(){ note_dtor("S5196C3", this);}
void  S5196C3 ::v4(){vfunc_called(this, "_ZN7S5196C32v4Ev");}
void  S5196C3 ::v5(){vfunc_called(this, "_ZN7S5196C32v5Ev");}
S5196C3 ::S5196C3(){ note_ctor("S5196C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5196C3C1Ev();
extern void _ZN7S5196C3D1Ev();
Name_Map name_map_S5196C3[] = {
  NSPAIR(_ZN7S5196C3C1Ev),
  NSPAIR(_ZN7S5196C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5196C3[];
extern void _ZN7S5196C3D1Ev();
extern void _ZN7S5196C3D0Ev();
extern void _ZN7S5196C32v4Ev();
extern void _ZN7S5196C32v5Ev();
static  VTBL_ENTRY vtc_S5196C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5196C3[0]),
  (VTBL_ENTRY)&_ZN7S5196C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5196C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5196C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5196C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5196C3[];
extern  VTBL_ENTRY _ZTV7S5196C3[];
Class_Descriptor cd_S5196C3 = {  "S5196C3", // class name
  0,0,//no base classes
  &(vtc_S5196C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5196C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5196C3),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  S5196C2_nt  : S5196C3 {
  int s5196c2f0[4];
  virtual  ~S5196C2_nt(); // _ZN10S5196C2_ntD1Ev
  virtual void  v6(); // _ZN10S5196C2_nt2v6Ev
  virtual void  v7(); // _ZN10S5196C2_nt2v7Ev
  S5196C2_nt(); // tgen
};
//SIG(-1 S5196C2_nt) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[4]}


 S5196C2_nt ::~S5196C2_nt(){ note_dtor("S5196C2_nt", this);}
void  S5196C2_nt ::v6(){vfunc_called(this, "_ZN10S5196C2_nt2v6Ev");}
void  S5196C2_nt ::v7(){vfunc_called(this, "_ZN10S5196C2_nt2v7Ev");}
S5196C2_nt ::S5196C2_nt(){ note_ctor("S5196C2_nt", this);} // tgen

//skip512 S5196C2_nt

#else // __cplusplus

extern void _ZN10S5196C2_ntC1Ev();
extern void _ZN10S5196C2_ntD1Ev();
Name_Map name_map_S5196C2_nt[] = {
  NSPAIR(_ZN10S5196C2_ntC1Ev),
  NSPAIR(_ZN10S5196C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5196C3;
extern VTBL_ENTRY _ZTI7S5196C3[];
extern  VTBL_ENTRY _ZTV7S5196C3[];
static Base_Class bases_S5196C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5196C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5196C2_nt[];
extern void _ZN10S5196C2_ntD1Ev();
extern void _ZN10S5196C2_ntD0Ev();
extern void _ZN7S5196C32v4Ev();
extern void _ZN7S5196C32v5Ev();
extern void _ZN10S5196C2_nt2v6Ev();
extern void _ZN10S5196C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S5196C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5196C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5196C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5196C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S5196C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5196C32v5Ev,
  (VTBL_ENTRY)&_ZN10S5196C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5196C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S5196C2_nt[];
VTBL_ENTRY *P__ZTI10S5196C2_nt = _ZTI10S5196C2_nt; 
extern  VTBL_ENTRY _ZTV10S5196C2_nt[];
Class_Descriptor cd_S5196C2_nt = {  "S5196C2_nt", // class name
  bases_S5196C2_nt, 1,
  &(vtc_S5196C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI10S5196C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5196C2_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  S5196C1  : S5196C2_nt {
  ::S499C21_nt s5196c1f0;
  ::S2011C19_nt s5196c1f1;
  virtual void  v1(); // _ZN7S5196C12v1Ev
  virtual void  v2(); // _ZN7S5196C12v2Ev
  virtual void  v3(); // _ZN7S5196C12v3Ev
  ~S5196C1(); // tgen
  S5196C1(); // tgen
};
//SIG(1 S5196C1) C1{ BC2{ BC3{ vd v4 v5} vd v6 v7 Fi[4]} v1 v2 v3 FC4{ m Fi[4]} FC5{ BC6{ vd v10 v11} vd v8 v9 FC7{ BC6 vd v12 v13 FC8{ m Fp Fi FC9{ m}}} FC10{ BC6 vd v14 v15 FC8 FC8 Fi} FC11{ BC12{ m Fp Fi[2] FC13{ m}} BC6 vd v16 v17} FC14{ vd m FC15{ m Fs[6] Fi[2] Fc Fs}} FC16{ m Fp Fi FC17{ m}} FC16 Fc[2] Fi FC8 FC8 FC16 FC8 FC8 Fi[3] Fp FC8 FC14 FC8 Fi}}


void  S5196C1 ::v1(){vfunc_called(this, "_ZN7S5196C12v1Ev");}
void  S5196C1 ::v2(){vfunc_called(this, "_ZN7S5196C12v2Ev");}
void  S5196C1 ::v3(){vfunc_called(this, "_ZN7S5196C12v3Ev");}
S5196C1 ::~S5196C1(){ note_dtor("S5196C1", this);} // tgen
S5196C1 ::S5196C1(){ note_ctor("S5196C1", this);} // tgen

static void Test_S5196C1()
{
  extern Class_Descriptor cd_S5196C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,76)];
    init_test(&cd_S5196C1, buf);
    S5196C1 *dp, &lv = *(dp=new (buf) S5196C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,300), "sizeof(S5196C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5196C1)");
    check_base_class_offset(lv, (S5196C3*)(S5196C2_nt*), 0, "S5196C1");
    check_base_class_offset(lv, (S5196C2_nt*), 0, "S5196C1");
    check_field_offset(lv, s5196c1f0, ABISELECT(24,20), "S5196C1.s5196c1f0");
    check_field_offset(lv, s5196c1f1, ABISELECT(40,36), "S5196C1.s5196c1f1");
    test_class_info(&lv, &cd_S5196C1);
    dp->~S5196C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5196C1(Test_S5196C1, "S5196C1", ABISELECT(400,300));

#else // __cplusplus

extern void _ZN7S5196C1C1Ev();
extern void _ZN7S5196C1D1Ev();
Name_Map name_map_S5196C1[] = {
  NSPAIR(_ZN7S5196C1C1Ev),
  NSPAIR(_ZN7S5196C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5196C3;
extern VTBL_ENTRY _ZTI7S5196C3[];
extern  VTBL_ENTRY _ZTV7S5196C3[];
extern Class_Descriptor cd_S5196C2_nt;
extern VTBL_ENTRY _ZTI10S5196C2_nt[];
extern  VTBL_ENTRY _ZTV10S5196C2_nt[];
static Base_Class bases_S5196C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5196C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5196C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5196C1[];
extern void _ZN7S5196C1D1Ev();
extern void _ZN7S5196C1D0Ev();
extern void _ZN7S5196C32v4Ev();
extern void _ZN7S5196C32v5Ev();
extern void _ZN10S5196C2_nt2v6Ev();
extern void _ZN10S5196C2_nt2v7Ev();
extern void _ZN7S5196C12v1Ev();
extern void _ZN7S5196C12v2Ev();
extern void _ZN7S5196C12v3Ev();
static  VTBL_ENTRY vtc_S5196C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5196C1[0]),
  (VTBL_ENTRY)&_ZN7S5196C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5196C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5196C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5196C32v5Ev,
  (VTBL_ENTRY)&_ZN10S5196C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5196C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S5196C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5196C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5196C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5196C1[];
extern  VTBL_ENTRY _ZTV7S5196C1[];
Class_Descriptor cd_S5196C1 = {  "S5196C1", // class name
  bases_S5196C1, 2,
  &(vtc_S5196C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,300), // object size
  NSPAIRA(_ZTI7S5196C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5196C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S728C4  : S7368C49 {
  void *s728c4f0;
  ::S10256C12_nt s728c4f1;
  virtual  ~S728C4(); // _ZN6S728C4D1Ev
  virtual void  v12(); // _ZN6S728C43v12Ev
  virtual void  v13(); // _ZN6S728C43v13Ev
  virtual void  v14(); // _ZN6S728C43v14Ev
  virtual void  v15(); // _ZN6S728C43v15Ev
  virtual void  v16(); // _ZN6S728C43v16Ev
  virtual void  v17(); // _ZN6S728C43v17Ev
  virtual void  v18(); // _ZN6S728C43v18Ev
  virtual void  v19(); // _ZN6S728C43v19Ev
  virtual void  v20(); // _ZN6S728C43v20Ev
  virtual void  v21(); // _ZN6S728C43v21Ev
  virtual void  v22(); // _ZN6S728C43v22Ev
  S728C4(); // tgen
};
//SIG(-1 S728C4) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S728C4 ::~S728C4(){ note_dtor("S728C4", this);}
void  S728C4 ::v12(){vfunc_called(this, "_ZN6S728C43v12Ev");}
void  S728C4 ::v13(){vfunc_called(this, "_ZN6S728C43v13Ev");}
void  S728C4 ::v14(){vfunc_called(this, "_ZN6S728C43v14Ev");}
void  S728C4 ::v15(){vfunc_called(this, "_ZN6S728C43v15Ev");}
void  S728C4 ::v16(){vfunc_called(this, "_ZN6S728C43v16Ev");}
void  S728C4 ::v17(){vfunc_called(this, "_ZN6S728C43v17Ev");}
void  S728C4 ::v18(){vfunc_called(this, "_ZN6S728C43v18Ev");}
void  S728C4 ::v19(){vfunc_called(this, "_ZN6S728C43v19Ev");}
void  S728C4 ::v20(){vfunc_called(this, "_ZN6S728C43v20Ev");}
void  S728C4 ::v21(){vfunc_called(this, "_ZN6S728C43v21Ev");}
void  S728C4 ::v22(){vfunc_called(this, "_ZN6S728C43v22Ev");}
S728C4 ::S728C4(){ note_ctor("S728C4", this);} // tgen

static void Test_S728C4()
{
  extern Class_Descriptor cd_S728C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S728C4, buf);
    S728C4 *dp, &lv = *(dp=new (buf) S728C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S728C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S728C4)");
    check_base_class_offset(lv, (S7368C49*), 0, "S728C4");
    check_field_offset(lv, s728c4f0, ABISELECT(32,20), "S728C4.s728c4f0");
    check_field_offset(lv, s728c4f1, ABISELECT(40,24), "S728C4.s728c4f1");
    test_class_info(&lv, &cd_S728C4);
    dp->~S728C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS728C4(Test_S728C4, "S728C4", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN6S728C4C1Ev();
extern void _ZN6S728C4D1Ev();
Name_Map name_map_S728C4[] = {
  NSPAIR(_ZN6S728C4C1Ev),
  NSPAIR(_ZN6S728C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S728C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S728C4[];
extern void _ZN6S728C4D1Ev();
extern void _ZN6S728C4D0Ev();
extern void _ZN6S728C43v12Ev();
extern void _ZN6S728C43v13Ev();
extern void _ZN6S728C43v14Ev();
extern void _ZN6S728C43v15Ev();
extern void _ZN6S728C43v16Ev();
extern void _ZN6S728C43v17Ev();
extern void _ZN6S728C43v18Ev();
extern void _ZN6S728C43v19Ev();
extern void _ZN6S728C43v20Ev();
extern void _ZN6S728C43v21Ev();
extern void _ZN6S728C43v22Ev();
static  VTBL_ENTRY vtc_S728C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S728C4[0]),
  (VTBL_ENTRY)&_ZN6S728C4D1Ev,
  (VTBL_ENTRY)&_ZN6S728C4D0Ev,
  (VTBL_ENTRY)&_ZN6S728C43v12Ev,
  (VTBL_ENTRY)&_ZN6S728C43v13Ev,
  (VTBL_ENTRY)&_ZN6S728C43v14Ev,
  (VTBL_ENTRY)&_ZN6S728C43v15Ev,
  (VTBL_ENTRY)&_ZN6S728C43v16Ev,
  (VTBL_ENTRY)&_ZN6S728C43v17Ev,
  (VTBL_ENTRY)&_ZN6S728C43v18Ev,
  (VTBL_ENTRY)&_ZN6S728C43v19Ev,
  (VTBL_ENTRY)&_ZN6S728C43v20Ev,
  (VTBL_ENTRY)&_ZN6S728C43v21Ev,
  (VTBL_ENTRY)&_ZN6S728C43v22Ev,
};
extern VTBL_ENTRY _ZTI6S728C4[];
extern  VTBL_ENTRY _ZTV6S728C4[];
Class_Descriptor cd_S728C4 = {  "S728C4", // class name
  bases_S728C4, 1,
  &(vtc_S728C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI6S728C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S728C4),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S728C3  : S728C4 {
  int s728c3f0;
  virtual  ~S728C3(); // _ZN6S728C3D1Ev
  virtual void  v23(); // _ZN6S728C33v23Ev
  virtual void  v24(); // _ZN6S728C33v24Ev
  virtual void  v25(); // _ZN6S728C33v25Ev
  virtual void  v26(); // _ZN6S728C33v26Ev
  virtual void  v27(); // _ZN6S728C33v27Ev
  virtual void  v28(); // _ZN6S728C33v28Ev
  virtual void  v29(); // _ZN6S728C33v29Ev
  virtual void  v30(); // _ZN6S728C33v30Ev
  virtual void  v31(); // _ZN6S728C33v31Ev
  virtual void  v32(); // _ZN6S728C33v32Ev
  virtual void  v33(); // _ZN6S728C33v33Ev
  virtual void  v34(); // _ZN6S728C33v34Ev
  virtual void  v35(); // _ZN6S728C33v35Ev
  virtual void  v36(); // _ZN6S728C33v36Ev
  virtual void  v37(); // _ZN6S728C33v37Ev
  virtual void  v38(); // _ZN6S728C33v38Ev
  virtual void  v39(); // _ZN6S728C33v39Ev
  virtual void  v40(); // _ZN6S728C33v40Ev
  virtual void  v41(); // _ZN6S728C33v41Ev
  S728C3(); // tgen
};
//SIG(-1 S728C3) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fi}


 S728C3 ::~S728C3(){ note_dtor("S728C3", this);}
void  S728C3 ::v23(){vfunc_called(this, "_ZN6S728C33v23Ev");}
void  S728C3 ::v24(){vfunc_called(this, "_ZN6S728C33v24Ev");}
void  S728C3 ::v25(){vfunc_called(this, "_ZN6S728C33v25Ev");}
void  S728C3 ::v26(){vfunc_called(this, "_ZN6S728C33v26Ev");}
void  S728C3 ::v27(){vfunc_called(this, "_ZN6S728C33v27Ev");}
void  S728C3 ::v28(){vfunc_called(this, "_ZN6S728C33v28Ev");}
void  S728C3 ::v29(){vfunc_called(this, "_ZN6S728C33v29Ev");}
void  S728C3 ::v30(){vfunc_called(this, "_ZN6S728C33v30Ev");}
void  S728C3 ::v31(){vfunc_called(this, "_ZN6S728C33v31Ev");}
void  S728C3 ::v32(){vfunc_called(this, "_ZN6S728C33v32Ev");}
void  S728C3 ::v33(){vfunc_called(this, "_ZN6S728C33v33Ev");}
void  S728C3 ::v34(){vfunc_called(this, "_ZN6S728C33v34Ev");}
void  S728C3 ::v35(){vfunc_called(this, "_ZN6S728C33v35Ev");}
void  S728C3 ::v36(){vfunc_called(this, "_ZN6S728C33v36Ev");}
void  S728C3 ::v37(){vfunc_called(this, "_ZN6S728C33v37Ev");}
void  S728C3 ::v38(){vfunc_called(this, "_ZN6S728C33v38Ev");}
void  S728C3 ::v39(){vfunc_called(this, "_ZN6S728C33v39Ev");}
void  S728C3 ::v40(){vfunc_called(this, "_ZN6S728C33v40Ev");}
void  S728C3 ::v41(){vfunc_called(this, "_ZN6S728C33v41Ev");}
S728C3 ::S728C3(){ note_ctor("S728C3", this);} // tgen

static void Test_S728C3()
{
  extern Class_Descriptor cd_S728C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S728C3, buf);
    S728C3 *dp, &lv = *(dp=new (buf) S728C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S728C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S728C3)");
    check_base_class_offset(lv, (S7368C49*)(S728C4*), 0, "S728C3");
    check_base_class_offset(lv, (S728C4*), 0, "S728C3");
    check_field_offset(lv, s728c3f0, ABISELECT(96,64), "S728C3.s728c3f0");
    test_class_info(&lv, &cd_S728C3);
    dp->~S728C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS728C3(Test_S728C3, "S728C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN6S728C3C1Ev();
extern void _ZN6S728C3D1Ev();
Name_Map name_map_S728C3[] = {
  NSPAIR(_ZN6S728C3C1Ev),
  NSPAIR(_ZN6S728C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S728C4;
extern VTBL_ENTRY _ZTI6S728C4[];
extern  VTBL_ENTRY _ZTV6S728C4[];
static Base_Class bases_S728C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S728C3[];
extern void _ZN6S728C3D1Ev();
extern void _ZN6S728C3D0Ev();
extern void _ZN6S728C43v12Ev();
extern void _ZN6S728C43v13Ev();
extern void _ZN6S728C43v14Ev();
extern void _ZN6S728C43v15Ev();
extern void _ZN6S728C43v16Ev();
extern void _ZN6S728C43v17Ev();
extern void _ZN6S728C43v18Ev();
extern void _ZN6S728C43v19Ev();
extern void _ZN6S728C43v20Ev();
extern void _ZN6S728C43v21Ev();
extern void _ZN6S728C43v22Ev();
extern void _ZN6S728C33v23Ev();
extern void _ZN6S728C33v24Ev();
extern void _ZN6S728C33v25Ev();
extern void _ZN6S728C33v26Ev();
extern void _ZN6S728C33v27Ev();
extern void _ZN6S728C33v28Ev();
extern void _ZN6S728C33v29Ev();
extern void _ZN6S728C33v30Ev();
extern void _ZN6S728C33v31Ev();
extern void _ZN6S728C33v32Ev();
extern void _ZN6S728C33v33Ev();
extern void _ZN6S728C33v34Ev();
extern void _ZN6S728C33v35Ev();
extern void _ZN6S728C33v36Ev();
extern void _ZN6S728C33v37Ev();
extern void _ZN6S728C33v38Ev();
extern void _ZN6S728C33v39Ev();
extern void _ZN6S728C33v40Ev();
extern void _ZN6S728C33v41Ev();
static  VTBL_ENTRY vtc_S728C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S728C3[0]),
  (VTBL_ENTRY)&_ZN6S728C3D1Ev,
  (VTBL_ENTRY)&_ZN6S728C3D0Ev,
  (VTBL_ENTRY)&_ZN6S728C43v12Ev,
  (VTBL_ENTRY)&_ZN6S728C43v13Ev,
  (VTBL_ENTRY)&_ZN6S728C43v14Ev,
  (VTBL_ENTRY)&_ZN6S728C43v15Ev,
  (VTBL_ENTRY)&_ZN6S728C43v16Ev,
  (VTBL_ENTRY)&_ZN6S728C43v17Ev,
  (VTBL_ENTRY)&_ZN6S728C43v18Ev,
  (VTBL_ENTRY)&_ZN6S728C43v19Ev,
  (VTBL_ENTRY)&_ZN6S728C43v20Ev,
  (VTBL_ENTRY)&_ZN6S728C43v21Ev,
  (VTBL_ENTRY)&_ZN6S728C43v22Ev,
  (VTBL_ENTRY)&_ZN6S728C33v23Ev,
  (VTBL_ENTRY)&_ZN6S728C33v24Ev,
  (VTBL_ENTRY)&_ZN6S728C33v25Ev,
  (VTBL_ENTRY)&_ZN6S728C33v26Ev,
  (VTBL_ENTRY)&_ZN6S728C33v27Ev,
  (VTBL_ENTRY)&_ZN6S728C33v28Ev,
  (VTBL_ENTRY)&_ZN6S728C33v29Ev,
  (VTBL_ENTRY)&_ZN6S728C33v30Ev,
  (VTBL_ENTRY)&_ZN6S728C33v31Ev,
  (VTBL_ENTRY)&_ZN6S728C33v32Ev,
  (VTBL_ENTRY)&_ZN6S728C33v33Ev,
  (VTBL_ENTRY)&_ZN6S728C33v34Ev,
  (VTBL_ENTRY)&_ZN6S728C33v35Ev,
  (VTBL_ENTRY)&_ZN6S728C33v36Ev,
  (VTBL_ENTRY)&_ZN6S728C33v37Ev,
  (VTBL_ENTRY)&_ZN6S728C33v38Ev,
  (VTBL_ENTRY)&_ZN6S728C33v39Ev,
  (VTBL_ENTRY)&_ZN6S728C33v40Ev,
  (VTBL_ENTRY)&_ZN6S728C33v41Ev,
};
extern VTBL_ENTRY _ZTI6S728C3[];
extern  VTBL_ENTRY _ZTV6S728C3[];
Class_Descriptor cd_S728C3 = {  "S728C3", // class name
  bases_S728C3, 2,
  &(vtc_S728C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI6S728C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S728C3),34, //virtual function table var
  2, // 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  S728C2  : S728C3 {
  ::S7368C77 s728c2f0;
  virtual  ~S728C2(); // _ZN6S728C2D1Ev
  virtual void  v42(); // _ZN6S728C23v42Ev
  virtual void  v43(); // _ZN6S728C23v43Ev
  virtual void  v44(); // _ZN6S728C23v44Ev
  virtual void  v45(); // _ZN6S728C23v45Ev
  virtual void  v46(); // _ZN6S728C23v46Ev
  virtual void  v47(); // _ZN6S728C23v47Ev
  virtual void  v48(); // _ZN6S728C23v48Ev
  S728C2(); // tgen
};
//SIG(-1 S728C2) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fi} vd v1 v2 v3 v4 v5 v6 v7 FC8{ m Fp Fi[2] FC9{ m}}}


 S728C2 ::~S728C2(){ note_dtor("S728C2", this);}
void  S728C2 ::v42(){vfunc_called(this, "_ZN6S728C23v42Ev");}
void  S728C2 ::v43(){vfunc_called(this, "_ZN6S728C23v43Ev");}
void  S728C2 ::v44(){vfunc_called(this, "_ZN6S728C23v44Ev");}
void  S728C2 ::v45(){vfunc_called(this, "_ZN6S728C23v45Ev");}
void  S728C2 ::v46(){vfunc_called(this, "_ZN6S728C23v46Ev");}
void  S728C2 ::v47(){vfunc_called(this, "_ZN6S728C23v47Ev");}
void  S728C2 ::v48(){vfunc_called(this, "_ZN6S728C23v48Ev");}
S728C2 ::S728C2(){ note_ctor("S728C2", this);} // tgen

static void Test_S728C2()
{
  extern Class_Descriptor cd_S728C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S728C2, buf);
    S728C2 *dp, &lv = *(dp=new (buf) S728C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S728C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S728C2)");
    check_base_class_offset(lv, (S7368C49*)(S728C4*)(S728C3*), 0, "S728C2");
    check_base_class_offset(lv, (S728C4*)(S728C3*), 0, "S728C2");
    check_base_class_offset(lv, (S728C3*), 0, "S728C2");
    check_field_offset(lv, s728c2f0, ABISELECT(104,68), "S728C2.s728c2f0");
    test_class_info(&lv, &cd_S728C2);
    dp->~S728C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS728C2(Test_S728C2, "S728C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN6S728C2C1Ev();
extern void _ZN6S728C2D1Ev();
Name_Map name_map_S728C2[] = {
  NSPAIR(_ZN6S728C2C1Ev),
  NSPAIR(_ZN6S728C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S728C4;
extern VTBL_ENTRY _ZTI6S728C4[];
extern  VTBL_ENTRY _ZTV6S728C4[];
extern Class_Descriptor cd_S728C3;
extern VTBL_ENTRY _ZTI6S728C3[];
extern  VTBL_ENTRY _ZTV6S728C3[];
static Base_Class bases_S728C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S728C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S728C2[];
extern void _ZN6S728C2D1Ev();
extern void _ZN6S728C2D0Ev();
extern void _ZN6S728C43v12Ev();
extern void _ZN6S728C43v13Ev();
extern void _ZN6S728C43v14Ev();
extern void _ZN6S728C43v15Ev();
extern void _ZN6S728C43v16Ev();
extern void _ZN6S728C43v17Ev();
extern void _ZN6S728C43v18Ev();
extern void _ZN6S728C43v19Ev();
extern void _ZN6S728C43v20Ev();
extern void _ZN6S728C43v21Ev();
extern void _ZN6S728C43v22Ev();
extern void _ZN6S728C33v23Ev();
extern void _ZN6S728C33v24Ev();
extern void _ZN6S728C33v25Ev();
extern void _ZN6S728C33v26Ev();
extern void _ZN6S728C33v27Ev();
extern void _ZN6S728C33v28Ev();
extern void _ZN6S728C33v29Ev();
extern void _ZN6S728C33v30Ev();
extern void _ZN6S728C33v31Ev();
extern void _ZN6S728C33v32Ev();
extern void _ZN6S728C33v33Ev();
extern void _ZN6S728C33v34Ev();
extern void _ZN6S728C33v35Ev();
extern void _ZN6S728C33v36Ev();
extern void _ZN6S728C33v37Ev();
extern void _ZN6S728C33v38Ev();
extern void _ZN6S728C33v39Ev();
extern void _ZN6S728C33v40Ev();
extern void _ZN6S728C33v41Ev();
extern void _ZN6S728C23v42Ev();
extern void _ZN6S728C23v43Ev();
extern void _ZN6S728C23v44Ev();
extern void _ZN6S728C23v45Ev();
extern void _ZN6S728C23v46Ev();
extern void _ZN6S728C23v47Ev();
extern void _ZN6S728C23v48Ev();
static  VTBL_ENTRY vtc_S728C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S728C2[0]),
  (VTBL_ENTRY)&_ZN6S728C2D1Ev,
  (VTBL_ENTRY)&_ZN6S728C2D0Ev,
  (VTBL_ENTRY)&_ZN6S728C43v12Ev,
  (VTBL_ENTRY)&_ZN6S728C43v13Ev,
  (VTBL_ENTRY)&_ZN6S728C43v14Ev,
  (VTBL_ENTRY)&_ZN6S728C43v15Ev,
  (VTBL_ENTRY)&_ZN6S728C43v16Ev,
  (VTBL_ENTRY)&_ZN6S728C43v17Ev,
  (VTBL_ENTRY)&_ZN6S728C43v18Ev,
  (VTBL_ENTRY)&_ZN6S728C43v19Ev,
  (VTBL_ENTRY)&_ZN6S728C43v20Ev,
  (VTBL_ENTRY)&_ZN6S728C43v21Ev,
  (VTBL_ENTRY)&_ZN6S728C43v22Ev,
  (VTBL_ENTRY)&_ZN6S728C33v23Ev,
  (VTBL_ENTRY)&_ZN6S728C33v24Ev,
  (VTBL_ENTRY)&_ZN6S728C33v25Ev,
  (VTBL_ENTRY)&_ZN6S728C33v26Ev,
  (VTBL_ENTRY)&_ZN6S728C33v27Ev,
  (VTBL_ENTRY)&_ZN6S728C33v28Ev,
  (VTBL_ENTRY)&_ZN6S728C33v29Ev,
  (VTBL_ENTRY)&_ZN6S728C33v30Ev,
  (VTBL_ENTRY)&_ZN6S728C33v31Ev,
  (VTBL_ENTRY)&_ZN6S728C33v32Ev,
  (VTBL_ENTRY)&_ZN6S728C33v33Ev,
  (VTBL_ENTRY)&_ZN6S728C33v34Ev,
  (VTBL_ENTRY)&_ZN6S728C33v35Ev,
  (VTBL_ENTRY)&_ZN6S728C33v36Ev,
  (VTBL_ENTRY)&_ZN6S728C33v37Ev,
  (VTBL_ENTRY)&_ZN6S728C33v38Ev,
  (VTBL_ENTRY)&_ZN6S728C33v39Ev,
  (VTBL_ENTRY)&_ZN6S728C33v40Ev,
  (VTBL_ENTRY)&_ZN6S728C33v41Ev,
  (VTBL_ENTRY)&_ZN6S728C23v42Ev,
  (VTBL_ENTRY)&_ZN6S728C23v43Ev,
  (VTBL_ENTRY)&_ZN6S728C23v44Ev,
  (VTBL_ENTRY)&_ZN6S728C23v45Ev,
  (VTBL_ENTRY)&_ZN6S728C23v46Ev,
  (VTBL_ENTRY)&_ZN6S728C23v47Ev,
  (VTBL_ENTRY)&_ZN6S728C23v48Ev,
};
extern VTBL_ENTRY _ZTI6S728C2[];
extern  VTBL_ENTRY _ZTV6S728C2[];
Class_Descriptor cd_S728C2 = {  "S728C2", // class name
  bases_S728C2, 3,
  &(vtc_S728C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI6S728C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S728C2),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S728C1  : S728C2 {
  virtual  ~S728C1(); // _ZN6S728C1D1Ev
  virtual void  v1(); // _ZN6S728C12v1Ev
  virtual void  v2(); // _ZN6S728C12v2Ev
  virtual void  v3(); // _ZN6S728C12v3Ev
  virtual void  v4(); // _ZN6S728C12v4Ev
  virtual void  v5(); // _ZN6S728C12v5Ev
  virtual void  v6(); // _ZN6S728C12v6Ev
  virtual void  v7(); // _ZN6S728C12v7Ev
  virtual void  v8(); // _ZN6S728C12v8Ev
  virtual void  v9(); // _ZN6S728C12v9Ev
  virtual void  v10(); // _ZN6S728C13v10Ev
  virtual void  v11(); // _ZN6S728C13v11Ev
  S728C1(); // tgen
};
//SIG(1 S728C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]}} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 Fi} vd v42 v43 v44 v45 v46 v47 v48 FC9{ m Fp Fi[2] FC10{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


 S728C1 ::~S728C1(){ note_dtor("S728C1", this);}
void  S728C1 ::v1(){vfunc_called(this, "_ZN6S728C12v1Ev");}
void  S728C1 ::v2(){vfunc_called(this, "_ZN6S728C12v2Ev");}
void  S728C1 ::v3(){vfunc_called(this, "_ZN6S728C12v3Ev");}
void  S728C1 ::v4(){vfunc_called(this, "_ZN6S728C12v4Ev");}
void  S728C1 ::v5(){vfunc_called(this, "_ZN6S728C12v5Ev");}
void  S728C1 ::v6(){vfunc_called(this, "_ZN6S728C12v6Ev");}
void  S728C1 ::v7(){vfunc_called(this, "_ZN6S728C12v7Ev");}
void  S728C1 ::v8(){vfunc_called(this, "_ZN6S728C12v8Ev");}
void  S728C1 ::v9(){vfunc_called(this, "_ZN6S728C12v9Ev");}
void  S728C1 ::v10(){vfunc_called(this, "_ZN6S728C13v10Ev");}
void  S728C1 ::v11(){vfunc_called(this, "_ZN6S728C13v11Ev");}
S728C1 ::S728C1(){ note_ctor("S728C1", this);} // tgen

static void Test_S728C1()
{
  extern Class_Descriptor cd_S728C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S728C1, buf);
    S728C1 *dp, &lv = *(dp=new (buf) S728C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S728C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S728C1)");
    check_base_class_offset(lv, (S7368C49*)(S728C4*)(S728C3*)(S728C2*), 0, "S728C1");
    check_base_class_offset(lv, (S728C4*)(S728C3*)(S728C2*), 0, "S728C1");
    check_base_class_offset(lv, (S728C3*)(S728C2*), 0, "S728C1");
    check_base_class_offset(lv, (S728C2*), 0, "S728C1");
    test_class_info(&lv, &cd_S728C1);
    dp->~S728C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS728C1(Test_S728C1, "S728C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN6S728C1C1Ev();
extern void _ZN6S728C1D1Ev();
Name_Map name_map_S728C1[] = {
  NSPAIR(_ZN6S728C1C1Ev),
  NSPAIR(_ZN6S728C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S728C4;
extern VTBL_ENTRY _ZTI6S728C4[];
extern  VTBL_ENTRY _ZTV6S728C4[];
extern Class_Descriptor cd_S728C3;
extern VTBL_ENTRY _ZTI6S728C3[];
extern  VTBL_ENTRY _ZTV6S728C3[];
extern Class_Descriptor cd_S728C2;
extern VTBL_ENTRY _ZTI6S728C2[];
extern  VTBL_ENTRY _ZTV6S728C2[];
static Base_Class bases_S728C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S728C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S728C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S728C1[];
extern void _ZN6S728C1D1Ev();
extern void _ZN6S728C1D0Ev();
extern void _ZN6S728C43v12Ev();
extern void _ZN6S728C43v13Ev();
extern void _ZN6S728C43v14Ev();
extern void _ZN6S728C43v15Ev();
extern void _ZN6S728C43v16Ev();
extern void _ZN6S728C43v17Ev();
extern void _ZN6S728C43v18Ev();
extern void _ZN6S728C43v19Ev();
extern void _ZN6S728C43v20Ev();
extern void _ZN6S728C43v21Ev();
extern void _ZN6S728C43v22Ev();
extern void _ZN6S728C33v23Ev();
extern void _ZN6S728C33v24Ev();
extern void _ZN6S728C33v25Ev();
extern void _ZN6S728C33v26Ev();
extern void _ZN6S728C33v27Ev();
extern void _ZN6S728C33v28Ev();
extern void _ZN6S728C33v29Ev();
extern void _ZN6S728C33v30Ev();
extern void _ZN6S728C33v31Ev();
extern void _ZN6S728C33v32Ev();
extern void _ZN6S728C33v33Ev();
extern void _ZN6S728C33v34Ev();
extern void _ZN6S728C33v35Ev();
extern void _ZN6S728C33v36Ev();
extern void _ZN6S728C33v37Ev();
extern void _ZN6S728C33v38Ev();
extern void _ZN6S728C33v39Ev();
extern void _ZN6S728C33v40Ev();
extern void _ZN6S728C33v41Ev();
extern void _ZN6S728C23v42Ev();
extern void _ZN6S728C23v43Ev();
extern void _ZN6S728C23v44Ev();
extern void _ZN6S728C23v45Ev();
extern void _ZN6S728C23v46Ev();
extern void _ZN6S728C23v47Ev();
extern void _ZN6S728C23v48Ev();
extern void _ZN6S728C12v1Ev();
extern void _ZN6S728C12v2Ev();
extern void _ZN6S728C12v3Ev();
extern void _ZN6S728C12v4Ev();
extern void _ZN6S728C12v5Ev();
extern void _ZN6S728C12v6Ev();
extern void _ZN6S728C12v7Ev();
extern void _ZN6S728C12v8Ev();
extern void _ZN6S728C12v9Ev();
extern void _ZN6S728C13v10Ev();
extern void _ZN6S728C13v11Ev();
static  VTBL_ENTRY vtc_S728C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S728C1[0]),
  (VTBL_ENTRY)&_ZN6S728C1D1Ev,
  (VTBL_ENTRY)&_ZN6S728C1D0Ev,
  (VTBL_ENTRY)&_ZN6S728C43v12Ev,
  (VTBL_ENTRY)&_ZN6S728C43v13Ev,
  (VTBL_ENTRY)&_ZN6S728C43v14Ev,
  (VTBL_ENTRY)&_ZN6S728C43v15Ev,
  (VTBL_ENTRY)&_ZN6S728C43v16Ev,
  (VTBL_ENTRY)&_ZN6S728C43v17Ev,
  (VTBL_ENTRY)&_ZN6S728C43v18Ev,
  (VTBL_ENTRY)&_ZN6S728C43v19Ev,
  (VTBL_ENTRY)&_ZN6S728C43v20Ev,
  (VTBL_ENTRY)&_ZN6S728C43v21Ev,
  (VTBL_ENTRY)&_ZN6S728C43v22Ev,
  (VTBL_ENTRY)&_ZN6S728C33v23Ev,
  (VTBL_ENTRY)&_ZN6S728C33v24Ev,
  (VTBL_ENTRY)&_ZN6S728C33v25Ev,
  (VTBL_ENTRY)&_ZN6S728C33v26Ev,
  (VTBL_ENTRY)&_ZN6S728C33v27Ev,
  (VTBL_ENTRY)&_ZN6S728C33v28Ev,
  (VTBL_ENTRY)&_ZN6S728C33v29Ev,
  (VTBL_ENTRY)&_ZN6S728C33v30Ev,
  (VTBL_ENTRY)&_ZN6S728C33v31Ev,
  (VTBL_ENTRY)&_ZN6S728C33v32Ev,
  (VTBL_ENTRY)&_ZN6S728C33v33Ev,
  (VTBL_ENTRY)&_ZN6S728C33v34Ev,
  (VTBL_ENTRY)&_ZN6S728C33v35Ev,
  (VTBL_ENTRY)&_ZN6S728C33v36Ev,
  (VTBL_ENTRY)&_ZN6S728C33v37Ev,
  (VTBL_ENTRY)&_ZN6S728C33v38Ev,
  (VTBL_ENTRY)&_ZN6S728C33v39Ev,
  (VTBL_ENTRY)&_ZN6S728C33v40Ev,
  (VTBL_ENTRY)&_ZN6S728C33v41Ev,
  (VTBL_ENTRY)&_ZN6S728C23v42Ev,
  (VTBL_ENTRY)&_ZN6S728C23v43Ev,
  (VTBL_ENTRY)&_ZN6S728C23v44Ev,
  (VTBL_ENTRY)&_ZN6S728C23v45Ev,
  (VTBL_ENTRY)&_ZN6S728C23v46Ev,
  (VTBL_ENTRY)&_ZN6S728C23v47Ev,
  (VTBL_ENTRY)&_ZN6S728C23v48Ev,
  (VTBL_ENTRY)&_ZN6S728C12v1Ev,
  (VTBL_ENTRY)&_ZN6S728C12v2Ev,
  (VTBL_ENTRY)&_ZN6S728C12v3Ev,
  (VTBL_ENTRY)&_ZN6S728C12v4Ev,
  (VTBL_ENTRY)&_ZN6S728C12v5Ev,
  (VTBL_ENTRY)&_ZN6S728C12v6Ev,
  (VTBL_ENTRY)&_ZN6S728C12v7Ev,
  (VTBL_ENTRY)&_ZN6S728C12v8Ev,
  (VTBL_ENTRY)&_ZN6S728C12v9Ev,
  (VTBL_ENTRY)&_ZN6S728C13v10Ev,
  (VTBL_ENTRY)&_ZN6S728C13v11Ev,
};
extern VTBL_ENTRY _ZTI6S728C1[];
extern  VTBL_ENTRY _ZTV6S728C1[];
Class_Descriptor cd_S728C1 = {  "S728C1", // class name
  bases_S728C1, 4,
  &(vtc_S728C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI6S728C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S728C1),52, //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  S5343C3  {
  virtual  ~S5343C3(); // _ZN7S5343C3D1Ev
  virtual void  v6(); // _ZN7S5343C32v6Ev
  virtual void  v7(); // _ZN7S5343C32v7Ev
  S5343C3(); // tgen
};
//SIG(-1 S5343C3) C1{ vd v1 v2}


 S5343C3 ::~S5343C3(){ note_dtor("S5343C3", this);}
void  S5343C3 ::v6(){vfunc_called(this, "_ZN7S5343C32v6Ev");}
void  S5343C3 ::v7(){vfunc_called(this, "_ZN7S5343C32v7Ev");}
S5343C3 ::S5343C3(){ note_ctor("S5343C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5343C3C1Ev();
extern void _ZN7S5343C3D1Ev();
Name_Map name_map_S5343C3[] = {
  NSPAIR(_ZN7S5343C3C1Ev),
  NSPAIR(_ZN7S5343C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5343C3[];
extern void _ZN7S5343C3D1Ev();
extern void _ZN7S5343C3D0Ev();
extern void _ZN7S5343C32v6Ev();
extern void _ZN7S5343C32v7Ev();
static  VTBL_ENTRY vtc_S5343C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5343C3[0]),
  (VTBL_ENTRY)&_ZN7S5343C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5343C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5343C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5343C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5343C3[];
extern  VTBL_ENTRY _ZTV7S5343C3[];
Class_Descriptor cd_S5343C3 = {  "S5343C3", // class name
  0,0,//no base classes
  &(vtc_S5343C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5343C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5343C3),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  S5343C2  : S5343C3 {
  int s5343c2f0[4];
  virtual  ~S5343C2(); // _ZN7S5343C2D1Ev
  virtual void  v8(); // _ZN7S5343C22v8Ev
  virtual void  v9(); // _ZN7S5343C22v9Ev
  S5343C2(); // tgen
};
//SIG(-1 S5343C2) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[4]}


 S5343C2 ::~S5343C2(){ note_dtor("S5343C2", this);}
void  S5343C2 ::v8(){vfunc_called(this, "_ZN7S5343C22v8Ev");}
void  S5343C2 ::v9(){vfunc_called(this, "_ZN7S5343C22v9Ev");}
S5343C2 ::S5343C2(){ note_ctor("S5343C2", this);} // tgen

static void Test_S5343C2()
{
  extern Class_Descriptor cd_S5343C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S5343C2, buf);
    S5343C2 *dp, &lv = *(dp=new (buf) S5343C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S5343C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5343C2)");
    check_base_class_offset(lv, (S5343C3*), 0, "S5343C2");
    check_field_offset(lv, s5343c2f0, ABISELECT(8,4), "S5343C2.s5343c2f0");
    test_class_info(&lv, &cd_S5343C2);
    dp->~S5343C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5343C2(Test_S5343C2, "S5343C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S5343C2C1Ev();
extern void _ZN7S5343C2D1Ev();
Name_Map name_map_S5343C2[] = {
  NSPAIR(_ZN7S5343C2C1Ev),
  NSPAIR(_ZN7S5343C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5343C3;
extern VTBL_ENTRY _ZTI7S5343C3[];
extern  VTBL_ENTRY _ZTV7S5343C3[];
static Base_Class bases_S5343C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5343C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5343C2[];
extern void _ZN7S5343C2D1Ev();
extern void _ZN7S5343C2D0Ev();
extern void _ZN7S5343C32v6Ev();
extern void _ZN7S5343C32v7Ev();
extern void _ZN7S5343C22v8Ev();
extern void _ZN7S5343C22v9Ev();
static  VTBL_ENTRY vtc_S5343C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5343C2[0]),
  (VTBL_ENTRY)&_ZN7S5343C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5343C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5343C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5343C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5343C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5343C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S5343C2[];
extern  VTBL_ENTRY _ZTV7S5343C2[];
Class_Descriptor cd_S5343C2 = {  "S5343C2", // class name
  bases_S5343C2, 1,
  &(vtc_S5343C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S5343C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5343C2),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  S5343C1  : S5343C2 {
  ::S2011C19_nt s5343c1f0;
  virtual void  v1(); // _ZN7S5343C12v1Ev
  virtual void  v2(); // _ZN7S5343C12v2Ev
  virtual void  v3(); // _ZN7S5343C12v3Ev
  virtual void  v4(); // _ZN7S5343C12v4Ev
  virtual void  v5(); // _ZN7S5343C12v5Ev
  ~S5343C1(); // tgen
  S5343C1(); // tgen
};
//SIG(1 S5343C1) C1{ BC2{ BC3{ vd v6 v7} vd v8 v9 Fi[4]} v1 v2 v3 v4 v5 FC4{ BC5{ vd v12 v13} vd v10 v11 FC6{ BC5 vd v14 v15 FC7{ m Fp Fi FC8{ m}}} FC9{ BC5 vd v16 v17 FC7 FC7 Fi} FC10{ BC11{ m Fp Fi[2] FC12{ m}} BC5 vd v18 v19} FC13{ vd m FC14{ m Fs[6] Fi[2] Fc Fs}} FC15{ m Fp Fi FC16{ m}} FC15 Fc[2] Fi FC7 FC7 FC15 FC7 FC7 Fi[3] Fp FC7 FC13 FC7 Fi}}


void  S5343C1 ::v1(){vfunc_called(this, "_ZN7S5343C12v1Ev");}
void  S5343C1 ::v2(){vfunc_called(this, "_ZN7S5343C12v2Ev");}
void  S5343C1 ::v3(){vfunc_called(this, "_ZN7S5343C12v3Ev");}
void  S5343C1 ::v4(){vfunc_called(this, "_ZN7S5343C12v4Ev");}
void  S5343C1 ::v5(){vfunc_called(this, "_ZN7S5343C12v5Ev");}
S5343C1 ::~S5343C1(){ note_dtor("S5343C1", this);} // tgen
S5343C1 ::S5343C1(){ note_ctor("S5343C1", this);} // tgen

static void Test_S5343C1()
{
  extern Class_Descriptor cd_S5343C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,72)];
    init_test(&cd_S5343C1, buf);
    S5343C1 *dp, &lv = *(dp=new (buf) S5343C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S5343C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5343C1)");
    check_base_class_offset(lv, (S5343C3*)(S5343C2*), 0, "S5343C1");
    check_base_class_offset(lv, (S5343C2*), 0, "S5343C1");
    check_field_offset(lv, s5343c1f0, ABISELECT(24,20), "S5343C1.s5343c1f0");
    test_class_info(&lv, &cd_S5343C1);
    dp->~S5343C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5343C1(Test_S5343C1, "S5343C1", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN7S5343C1C1Ev();
extern void _ZN7S5343C1D1Ev();
Name_Map name_map_S5343C1[] = {
  NSPAIR(_ZN7S5343C1C1Ev),
  NSPAIR(_ZN7S5343C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5343C3;
extern VTBL_ENTRY _ZTI7S5343C3[];
extern  VTBL_ENTRY _ZTV7S5343C3[];
extern Class_Descriptor cd_S5343C2;
extern VTBL_ENTRY _ZTI7S5343C2[];
extern  VTBL_ENTRY _ZTV7S5343C2[];
static Base_Class bases_S5343C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5343C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5343C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5343C1[];
extern void _ZN7S5343C1D1Ev();
extern void _ZN7S5343C1D0Ev();
extern void _ZN7S5343C32v6Ev();
extern void _ZN7S5343C32v7Ev();
extern void _ZN7S5343C22v8Ev();
extern void _ZN7S5343C22v9Ev();
extern void _ZN7S5343C12v1Ev();
extern void _ZN7S5343C12v2Ev();
extern void _ZN7S5343C12v3Ev();
extern void _ZN7S5343C12v4Ev();
extern void _ZN7S5343C12v5Ev();
static  VTBL_ENTRY vtc_S5343C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5343C1[0]),
  (VTBL_ENTRY)&_ZN7S5343C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5343C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5343C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5343C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5343C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5343C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5343C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5343C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5343C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5343C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5343C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5343C1[];
extern  VTBL_ENTRY _ZTV7S5343C1[];
Class_Descriptor cd_S5343C1 = {  "S5343C1", // class name
  bases_S5343C1, 2,
  &(vtc_S5343C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI7S5343C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5343C1),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  S2158C4_nt  {
  ::S7368C9_nt s2158c4f0;
  int s2158c4f1[2];
  char s2158c4f2;
  virtual  ~S2158C4_nt(); // _ZN10S2158C4_ntD1Ev
  virtual void  v3(); // _ZN10S2158C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2158C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2158C4_nt2v5Ev
  S2158C4_nt(); // tgen
};
//SIG(-1 S2158C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2158C4_nt ::~S2158C4_nt(){ note_dtor("S2158C4_nt", this);}
void  S2158C4_nt ::v3(){vfunc_called(this, "_ZN10S2158C4_nt2v3Ev");}
void  S2158C4_nt ::v4(){vfunc_called(this, "_ZN10S2158C4_nt2v4Ev");}
void  S2158C4_nt ::v5(){vfunc_called(this, "_ZN10S2158C4_nt2v5Ev");}
S2158C4_nt ::S2158C4_nt(){ note_ctor("S2158C4_nt", this);} // tgen

//skip512 S2158C4_nt

#else // __cplusplus

extern void _ZN10S2158C4_ntC1Ev();
extern void _ZN10S2158C4_ntD1Ev();
Name_Map name_map_S2158C4_nt[] = {
  NSPAIR(_ZN10S2158C4_ntC1Ev),
  NSPAIR(_ZN10S2158C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2158C4_nt[];
extern void _ZN10S2158C4_ntD1Ev();
extern void _ZN10S2158C4_ntD0Ev();
extern void _ZN10S2158C4_nt2v3Ev();
extern void _ZN10S2158C4_nt2v4Ev();
extern void _ZN10S2158C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2158C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2158C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2158C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2158C4_nt[];
VTBL_ENTRY *P__ZTI10S2158C4_nt = _ZTI10S2158C4_nt; 
extern  VTBL_ENTRY _ZTV10S2158C4_nt[];
Class_Descriptor cd_S2158C4_nt = {  "S2158C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2158C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2158C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2158C4_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  S2158C3  : S2158C4_nt , S7368C49 {
  void *s2158c3f0;
  virtual  ~S2158C3(); // _ZN7S2158C3D1Ev
  S2158C3(); // tgen
};
//SIG(-1 S2158C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2158C3()
{
  extern Class_Descriptor cd_S2158C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2158C3, buf);
    S2158C3 *dp, &lv = *(dp=new (buf) S2158C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2158C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2158C3)");
    check_base_class_offset(lv, (S2158C4_nt*), 0, "S2158C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2158C3");
    check_field_offset(lv, s2158c3f0, ABISELECT(72,48), "S2158C3.s2158c3f0");
    test_class_info(&lv, &cd_S2158C3);
    dp->~S2158C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2158C3(Test_S2158C3, "S2158C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2158C3C1Ev();
extern void _ZN7S2158C3D1Ev();
Name_Map name_map_S2158C3[] = {
  NSPAIR(_ZN7S2158C3C1Ev),
  NSPAIR(_ZN7S2158C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2158C4_nt;
extern VTBL_ENTRY _ZTI10S2158C4_nt[];
extern  VTBL_ENTRY _ZTV10S2158C4_nt[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2158C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2158C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2158C3[];
extern void _ZN7S2158C3D1Ev();
extern void _ZN7S2158C3D0Ev();
extern void _ZN10S2158C4_nt2v3Ev();
extern void _ZN10S2158C4_nt2v4Ev();
extern void _ZN10S2158C4_nt2v5Ev();
extern void ABISELECT(_ZThn40_N7S2158C3D1Ev,_ZThn28_N7S2158C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2158C3D0Ev,_ZThn28_N7S2158C3D0Ev)();
static  VTBL_ENTRY vtc_S2158C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2158C3[0]),
  (VTBL_ENTRY)&_ZN7S2158C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2158C3D0Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2158C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2158C3D1Ev,_ZThn28_N7S2158C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2158C3D0Ev,_ZThn28_N7S2158C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2158C3[];
extern  VTBL_ENTRY _ZTV7S2158C3[];
Class_Descriptor cd_S2158C3 = {  "S2158C3", // class name
  bases_S2158C3, 2,
  &(vtc_S2158C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2158C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2158C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2158C2  : S2158C3 {
  void *s2158c2f0;
  int s2158c2f1;
  virtual  ~S2158C2(); // _ZN7S2158C2D1Ev
  virtual void  v6(); // _ZN7S2158C22v6Ev
  S2158C2(); // tgen
};
//SIG(-1 S2158C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2158C2()
{
  extern Class_Descriptor cd_S2158C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2158C2, buf);
    S2158C2 *dp, &lv = *(dp=new (buf) S2158C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2158C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2158C2)");
    check_base_class_offset(lv, (S2158C4_nt*)(S2158C3*), 0, "S2158C2");
    check_base_class_offset(lv, (S7368C49*)(S2158C3*), ABISELECT(40,28), "S2158C2");
    check_base_class_offset(lv, (S2158C3*), 0, "S2158C2");
    check_field_offset(lv, s2158c2f0, ABISELECT(80,52), "S2158C2.s2158c2f0");
    check_field_offset(lv, s2158c2f1, ABISELECT(88,56), "S2158C2.s2158c2f1");
    test_class_info(&lv, &cd_S2158C2);
    dp->~S2158C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2158C2(Test_S2158C2, "S2158C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2158C2C1Ev();
extern void _ZN7S2158C2D1Ev();
Name_Map name_map_S2158C2[] = {
  NSPAIR(_ZN7S2158C2C1Ev),
  NSPAIR(_ZN7S2158C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2158C4_nt;
extern VTBL_ENTRY _ZTI10S2158C4_nt[];
extern  VTBL_ENTRY _ZTV10S2158C4_nt[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2158C3;
extern VTBL_ENTRY _ZTI7S2158C3[];
extern  VTBL_ENTRY _ZTV7S2158C3[];
static Base_Class bases_S2158C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2158C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2158C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2158C2[];
extern void _ZN7S2158C2D1Ev();
extern void _ZN7S2158C2D0Ev();
extern void _ZN10S2158C4_nt2v3Ev();
extern void _ZN10S2158C4_nt2v4Ev();
extern void _ZN10S2158C4_nt2v5Ev();
extern void _ZN7S2158C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2158C2D1Ev,_ZThn28_N7S2158C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2158C2D0Ev,_ZThn28_N7S2158C2D0Ev)();
static  VTBL_ENTRY vtc_S2158C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2158C2[0]),
  (VTBL_ENTRY)&_ZN7S2158C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2158C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2158C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2158C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2158C2D1Ev,_ZThn28_N7S2158C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2158C2D0Ev,_ZThn28_N7S2158C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2158C2[];
extern  VTBL_ENTRY _ZTV7S2158C2[];
Class_Descriptor cd_S2158C2 = {  "S2158C2", // class name
  bases_S2158C2, 3,
  &(vtc_S2158C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2158C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2158C2),12, //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  S2158C1  : S2158C2 {
  ::S7368C33 s2158c1f0;
  ::S7368C32 s2158c1f1;
  void *s2158c1f2;
  virtual  ~S2158C1(); // _ZN7S2158C1D1Ev
  virtual void  v1(); // _ZN7S2158C12v1Ev
  virtual void  v2(); // _ZN7S2158C12v2Ev
  S2158C1(); // tgen
};
//SIG(1 S2158C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fp Fi} vd v1 v2 FC10{ BC11{ vd m Fc} vd FL} FC12{ vd m FC10 FC13{ BC11 vd Fi FC5 FC14{ BC11 vd FL[2]} FC5 FC15{ BC11 vd FC5 FC5 FC5 FC16{ m Fp Fi[2] FC17{ m}} FC18{ m Fp Fi[2] FC6}}}} Fp}


 S2158C1 ::~S2158C1(){ note_dtor("S2158C1", this);}
void  S2158C1 ::v1(){vfunc_called(this, "_ZN7S2158C12v1Ev");}
void  S2158C1 ::v2(){vfunc_called(this, "_ZN7S2158C12v2Ev");}
S2158C1 ::S2158C1(){ note_ctor("S2158C1", this);} // tgen

static void Test_S2158C1()
{
  extern Class_Descriptor cd_S2158C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,60)];
    init_test(&cd_S2158C1, buf);
    S2158C1 *dp, &lv = *(dp=new (buf) S2158C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,236), "sizeof(S2158C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2158C1)");
    check_base_class_offset(lv, (S2158C4_nt*)(S2158C3*)(S2158C2*), 0, "S2158C1");
    check_base_class_offset(lv, (S7368C49*)(S2158C3*)(S2158C2*), ABISELECT(40,28), "S2158C1");
    check_base_class_offset(lv, (S2158C3*)(S2158C2*), 0, "S2158C1");
    check_base_class_offset(lv, (S2158C2*), 0, "S2158C1");
    check_field_offset(lv, s2158c1f0, ABISELECT(96,60), "S2158C1.s2158c1f0");
    check_field_offset(lv, s2158c1f1, ABISELECT(120,76), "S2158C1.s2158c1f1");
    check_field_offset(lv, s2158c1f2, ABISELECT(344,232), "S2158C1.s2158c1f2");
    test_class_info(&lv, &cd_S2158C1);
    dp->~S2158C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2158C1(Test_S2158C1, "S2158C1", ABISELECT(352,236));

#else // __cplusplus

extern void _ZN7S2158C1C1Ev();
extern void _ZN7S2158C1D1Ev();
Name_Map name_map_S2158C1[] = {
  NSPAIR(_ZN7S2158C1C1Ev),
  NSPAIR(_ZN7S2158C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2158C4_nt;
extern VTBL_ENTRY _ZTI10S2158C4_nt[];
extern  VTBL_ENTRY _ZTV10S2158C4_nt[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2158C3;
extern VTBL_ENTRY _ZTI7S2158C3[];
extern  VTBL_ENTRY _ZTV7S2158C3[];
extern Class_Descriptor cd_S2158C2;
extern VTBL_ENTRY _ZTI7S2158C2[];
extern  VTBL_ENTRY _ZTV7S2158C2[];
static Base_Class bases_S2158C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2158C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2158C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2158C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2158C1[];
extern void _ZN7S2158C1D1Ev();
extern void _ZN7S2158C1D0Ev();
extern void _ZN10S2158C4_nt2v3Ev();
extern void _ZN10S2158C4_nt2v4Ev();
extern void _ZN10S2158C4_nt2v5Ev();
extern void _ZN7S2158C22v6Ev();
extern void _ZN7S2158C12v1Ev();
extern void _ZN7S2158C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2158C1D1Ev,_ZThn28_N7S2158C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2158C1D0Ev,_ZThn28_N7S2158C1D0Ev)();
static  VTBL_ENTRY vtc_S2158C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2158C1[0]),
  (VTBL_ENTRY)&_ZN7S2158C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2158C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2158C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2158C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2158C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2158C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2158C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2158C1D1Ev,_ZThn28_N7S2158C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2158C1D0Ev,_ZThn28_N7S2158C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2158C1[];
extern  VTBL_ENTRY _ZTV7S2158C1[];
Class_Descriptor cd_S2158C1 = {  "S2158C1", // class name
  bases_S2158C1, 4,
  &(vtc_S2158C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,236), // object size
  NSPAIRA(_ZTI7S2158C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2158C1),14, //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  S4469C3  {
  int s4469c3f0[4];
  ::S4464C4_nt s4469c3f1;
  int s4469c3f2;
  char s4469c3f3;
  ::S7368C72_nt s4469c3f4;
  int s4469c3f5;
  virtual  ~S4469C3(); // _ZN7S4469C3D1Ev
  virtual void  v2(); // _ZN7S4469C32v2Ev
  virtual void  v3(); // _ZN7S4469C32v3Ev
  virtual void  v4(); // _ZN7S4469C32v4Ev
  S4469C3(); // tgen
};
//SIG(-1 S4469C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4469C3 ::~S4469C3(){ note_dtor("S4469C3", this);}
void  S4469C3 ::v2(){vfunc_called(this, "_ZN7S4469C32v2Ev");}
void  S4469C3 ::v3(){vfunc_called(this, "_ZN7S4469C32v3Ev");}
void  S4469C3 ::v4(){vfunc_called(this, "_ZN7S4469C32v4Ev");}
S4469C3 ::S4469C3(){ note_ctor("S4469C3", this);} // tgen

static void Test_S4469C3()
{
  extern Class_Descriptor cd_S4469C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4469C3, buf);
    S4469C3 *dp, &lv = *(dp=new (buf) S4469C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4469C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4469C3)");
    check_field_offset(lv, s4469c3f0, ABISELECT(8,4), "S4469C3.s4469c3f0");
    check_field_offset(lv, s4469c3f1, ABISELECT(24,20), "S4469C3.s4469c3f1");
    check_field_offset(lv, s4469c3f2, ABISELECT(40,28), "S4469C3.s4469c3f2");
    check_field_offset(lv, s4469c3f3, ABISELECT(44,32), "S4469C3.s4469c3f3");
    check_field_offset(lv, s4469c3f4, ABISELECT(48,36), "S4469C3.s4469c3f4");
    check_field_offset(lv, s4469c3f5, ABISELECT(64,48), "S4469C3.s4469c3f5");
    test_class_info(&lv, &cd_S4469C3);
    dp->~S4469C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4469C3(Test_S4469C3, "S4469C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4469C3C1Ev();
extern void _ZN7S4469C3D1Ev();
Name_Map name_map_S4469C3[] = {
  NSPAIR(_ZN7S4469C3C1Ev),
  NSPAIR(_ZN7S4469C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4469C3[];
extern void _ZN7S4469C3D1Ev();
extern void _ZN7S4469C3D0Ev();
extern void _ZN7S4469C32v2Ev();
extern void _ZN7S4469C32v3Ev();
extern void _ZN7S4469C32v4Ev();
static  VTBL_ENTRY vtc_S4469C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4469C3[0]),
  (VTBL_ENTRY)&_ZN7S4469C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4469C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4469C3[];
extern  VTBL_ENTRY _ZTV7S4469C3[];
Class_Descriptor cd_S4469C3 = {  "S4469C3", // class name
  0,0,//no base classes
  &(vtc_S4469C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4469C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4469C3),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  S4469C2  : S4469C3 {
  virtual  ~S4469C2(); // _ZN7S4469C2D1Ev
  virtual void  v5(); // _ZN7S4469C22v5Ev
  S4469C2(); // tgen
};
//SIG(-1 S4469C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


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

static void Test_S4469C2()
{
  extern Class_Descriptor cd_S4469C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4469C2, buf);
    S4469C2 *dp, &lv = *(dp=new (buf) S4469C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4469C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4469C2)");
    check_base_class_offset(lv, (S4469C3*), 0, "S4469C2");
    test_class_info(&lv, &cd_S4469C2);
    dp->~S4469C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4469C2(Test_S4469C2, "S4469C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4469C2C1Ev();
extern void _ZN7S4469C2D1Ev();
Name_Map name_map_S4469C2[] = {
  NSPAIR(_ZN7S4469C2C1Ev),
  NSPAIR(_ZN7S4469C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4469C3;
extern VTBL_ENTRY _ZTI7S4469C3[];
extern  VTBL_ENTRY _ZTV7S4469C3[];
static Base_Class bases_S4469C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4469C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4469C2[];
extern void _ZN7S4469C2D1Ev();
extern void _ZN7S4469C2D0Ev();
extern void _ZN7S4469C32v2Ev();
extern void _ZN7S4469C32v3Ev();
extern void _ZN7S4469C32v4Ev();
extern void _ZN7S4469C22v5Ev();
static  VTBL_ENTRY vtc_S4469C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4469C2[0]),
  (VTBL_ENTRY)&_ZN7S4469C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4469C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4469C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4469C2[];
extern  VTBL_ENTRY _ZTV7S4469C2[];
Class_Descriptor cd_S4469C2 = {  "S4469C2", // class name
  bases_S4469C2, 1,
  &(vtc_S4469C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4469C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4469C2),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  S4469C9  {
  ::S7368C9_nt s4469c9f0;
};
//SIG(-1 S4469C9) C1{ FC2{ m Fp Fi FC3{ m}}}



static void Test_S4469C9()
{
  {
    init_simple_test("S4469C9");
    S4469C9 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4469C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4469C9)");
    check_field_offset(lv, s4469c9f0, 0, "S4469C9.s4469c9f0");
  }
}
static Arrange_To_Call_Me vS4469C9(Test_S4469C9, "S4469C9", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4469C14  {
  ::S4464C12_nt s4469c14f0;
  ::S4464C12_nt s4469c14f1;
  void  mf4469c14(); // _ZN8S4469C149mf4469c14Ev
};
//SIG(-1 S4469C14) C1{ m FC2{ m FC3{ vd m FL Fc} FC3} FC2}


void  S4469C14 ::mf4469c14(){}

static void Test_S4469C14()
{
  {
    init_simple_test("S4469C14");
    S4469C14 lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S4469C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4469C14)");
    check_field_offset(lv, s4469c14f0, 0, "S4469C14.s4469c14f0");
    check_field_offset(lv, s4469c14f1, ABISELECT(48,32), "S4469C14.s4469c14f1");
  }
}
static Arrange_To_Call_Me vS4469C14(Test_S4469C14, "S4469C14", ABISELECT(96,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4469C11  {
  ::S7368C9_nt s4469c11f0;
  ::S4464C12_nt s4469c11f1;
  ::S4469C14 s4469c11f2;
  ::S10256C3_nt s4469c11f3;
  ::S7368C9_nt s4469c11f4;
  ::S7368C9_nt s4469c11f5;
};
//SIG(-1 S4469C11) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ vd m FL Fc} FC5} FC6{ m FC4 FC4} FC7{ m Fp Fi FC8{ m} FC9{ m}} FC2 FC2}



static void Test_S4469C11()
{
  {
    init_simple_test("S4469C11");
    S4469C11 lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S4469C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4469C11)");
    check_field_offset(lv, s4469c11f0, 0, "S4469C11.s4469c11f0");
    check_field_offset(lv, s4469c11f1, ABISELECT(16,12), "S4469C11.s4469c11f1");
    check_field_offset(lv, s4469c11f2, ABISELECT(64,44), "S4469C11.s4469c11f2");
    check_field_offset(lv, s4469c11f3, ABISELECT(160,108), "S4469C11.s4469c11f3");
    check_field_offset(lv, s4469c11f4, ABISELECT(176,120), "S4469C11.s4469c11f4");
    check_field_offset(lv, s4469c11f5, ABISELECT(192,132), "S4469C11.s4469c11f5");
  }
}
static Arrange_To_Call_Me vS4469C11(Test_S4469C11, "S4469C11", ABISELECT(208,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4469C10  {
  int s4469c10f0;
  ::S4469C11 s4469c10f1;
  ::S7368C9_nt s4469c10f2;
  ::S7368C9_nt s4469c10f3;
  ::S7368C9_nt s4469c10f4;
  ::S7368C9_nt s4469c10f5;
  ::S10256C3_nt s4469c10f6;
  void  mf4469c10(); // _ZN8S4469C109mf4469c10Ev
};
//SIG(-1 S4469C10) C1{ m Fi FC2{ FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{ vd m FL Fc} FC6} FC7{ m FC5 FC5} FC8{ m Fp Fi FC9{ m} FC10{ m}} FC3 FC3} FC3 FC3 FC3 FC3 FC8}


void  S4469C10 ::mf4469c10(){}

static void Test_S4469C10()
{
  {
    init_simple_test("S4469C10");
    S4469C10 lv;
    check2(sizeof(lv), ABISELECT(296,208), "sizeof(S4469C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4469C10)");
    check_field_offset(lv, s4469c10f0, 0, "S4469C10.s4469c10f0");
    check_field_offset(lv, s4469c10f1, ABISELECT(8,4), "S4469C10.s4469c10f1");
    check_field_offset(lv, s4469c10f2, ABISELECT(216,148), "S4469C10.s4469c10f2");
    check_field_offset(lv, s4469c10f3, ABISELECT(232,160), "S4469C10.s4469c10f3");
    check_field_offset(lv, s4469c10f4, ABISELECT(248,172), "S4469C10.s4469c10f4");
    check_field_offset(lv, s4469c10f5, ABISELECT(264,184), "S4469C10.s4469c10f5");
    check_field_offset(lv, s4469c10f6, ABISELECT(280,196), "S4469C10.s4469c10f6");
  }
}
static Arrange_To_Call_Me vS4469C10(Test_S4469C10, "S4469C10", ABISELECT(296,208));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4469C1  : S4469C2 {
  ::S7368C47 s4469c1f0;
  void *s4469c1f1;
  ::S4469C9 s4469c1f2;
  ::S4469C10 s4469c1f3;
  virtual  ~S4469C1(); // _ZN7S4469C1D1Ev
  virtual void  v1(); // _ZN7S4469C12v1Ev
  S4469C1(); // tgen
};
//SIG(1 S4469C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}}} Fp FC9{ FC7} FC10{ m Fi FC11{ FC7 FC12{ m FC13{ vd m FL Fc} FC13} FC14{ m FC12 FC12} FC15{ m Fp Fi FC16{ m} FC17{ m}} FC7 FC7} FC7 FC7 FC7 FC7 FC15}}


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

static void Test_S4469C1()
{
  extern Class_Descriptor cd_S4469C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,74)];
    init_test(&cd_S4469C1, buf);
    S4469C1 *dp, &lv = *(dp=new (buf) S4469C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,292), "sizeof(S4469C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4469C1)");
    check_base_class_offset(lv, (S4469C3*)(S4469C2*), 0, "S4469C1");
    check_base_class_offset(lv, (S4469C2*), 0, "S4469C1");
    check_field_offset(lv, s4469c1f0, ABISELECT(72,52), "S4469C1.s4469c1f0");
    check_field_offset(lv, s4469c1f1, ABISELECT(96,68), "S4469C1.s4469c1f1");
    check_field_offset(lv, s4469c1f2, ABISELECT(104,72), "S4469C1.s4469c1f2");
    check_field_offset(lv, s4469c1f3, ABISELECT(120,84), "S4469C1.s4469c1f3");
    test_class_info(&lv, &cd_S4469C1);
    dp->~S4469C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4469C1(Test_S4469C1, "S4469C1", ABISELECT(416,292));

#else // __cplusplus

extern void _ZN7S4469C1C1Ev();
extern void _ZN7S4469C1D1Ev();
Name_Map name_map_S4469C1[] = {
  NSPAIR(_ZN7S4469C1C1Ev),
  NSPAIR(_ZN7S4469C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4469C3;
extern VTBL_ENTRY _ZTI7S4469C3[];
extern  VTBL_ENTRY _ZTV7S4469C3[];
extern Class_Descriptor cd_S4469C2;
extern VTBL_ENTRY _ZTI7S4469C2[];
extern  VTBL_ENTRY _ZTV7S4469C2[];
static Base_Class bases_S4469C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4469C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4469C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4469C1[];
extern void _ZN7S4469C1D1Ev();
extern void _ZN7S4469C1D0Ev();
extern void _ZN7S4469C32v2Ev();
extern void _ZN7S4469C32v3Ev();
extern void _ZN7S4469C32v4Ev();
extern void _ZN7S4469C22v5Ev();
extern void _ZN7S4469C12v1Ev();
static  VTBL_ENTRY vtc_S4469C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4469C1[0]),
  (VTBL_ENTRY)&_ZN7S4469C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4469C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4469C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4469C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4469C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4469C1[];
extern  VTBL_ENTRY _ZTV7S4469C1[];
Class_Descriptor cd_S4469C1 = {  "S4469C1", // class name
  bases_S4469C1, 2,
  &(vtc_S4469C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,292), // object size
  NSPAIRA(_ZTI7S4469C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4469C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2062C4  {
  ::S7368C9_nt s2062c4f0;
  int s2062c4f1[2];
  char s2062c4f2;
  virtual  ~S2062C4(); // _ZN7S2062C4D1Ev
  virtual void  v2(); // _ZN7S2062C42v2Ev
  virtual void  v3(); // _ZN7S2062C42v3Ev
  virtual void  v4(); // _ZN7S2062C42v4Ev
  S2062C4(); // tgen
};
//SIG(-1 S2062C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2062C4 ::~S2062C4(){ note_dtor("S2062C4", this);}
void  S2062C4 ::v2(){vfunc_called(this, "_ZN7S2062C42v2Ev");}
void  S2062C4 ::v3(){vfunc_called(this, "_ZN7S2062C42v3Ev");}
void  S2062C4 ::v4(){vfunc_called(this, "_ZN7S2062C42v4Ev");}
S2062C4 ::S2062C4(){ note_ctor("S2062C4", this);} // tgen

static void Test_S2062C4()
{
  extern Class_Descriptor cd_S2062C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2062C4, buf);
    S2062C4 *dp, &lv = *(dp=new (buf) S2062C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2062C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2062C4)");
    check_field_offset(lv, s2062c4f0, ABISELECT(8,4), "S2062C4.s2062c4f0");
    check_field_offset(lv, s2062c4f1, ABISELECT(24,16), "S2062C4.s2062c4f1");
    check_field_offset(lv, s2062c4f2, ABISELECT(32,24), "S2062C4.s2062c4f2");
    test_class_info(&lv, &cd_S2062C4);
    dp->~S2062C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2062C4(Test_S2062C4, "S2062C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2062C4C1Ev();
extern void _ZN7S2062C4D1Ev();
Name_Map name_map_S2062C4[] = {
  NSPAIR(_ZN7S2062C4C1Ev),
  NSPAIR(_ZN7S2062C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2062C4[];
extern void _ZN7S2062C4D1Ev();
extern void _ZN7S2062C4D0Ev();
extern void _ZN7S2062C42v2Ev();
extern void _ZN7S2062C42v3Ev();
extern void _ZN7S2062C42v4Ev();
static  VTBL_ENTRY vtc_S2062C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2062C4[0]),
  (VTBL_ENTRY)&_ZN7S2062C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2062C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2062C4[];
extern  VTBL_ENTRY _ZTV7S2062C4[];
Class_Descriptor cd_S2062C4 = {  "S2062C4", // class name
  0,0,//no base classes
  &(vtc_S2062C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2062C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2062C4),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  S2062C3  : S2062C4 , S7368C49 {
  void *s2062c3f0;
  virtual  ~S2062C3(); // _ZN7S2062C3D1Ev
  S2062C3(); // tgen
};
//SIG(-1 S2062C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2062C3()
{
  extern Class_Descriptor cd_S2062C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2062C3, buf);
    S2062C3 *dp, &lv = *(dp=new (buf) S2062C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2062C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2062C3)");
    check_base_class_offset(lv, (S2062C4*), 0, "S2062C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2062C3");
    check_field_offset(lv, s2062c3f0, ABISELECT(72,48), "S2062C3.s2062c3f0");
    test_class_info(&lv, &cd_S2062C3);
    dp->~S2062C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2062C3(Test_S2062C3, "S2062C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2062C3C1Ev();
extern void _ZN7S2062C3D1Ev();
Name_Map name_map_S2062C3[] = {
  NSPAIR(_ZN7S2062C3C1Ev),
  NSPAIR(_ZN7S2062C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2062C4;
extern VTBL_ENTRY _ZTI7S2062C4[];
extern  VTBL_ENTRY _ZTV7S2062C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2062C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2062C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2062C3[];
extern void _ZN7S2062C3D1Ev();
extern void _ZN7S2062C3D0Ev();
extern void _ZN7S2062C42v2Ev();
extern void _ZN7S2062C42v3Ev();
extern void _ZN7S2062C42v4Ev();
extern void ABISELECT(_ZThn40_N7S2062C3D1Ev,_ZThn28_N7S2062C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2062C3D0Ev,_ZThn28_N7S2062C3D0Ev)();
static  VTBL_ENTRY vtc_S2062C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2062C3[0]),
  (VTBL_ENTRY)&_ZN7S2062C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2062C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2062C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2062C3D1Ev,_ZThn28_N7S2062C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2062C3D0Ev,_ZThn28_N7S2062C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2062C3[];
extern  VTBL_ENTRY _ZTV7S2062C3[];
Class_Descriptor cd_S2062C3 = {  "S2062C3", // class name
  bases_S2062C3, 2,
  &(vtc_S2062C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2062C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2062C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2062C2  : S2062C3 {
  void *s2062c2f0;
  int s2062c2f1;
  virtual  ~S2062C2(); // _ZN7S2062C2D1Ev
  virtual void  v5(); // _ZN7S2062C22v5Ev
  S2062C2(); // tgen
};
//SIG(-1 S2062C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2062C2()
{
  extern Class_Descriptor cd_S2062C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2062C2, buf);
    S2062C2 *dp, &lv = *(dp=new (buf) S2062C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2062C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2062C2)");
    check_base_class_offset(lv, (S2062C4*)(S2062C3*), 0, "S2062C2");
    check_base_class_offset(lv, (S7368C49*)(S2062C3*), ABISELECT(40,28), "S2062C2");
    check_base_class_offset(lv, (S2062C3*), 0, "S2062C2");
    check_field_offset(lv, s2062c2f0, ABISELECT(80,52), "S2062C2.s2062c2f0");
    check_field_offset(lv, s2062c2f1, ABISELECT(88,56), "S2062C2.s2062c2f1");
    test_class_info(&lv, &cd_S2062C2);
    dp->~S2062C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2062C2(Test_S2062C2, "S2062C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2062C2C1Ev();
extern void _ZN7S2062C2D1Ev();
Name_Map name_map_S2062C2[] = {
  NSPAIR(_ZN7S2062C2C1Ev),
  NSPAIR(_ZN7S2062C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2062C4;
extern VTBL_ENTRY _ZTI7S2062C4[];
extern  VTBL_ENTRY _ZTV7S2062C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2062C3;
extern VTBL_ENTRY _ZTI7S2062C3[];
extern  VTBL_ENTRY _ZTV7S2062C3[];
static Base_Class bases_S2062C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2062C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2062C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2062C2[];
extern void _ZN7S2062C2D1Ev();
extern void _ZN7S2062C2D0Ev();
extern void _ZN7S2062C42v2Ev();
extern void _ZN7S2062C42v3Ev();
extern void _ZN7S2062C42v4Ev();
extern void _ZN7S2062C22v5Ev();
extern void ABISELECT(_ZThn40_N7S2062C2D1Ev,_ZThn28_N7S2062C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2062C2D0Ev,_ZThn28_N7S2062C2D0Ev)();
static  VTBL_ENTRY vtc_S2062C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2062C2[0]),
  (VTBL_ENTRY)&_ZN7S2062C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2062C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2062C22v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2062C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2062C2D1Ev,_ZThn28_N7S2062C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2062C2D0Ev,_ZThn28_N7S2062C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2062C2[];
extern  VTBL_ENTRY _ZTV7S2062C2[];
Class_Descriptor cd_S2062C2 = {  "S2062C2", // class name
  bases_S2062C2, 3,
  &(vtc_S2062C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2062C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2062C2),12, //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  S2062C1  : S2062C2 {
  ::S7368C32 s2062c1f0;
  virtual  ~S2062C1(); // _ZN7S2062C1D1Ev
  virtual void  v1(); // _ZN7S2062C12v1Ev
  S2062C1(); // tgen
};
//SIG(1 S2062C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v5 Fp Fi} vd v1 FC10{ vd m FC11{ BC12{ vd m Fc} vd FL} FC13{ BC12 vd Fi FC5 FC14{ BC12 vd FL[2]} FC5 FC15{ BC12 vd FC5 FC5 FC5 FC16{ m Fp Fi[2] FC17{ m}} FC18{ m Fp Fi[2] FC6}}}}}


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

static void Test_S2062C1()
{
  extern Class_Descriptor cd_S2062C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,55)];
    init_test(&cd_S2062C1, buf);
    S2062C1 *dp, &lv = *(dp=new (buf) S2062C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,216), "sizeof(S2062C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2062C1)");
    check_base_class_offset(lv, (S2062C4*)(S2062C3*)(S2062C2*), 0, "S2062C1");
    check_base_class_offset(lv, (S7368C49*)(S2062C3*)(S2062C2*), ABISELECT(40,28), "S2062C1");
    check_base_class_offset(lv, (S2062C3*)(S2062C2*), 0, "S2062C1");
    check_base_class_offset(lv, (S2062C2*), 0, "S2062C1");
    check_field_offset(lv, s2062c1f0, ABISELECT(96,60), "S2062C1.s2062c1f0");
    test_class_info(&lv, &cd_S2062C1);
    dp->~S2062C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2062C1(Test_S2062C1, "S2062C1", ABISELECT(320,216));

#else // __cplusplus

extern void _ZN7S2062C1C1Ev();
extern void _ZN7S2062C1D1Ev();
Name_Map name_map_S2062C1[] = {
  NSPAIR(_ZN7S2062C1C1Ev),
  NSPAIR(_ZN7S2062C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2062C4;
extern VTBL_ENTRY _ZTI7S2062C4[];
extern  VTBL_ENTRY _ZTV7S2062C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2062C3;
extern VTBL_ENTRY _ZTI7S2062C3[];
extern  VTBL_ENTRY _ZTV7S2062C3[];
extern Class_Descriptor cd_S2062C2;
extern VTBL_ENTRY _ZTI7S2062C2[];
extern  VTBL_ENTRY _ZTV7S2062C2[];
static Base_Class bases_S2062C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2062C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2062C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2062C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2062C1[];
extern void _ZN7S2062C1D1Ev();
extern void _ZN7S2062C1D0Ev();
extern void _ZN7S2062C42v2Ev();
extern void _ZN7S2062C42v3Ev();
extern void _ZN7S2062C42v4Ev();
extern void _ZN7S2062C22v5Ev();
extern void _ZN7S2062C12v1Ev();
extern void ABISELECT(_ZThn40_N7S2062C1D1Ev,_ZThn28_N7S2062C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2062C1D0Ev,_ZThn28_N7S2062C1D0Ev)();
static  VTBL_ENTRY vtc_S2062C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2062C1[0]),
  (VTBL_ENTRY)&_ZN7S2062C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2062C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2062C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2062C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2062C12v1Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2062C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2062C1D1Ev,_ZThn28_N7S2062C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2062C1D0Ev,_ZThn28_N7S2062C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2062C1[];
extern  VTBL_ENTRY _ZTV7S2062C1[];
Class_Descriptor cd_S2062C1 = {  "S2062C1", // class name
  bases_S2062C1, 4,
  &(vtc_S2062C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,216), // object size
  NSPAIRA(_ZTI7S2062C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2062C1),13, //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  S5432C7  {
  void *s5432c7f0;
  ::S7368C9_nt s5432c7f1;
};
//SIG(-1 S5432C7) C1{ Fp FC2{ m Fp Fi FC3{ m}}}



static void Test_S5432C7()
{
  {
    init_simple_test("S5432C7");
    S5432C7 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5432C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5432C7)");
    check_field_offset(lv, s5432c7f0, 0, "S5432C7.s5432c7f0");
    check_field_offset(lv, s5432c7f1, ABISELECT(8,4), "S5432C7.s5432c7f1");
  }
}
static Arrange_To_Call_Me vS5432C7(Test_S5432C7, "S5432C7", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5432C3  {
  void *s5432c3f0[4];
  ::S1686C5_nt s5432c3f1;
  void *s5432c3f2;
  ::S5432C7 s5432c3f3;
  virtual  ~S5432C3(); // _ZN7S5432C3D1Ev
  virtual void  v9(); // _ZN7S5432C32v9Ev
  virtual void  v10(); // _ZN7S5432C33v10Ev
  virtual void  v11(); // _ZN7S5432C33v11Ev
  virtual void  v12(); // _ZN7S5432C33v12Ev
  virtual void  v13(); // _ZN7S5432C33v13Ev
  virtual void  v14(); // _ZN7S5432C33v14Ev
  virtual void  v15(); // _ZN7S5432C33v15Ev
  S5432C3(); // tgen
};
//SIG(-1 S5432C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[4] FC2{ m FC3{ m Fp Fi[2] FC4{ m}} Fp[2]} Fp FC5{ Fp FC6{ m Fp Fi FC7{ m}}}}


 S5432C3 ::~S5432C3(){ note_dtor("S5432C3", this);}
void  S5432C3 ::v9(){vfunc_called(this, "_ZN7S5432C32v9Ev");}
void  S5432C3 ::v10(){vfunc_called(this, "_ZN7S5432C33v10Ev");}
void  S5432C3 ::v11(){vfunc_called(this, "_ZN7S5432C33v11Ev");}
void  S5432C3 ::v12(){vfunc_called(this, "_ZN7S5432C33v12Ev");}
void  S5432C3 ::v13(){vfunc_called(this, "_ZN7S5432C33v13Ev");}
void  S5432C3 ::v14(){vfunc_called(this, "_ZN7S5432C33v14Ev");}
void  S5432C3 ::v15(){vfunc_called(this, "_ZN7S5432C33v15Ev");}
S5432C3 ::S5432C3(){ note_ctor("S5432C3", this);} // tgen

static void Test_S5432C3()
{
  extern Class_Descriptor cd_S5432C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S5432C3, buf);
    S5432C3 *dp, &lv = *(dp=new (buf) S5432C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S5432C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5432C3)");
    check_field_offset(lv, s5432c3f0, ABISELECT(8,4), "S5432C3.s5432c3f0");
    check_field_offset(lv, s5432c3f1, ABISELECT(40,20), "S5432C3.s5432c3f1");
    check_field_offset(lv, s5432c3f2, ABISELECT(80,44), "S5432C3.s5432c3f2");
    check_field_offset(lv, s5432c3f3, ABISELECT(88,48), "S5432C3.s5432c3f3");
    test_class_info(&lv, &cd_S5432C3);
    dp->~S5432C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5432C3(Test_S5432C3, "S5432C3", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S5432C3C1Ev();
extern void _ZN7S5432C3D1Ev();
Name_Map name_map_S5432C3[] = {
  NSPAIR(_ZN7S5432C3C1Ev),
  NSPAIR(_ZN7S5432C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5432C3[];
extern void _ZN7S5432C3D1Ev();
extern void _ZN7S5432C3D0Ev();
extern void _ZN7S5432C32v9Ev();
extern void _ZN7S5432C33v10Ev();
extern void _ZN7S5432C33v11Ev();
extern void _ZN7S5432C33v12Ev();
extern void _ZN7S5432C33v13Ev();
extern void _ZN7S5432C33v14Ev();
extern void _ZN7S5432C33v15Ev();
static  VTBL_ENTRY vtc_S5432C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5432C3[0]),
  (VTBL_ENTRY)&_ZN7S5432C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5432C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5432C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S5432C3[];
extern  VTBL_ENTRY _ZTV7S5432C3[];
Class_Descriptor cd_S5432C3 = {  "S5432C3", // class name
  0,0,//no base classes
  &(vtc_S5432C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S5432C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5432C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5432C10  {
  virtual  ~S5432C10(); // _ZN8S5432C10D1Ev
  virtual void  v16(); // _ZN8S5432C103v16Ev
  virtual void  v17(); // _ZN8S5432C103v17Ev
  virtual void  v18(); // _ZN8S5432C103v18Ev
  S5432C10(); // tgen
};
//SIG(-1 S5432C10) C1{ vd v1 v2 v3}


 S5432C10 ::~S5432C10(){ note_dtor("S5432C10", this);}
void  S5432C10 ::v16(){vfunc_called(this, "_ZN8S5432C103v16Ev");}
void  S5432C10 ::v17(){vfunc_called(this, "_ZN8S5432C103v17Ev");}
void  S5432C10 ::v18(){vfunc_called(this, "_ZN8S5432C103v18Ev");}
S5432C10 ::S5432C10(){ note_ctor("S5432C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S5432C10C1Ev();
extern void _ZN8S5432C10D1Ev();
Name_Map name_map_S5432C10[] = {
  NSPAIR(_ZN8S5432C10C1Ev),
  NSPAIR(_ZN8S5432C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5432C10[];
extern void _ZN8S5432C10D1Ev();
extern void _ZN8S5432C10D0Ev();
extern void _ZN8S5432C103v16Ev();
extern void _ZN8S5432C103v17Ev();
extern void _ZN8S5432C103v18Ev();
static  VTBL_ENTRY vtc_S5432C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5432C10[0]),
  (VTBL_ENTRY)&_ZN8S5432C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5432C10D0Ev,
  (VTBL_ENTRY)&_ZN8S5432C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5432C103v17Ev,
  (VTBL_ENTRY)&_ZN8S5432C103v18Ev,
};
extern VTBL_ENTRY _ZTI8S5432C10[];
extern  VTBL_ENTRY _ZTV8S5432C10[];
Class_Descriptor cd_S5432C10 = {  "S5432C10", // class name
  0,0,//no base classes
  &(vtc_S5432C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5432C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5432C10),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  S5432C11_nt  {
  ::S753C9_nt s5432c11f0;
  int s5432c11f1;
  void *s5432c11f2;
  void  mf5432c11(); // _ZN11S5432C11_nt9mf5432c11Ev
};
//SIG(-1 S5432C11_nt) C1{ m FC2{ m Fp} Fi Fp}


void  S5432C11_nt ::mf5432c11(){}

//skip512 S5432C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5432C2  : S5432C3 , S5432C10 {
  ::S5432C11_nt s5432c2f0;
  int s5432c2f1;
  virtual  ~S5432C2(); // _ZN7S5432C2D1Ev
  virtual void  v19(); // _ZN7S5432C23v19Ev
  virtual void  v20(); // _ZN7S5432C23v20Ev
  virtual void  v21(); // _ZN7S5432C23v21Ev
  virtual void  v22(); // _ZN7S5432C23v22Ev
  virtual void  v23(); // _ZN7S5432C23v23Ev
  virtual void  v24(); // _ZN7S5432C23v24Ev
  virtual void  v25(); // _ZN7S5432C23v25Ev
  virtual void  v26(); // _ZN7S5432C23v26Ev
  virtual void  v27(); // _ZN7S5432C23v27Ev
  virtual void  v28(); // _ZN7S5432C23v28Ev
  S5432C2(); // tgen
};
//SIG(-1 S5432C2) C1{ BC2{ vd v11 v12 v13 v14 v15 v16 v17 Fp[4] FC3{ m FC4{ m Fp Fi[2] FC5{ m}} Fp[2]} Fp FC6{ Fp FC7{ m Fp Fi FC8{ m}}}} BC9{ vd v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC10{ m FC11{ m Fp} Fi Fp} Fi}


 S5432C2 ::~S5432C2(){ note_dtor("S5432C2", this);}
void  S5432C2 ::v19(){vfunc_called(this, "_ZN7S5432C23v19Ev");}
void  S5432C2 ::v20(){vfunc_called(this, "_ZN7S5432C23v20Ev");}
void  S5432C2 ::v21(){vfunc_called(this, "_ZN7S5432C23v21Ev");}
void  S5432C2 ::v22(){vfunc_called(this, "_ZN7S5432C23v22Ev");}
void  S5432C2 ::v23(){vfunc_called(this, "_ZN7S5432C23v23Ev");}
void  S5432C2 ::v24(){vfunc_called(this, "_ZN7S5432C23v24Ev");}
void  S5432C2 ::v25(){vfunc_called(this, "_ZN7S5432C23v25Ev");}
void  S5432C2 ::v26(){vfunc_called(this, "_ZN7S5432C23v26Ev");}
void  S5432C2 ::v27(){vfunc_called(this, "_ZN7S5432C23v27Ev");}
void  S5432C2 ::v28(){vfunc_called(this, "_ZN7S5432C23v28Ev");}
S5432C2 ::S5432C2(){ note_ctor("S5432C2", this);} // tgen

static void Test_S5432C2()
{
  extern Class_Descriptor cd_S5432C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S5432C2, buf);
    S5432C2 *dp, &lv = *(dp=new (buf) S5432C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S5432C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5432C2)");
    check_base_class_offset(lv, (S5432C3*), 0, "S5432C2");
    check_base_class_offset(lv, (S5432C10*), ABISELECT(112,64), "S5432C2");
    check_field_offset(lv, s5432c2f0, ABISELECT(120,68), "S5432C2.s5432c2f0");
    check_field_offset(lv, s5432c2f1, ABISELECT(144,80), "S5432C2.s5432c2f1");
    test_class_info(&lv, &cd_S5432C2);
    dp->~S5432C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5432C2(Test_S5432C2, "S5432C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN7S5432C2C1Ev();
extern void _ZN7S5432C2D1Ev();
Name_Map name_map_S5432C2[] = {
  NSPAIR(_ZN7S5432C2C1Ev),
  NSPAIR(_ZN7S5432C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5432C3;
extern VTBL_ENTRY _ZTI7S5432C3[];
extern  VTBL_ENTRY _ZTV7S5432C3[];
extern Class_Descriptor cd_S5432C10;
extern VTBL_ENTRY _ZTI8S5432C10[];
extern  VTBL_ENTRY _ZTV8S5432C10[];
static Base_Class bases_S5432C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5432C10,    ABISELECT(112,64), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5432C2[];
extern void _ZN7S5432C2D1Ev();
extern void _ZN7S5432C2D0Ev();
extern void _ZN7S5432C32v9Ev();
extern void _ZN7S5432C33v10Ev();
extern void _ZN7S5432C33v11Ev();
extern void _ZN7S5432C33v12Ev();
extern void _ZN7S5432C33v13Ev();
extern void _ZN7S5432C33v14Ev();
extern void _ZN7S5432C33v15Ev();
extern void _ZN7S5432C23v19Ev();
extern void _ZN7S5432C23v20Ev();
extern void _ZN7S5432C23v21Ev();
extern void _ZN7S5432C23v22Ev();
extern void _ZN7S5432C23v23Ev();
extern void _ZN7S5432C23v24Ev();
extern void _ZN7S5432C23v25Ev();
extern void _ZN7S5432C23v26Ev();
extern void _ZN7S5432C23v27Ev();
extern void _ZN7S5432C23v28Ev();
extern void ABISELECT(_ZThn112_N7S5432C2D1Ev,_ZThn64_N7S5432C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S5432C2D0Ev,_ZThn64_N7S5432C2D0Ev)();
extern void _ZN8S5432C103v16Ev();
extern void _ZN8S5432C103v17Ev();
extern void _ZN8S5432C103v18Ev();
static  VTBL_ENTRY vtc_S5432C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5432C2[0]),
  (VTBL_ENTRY)&_ZN7S5432C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5432C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5432C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v28Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S5432C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5432C2D1Ev,_ZThn64_N7S5432C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5432C2D0Ev,_ZThn64_N7S5432C2D0Ev),
  (VTBL_ENTRY)&_ZN8S5432C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5432C103v17Ev,
  (VTBL_ENTRY)&_ZN8S5432C103v18Ev,
};
extern VTBL_ENTRY _ZTI7S5432C2[];
extern  VTBL_ENTRY _ZTV7S5432C2[];
Class_Descriptor cd_S5432C2 = {  "S5432C2", // class name
  bases_S5432C2, 2,
  &(vtc_S5432C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI7S5432C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5432C2),28, //virtual function table var
  2, // 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  S5432C1  : S5432C2 {
  int s5432c1f0;
  virtual  ~S5432C1(); // _ZN7S5432C1D1Ev
  virtual void  v1(); // _ZN7S5432C12v1Ev
  virtual void  v2(); // _ZN7S5432C12v2Ev
  virtual void  v3(); // _ZN7S5432C12v3Ev
  virtual void  v4(); // _ZN7S5432C12v4Ev
  virtual void  v5(); // _ZN7S5432C12v5Ev
  virtual void  v6(); // _ZN7S5432C12v6Ev
  virtual void  v7(); // _ZN7S5432C12v7Ev
  virtual void  v8(); // _ZN7S5432C12v8Ev
  S5432C1(); // tgen
};
//SIG(1 S5432C1) C1{ BC2{ BC3{ vd v9 v10 v11 v12 v13 v14 v15 Fp[4] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]} Fp FC7{ Fp FC8{ m Fp Fi FC9{ m}}}} BC10{ vd v16 v17 v18} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 FC11{ m FC12{ m Fp} Fi Fp} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi}


 S5432C1 ::~S5432C1(){ note_dtor("S5432C1", this);}
void  S5432C1 ::v1(){vfunc_called(this, "_ZN7S5432C12v1Ev");}
void  S5432C1 ::v2(){vfunc_called(this, "_ZN7S5432C12v2Ev");}
void  S5432C1 ::v3(){vfunc_called(this, "_ZN7S5432C12v3Ev");}
void  S5432C1 ::v4(){vfunc_called(this, "_ZN7S5432C12v4Ev");}
void  S5432C1 ::v5(){vfunc_called(this, "_ZN7S5432C12v5Ev");}
void  S5432C1 ::v6(){vfunc_called(this, "_ZN7S5432C12v6Ev");}
void  S5432C1 ::v7(){vfunc_called(this, "_ZN7S5432C12v7Ev");}
void  S5432C1 ::v8(){vfunc_called(this, "_ZN7S5432C12v8Ev");}
S5432C1 ::S5432C1(){ note_ctor("S5432C1", this);} // tgen

static void Test_S5432C1()
{
  extern Class_Descriptor cd_S5432C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S5432C1, buf);
    S5432C1 *dp, &lv = *(dp=new (buf) S5432C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S5432C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5432C1)");
    check_base_class_offset(lv, (S5432C3*)(S5432C2*), 0, "S5432C1");
    check_base_class_offset(lv, (S5432C10*)(S5432C2*), ABISELECT(112,64), "S5432C1");
    check_base_class_offset(lv, (S5432C2*), 0, "S5432C1");
    check_field_offset(lv, s5432c1f0, ABISELECT(148,84), "S5432C1.s5432c1f0");
    test_class_info(&lv, &cd_S5432C1);
    dp->~S5432C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5432C1(Test_S5432C1, "S5432C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S5432C1C1Ev();
extern void _ZN7S5432C1D1Ev();
Name_Map name_map_S5432C1[] = {
  NSPAIR(_ZN7S5432C1C1Ev),
  NSPAIR(_ZN7S5432C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5432C3;
extern VTBL_ENTRY _ZTI7S5432C3[];
extern  VTBL_ENTRY _ZTV7S5432C3[];
extern Class_Descriptor cd_S5432C10;
extern VTBL_ENTRY _ZTI8S5432C10[];
extern  VTBL_ENTRY _ZTV8S5432C10[];
extern Class_Descriptor cd_S5432C2;
extern VTBL_ENTRY _ZTI7S5432C2[];
extern  VTBL_ENTRY _ZTV7S5432C2[];
static Base_Class bases_S5432C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5432C10,    ABISELECT(112,64), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5432C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5432C1[];
extern void _ZN7S5432C1D1Ev();
extern void _ZN7S5432C1D0Ev();
extern void _ZN7S5432C32v9Ev();
extern void _ZN7S5432C33v10Ev();
extern void _ZN7S5432C33v11Ev();
extern void _ZN7S5432C33v12Ev();
extern void _ZN7S5432C33v13Ev();
extern void _ZN7S5432C33v14Ev();
extern void _ZN7S5432C33v15Ev();
extern void _ZN7S5432C23v19Ev();
extern void _ZN7S5432C23v20Ev();
extern void _ZN7S5432C23v21Ev();
extern void _ZN7S5432C23v22Ev();
extern void _ZN7S5432C23v23Ev();
extern void _ZN7S5432C23v24Ev();
extern void _ZN7S5432C23v25Ev();
extern void _ZN7S5432C23v26Ev();
extern void _ZN7S5432C23v27Ev();
extern void _ZN7S5432C23v28Ev();
extern void _ZN7S5432C12v1Ev();
extern void _ZN7S5432C12v2Ev();
extern void _ZN7S5432C12v3Ev();
extern void _ZN7S5432C12v4Ev();
extern void _ZN7S5432C12v5Ev();
extern void _ZN7S5432C12v6Ev();
extern void _ZN7S5432C12v7Ev();
extern void _ZN7S5432C12v8Ev();
extern void ABISELECT(_ZThn112_N7S5432C1D1Ev,_ZThn64_N7S5432C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S5432C1D0Ev,_ZThn64_N7S5432C1D0Ev)();
extern void _ZN8S5432C103v16Ev();
extern void _ZN8S5432C103v17Ev();
extern void _ZN8S5432C103v18Ev();
static  VTBL_ENTRY vtc_S5432C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5432C1[0]),
  (VTBL_ENTRY)&_ZN7S5432C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5432C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5432C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5432C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5432C23v28Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v7Ev,
  (VTBL_ENTRY)&_ZN7S5432C12v8Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S5432C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5432C1D1Ev,_ZThn64_N7S5432C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5432C1D0Ev,_ZThn64_N7S5432C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5432C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5432C103v17Ev,
  (VTBL_ENTRY)&_ZN8S5432C103v18Ev,
};
extern VTBL_ENTRY _ZTI7S5432C1[];
extern  VTBL_ENTRY _ZTV7S5432C1[];
Class_Descriptor cd_S5432C1 = {  "S5432C1", // class name
  bases_S5432C1, 3,
  &(vtc_S5432C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S5432C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5432C1),36, //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  S2060C4  {
  ::S7368C9_nt s2060c4f0;
  int s2060c4f1[2];
  char s2060c4f2;
  virtual  ~S2060C4(); // _ZN7S2060C4D1Ev
  virtual void  v2(); // _ZN7S2060C42v2Ev
  virtual void  v3(); // _ZN7S2060C42v3Ev
  virtual void  v4(); // _ZN7S2060C42v4Ev
  S2060C4(); // tgen
};
//SIG(-1 S2060C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2060C4 ::~S2060C4(){ note_dtor("S2060C4", this);}
void  S2060C4 ::v2(){vfunc_called(this, "_ZN7S2060C42v2Ev");}
void  S2060C4 ::v3(){vfunc_called(this, "_ZN7S2060C42v3Ev");}
void  S2060C4 ::v4(){vfunc_called(this, "_ZN7S2060C42v4Ev");}
S2060C4 ::S2060C4(){ note_ctor("S2060C4", this);} // tgen

static void Test_S2060C4()
{
  extern Class_Descriptor cd_S2060C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2060C4, buf);
    S2060C4 *dp, &lv = *(dp=new (buf) S2060C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2060C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2060C4)");
    check_field_offset(lv, s2060c4f0, ABISELECT(8,4), "S2060C4.s2060c4f0");
    check_field_offset(lv, s2060c4f1, ABISELECT(24,16), "S2060C4.s2060c4f1");
    check_field_offset(lv, s2060c4f2, ABISELECT(32,24), "S2060C4.s2060c4f2");
    test_class_info(&lv, &cd_S2060C4);
    dp->~S2060C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2060C4(Test_S2060C4, "S2060C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2060C4C1Ev();
extern void _ZN7S2060C4D1Ev();
Name_Map name_map_S2060C4[] = {
  NSPAIR(_ZN7S2060C4C1Ev),
  NSPAIR(_ZN7S2060C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2060C4[];
extern void _ZN7S2060C4D1Ev();
extern void _ZN7S2060C4D0Ev();
extern void _ZN7S2060C42v2Ev();
extern void _ZN7S2060C42v3Ev();
extern void _ZN7S2060C42v4Ev();
static  VTBL_ENTRY vtc_S2060C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2060C4[0]),
  (VTBL_ENTRY)&_ZN7S2060C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2060C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2060C4[];
extern  VTBL_ENTRY _ZTV7S2060C4[];
Class_Descriptor cd_S2060C4 = {  "S2060C4", // class name
  0,0,//no base classes
  &(vtc_S2060C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2060C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2060C4),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  S2060C3  : S2060C4 , S7368C49 {
  void *s2060c3f0;
  virtual  ~S2060C3(); // _ZN7S2060C3D1Ev
  S2060C3(); // tgen
};
//SIG(-1 S2060C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2060C3()
{
  extern Class_Descriptor cd_S2060C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2060C3, buf);
    S2060C3 *dp, &lv = *(dp=new (buf) S2060C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2060C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2060C3)");
    check_base_class_offset(lv, (S2060C4*), 0, "S2060C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2060C3");
    check_field_offset(lv, s2060c3f0, ABISELECT(72,48), "S2060C3.s2060c3f0");
    test_class_info(&lv, &cd_S2060C3);
    dp->~S2060C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2060C3(Test_S2060C3, "S2060C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2060C3C1Ev();
extern void _ZN7S2060C3D1Ev();
Name_Map name_map_S2060C3[] = {
  NSPAIR(_ZN7S2060C3C1Ev),
  NSPAIR(_ZN7S2060C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2060C4;
extern VTBL_ENTRY _ZTI7S2060C4[];
extern  VTBL_ENTRY _ZTV7S2060C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2060C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2060C3[];
extern void _ZN7S2060C3D1Ev();
extern void _ZN7S2060C3D0Ev();
extern void _ZN7S2060C42v2Ev();
extern void _ZN7S2060C42v3Ev();
extern void _ZN7S2060C42v4Ev();
extern void ABISELECT(_ZThn40_N7S2060C3D1Ev,_ZThn28_N7S2060C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2060C3D0Ev,_ZThn28_N7S2060C3D0Ev)();
static  VTBL_ENTRY vtc_S2060C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2060C3[0]),
  (VTBL_ENTRY)&_ZN7S2060C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2060C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2060C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2060C3D1Ev,_ZThn28_N7S2060C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2060C3D0Ev,_ZThn28_N7S2060C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2060C3[];
extern  VTBL_ENTRY _ZTV7S2060C3[];
Class_Descriptor cd_S2060C3 = {  "S2060C3", // class name
  bases_S2060C3, 2,
  &(vtc_S2060C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2060C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2060C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2060C2  : S2060C3 {
  void *s2060c2f0;
  int s2060c2f1;
  virtual  ~S2060C2(); // _ZN7S2060C2D1Ev
  virtual void  v5(); // _ZN7S2060C22v5Ev
  S2060C2(); // tgen
};
//SIG(-1 S2060C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2060C2()
{
  extern Class_Descriptor cd_S2060C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2060C2, buf);
    S2060C2 *dp, &lv = *(dp=new (buf) S2060C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2060C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2060C2)");
    check_base_class_offset(lv, (S2060C4*)(S2060C3*), 0, "S2060C2");
    check_base_class_offset(lv, (S7368C49*)(S2060C3*), ABISELECT(40,28), "S2060C2");
    check_base_class_offset(lv, (S2060C3*), 0, "S2060C2");
    check_field_offset(lv, s2060c2f0, ABISELECT(80,52), "S2060C2.s2060c2f0");
    check_field_offset(lv, s2060c2f1, ABISELECT(88,56), "S2060C2.s2060c2f1");
    test_class_info(&lv, &cd_S2060C2);
    dp->~S2060C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2060C2(Test_S2060C2, "S2060C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2060C2C1Ev();
extern void _ZN7S2060C2D1Ev();
Name_Map name_map_S2060C2[] = {
  NSPAIR(_ZN7S2060C2C1Ev),
  NSPAIR(_ZN7S2060C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2060C4;
extern VTBL_ENTRY _ZTI7S2060C4[];
extern  VTBL_ENTRY _ZTV7S2060C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2060C3;
extern VTBL_ENTRY _ZTI7S2060C3[];
extern  VTBL_ENTRY _ZTV7S2060C3[];
static Base_Class bases_S2060C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2060C2[];
extern void _ZN7S2060C2D1Ev();
extern void _ZN7S2060C2D0Ev();
extern void _ZN7S2060C42v2Ev();
extern void _ZN7S2060C42v3Ev();
extern void _ZN7S2060C42v4Ev();
extern void _ZN7S2060C22v5Ev();
extern void ABISELECT(_ZThn40_N7S2060C2D1Ev,_ZThn28_N7S2060C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2060C2D0Ev,_ZThn28_N7S2060C2D0Ev)();
static  VTBL_ENTRY vtc_S2060C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2060C2[0]),
  (VTBL_ENTRY)&_ZN7S2060C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2060C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2060C22v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2060C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2060C2D1Ev,_ZThn28_N7S2060C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2060C2D0Ev,_ZThn28_N7S2060C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2060C2[];
extern  VTBL_ENTRY _ZTV7S2060C2[];
Class_Descriptor cd_S2060C2 = {  "S2060C2", // class name
  bases_S2060C2, 3,
  &(vtc_S2060C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2060C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2060C2),12, //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  S2060C10_nt  {
  void *s2060c10f0[2];
  void  mf2060c10(); // _ZN11S2060C10_nt9mf2060c10Ev
  virtual  ~S2060C10_nt(); // _ZN11S2060C10_ntD1Ev
  S2060C10_nt(); // tgen
};
//SIG(-1 S2060C10_nt) C1{ vd m Fp[2]}


void  S2060C10_nt ::mf2060c10(){}
 S2060C10_nt ::~S2060C10_nt(){ note_dtor("S2060C10_nt", this);}
S2060C10_nt ::S2060C10_nt(){ note_ctor("S2060C10_nt", this);} // tgen

//skip512 S2060C10_nt

#else // __cplusplus

extern void _ZN11S2060C10_ntC1Ev();
extern void _ZN11S2060C10_ntD1Ev();
Name_Map name_map_S2060C10_nt[] = {
  NSPAIR(_ZN11S2060C10_ntC1Ev),
  NSPAIR(_ZN11S2060C10_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2060C10_nt[];
extern void _ZN11S2060C10_ntD1Ev();
extern void _ZN11S2060C10_ntD0Ev();
static  VTBL_ENTRY vtc_S2060C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2060C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S2060C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2060C10_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S2060C10_nt[];
VTBL_ENTRY *P__ZTI11S2060C10_nt = _ZTI11S2060C10_nt; 
extern  VTBL_ENTRY _ZTV11S2060C10_nt[];
Class_Descriptor cd_S2060C10_nt = {  "S2060C10_nt", // class name
  0,0,//no base classes
  &(vtc_S2060C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S2060C10_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2060C10_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  S2060C1  : S2060C2 , S2060C10_nt {
  ::S7368C34 s2060c1f0;
  virtual  ~S2060C1(); // _ZN7S2060C1D1Ev
  virtual void  v1(); // _ZN7S2060C12v1Ev
  S2060C1(); // tgen
};
//SIG(1 S2060C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v5 Fp Fi} BC10{ vd m Fp[2]} vd v1 FC11{ BC12{ vd m Fc} vd FC13{ BC12 vd FL} Fi FC14{ vd m FC5 FC15{ BC12 vd FL[2]}} FC14 Fi FC5 FC5 Fi FC14 FC14}}


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

static void Test_S2060C1()
{
  extern Class_Descriptor cd_S2060C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,74)];
    init_test(&cd_S2060C1, buf);
    S2060C1 *dp, &lv = *(dp=new (buf) S2060C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,292), "sizeof(S2060C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2060C1)");
    check_base_class_offset(lv, (S2060C4*)(S2060C3*)(S2060C2*), 0, "S2060C1");
    check_base_class_offset(lv, (S7368C49*)(S2060C3*)(S2060C2*), ABISELECT(40,28), "S2060C1");
    check_base_class_offset(lv, (S2060C3*)(S2060C2*), 0, "S2060C1");
    check_base_class_offset(lv, (S2060C2*), 0, "S2060C1");
    check_base_class_offset(lv, (S2060C10_nt*), ABISELECT(96,60), "S2060C1");
    check_field_offset(lv, s2060c1f0, ABISELECT(120,72), "S2060C1.s2060c1f0");
    test_class_info(&lv, &cd_S2060C1);
    dp->~S2060C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2060C1(Test_S2060C1, "S2060C1", ABISELECT(440,292));

#else // __cplusplus

extern void _ZN7S2060C1C1Ev();
extern void _ZN7S2060C1D1Ev();
Name_Map name_map_S2060C1[] = {
  NSPAIR(_ZN7S2060C1C1Ev),
  NSPAIR(_ZN7S2060C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2060C4;
extern VTBL_ENTRY _ZTI7S2060C4[];
extern  VTBL_ENTRY _ZTV7S2060C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2060C3;
extern VTBL_ENTRY _ZTI7S2060C3[];
extern  VTBL_ENTRY _ZTV7S2060C3[];
extern Class_Descriptor cd_S2060C2;
extern VTBL_ENTRY _ZTI7S2060C2[];
extern  VTBL_ENTRY _ZTV7S2060C2[];
extern Class_Descriptor cd_S2060C10_nt;
extern VTBL_ENTRY _ZTI11S2060C10_nt[];
extern  VTBL_ENTRY _ZTV11S2060C10_nt[];
static Base_Class bases_S2060C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2060C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2060C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2060C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2060C10_nt,    ABISELECT(96,60), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2060C1[];
extern void _ZN7S2060C1D1Ev();
extern void _ZN7S2060C1D0Ev();
extern void _ZN7S2060C42v2Ev();
extern void _ZN7S2060C42v3Ev();
extern void _ZN7S2060C42v4Ev();
extern void _ZN7S2060C22v5Ev();
extern void _ZN7S2060C12v1Ev();
extern void ABISELECT(_ZThn40_N7S2060C1D1Ev,_ZThn28_N7S2060C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2060C1D0Ev,_ZThn28_N7S2060C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S2060C1D1Ev,_ZThn60_N7S2060C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S2060C1D0Ev,_ZThn60_N7S2060C1D0Ev)();
static  VTBL_ENTRY vtc_S2060C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2060C1[0]),
  (VTBL_ENTRY)&_ZN7S2060C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2060C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2060C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2060C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2060C12v1Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2060C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2060C1D1Ev,_ZThn28_N7S2060C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2060C1D0Ev,_ZThn28_N7S2060C1D0Ev),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S2060C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2060C1D1Ev,_ZThn60_N7S2060C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2060C1D0Ev,_ZThn60_N7S2060C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2060C1[];
extern  VTBL_ENTRY _ZTV7S2060C1[];
Class_Descriptor cd_S2060C1 = {  "S2060C1", // class name
  bases_S2060C1, 5,
  &(vtc_S2060C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(440,292), // object size
  NSPAIRA(_ZTI7S2060C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2060C1),17, //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  S5402C3  {
  void *s5402c3f0[4];
  ::S1686C5_nt s5402c3f1;
  void *s5402c3f2;
  ::S5432C7 s5402c3f3;
  virtual  ~S5402C3(); // _ZN7S5402C3D1Ev
  virtual void  v8(); // _ZN7S5402C32v8Ev
  virtual void  v9(); // _ZN7S5402C32v9Ev
  virtual void  v10(); // _ZN7S5402C33v10Ev
  virtual void  v11(); // _ZN7S5402C33v11Ev
  virtual void  v12(); // _ZN7S5402C33v12Ev
  virtual void  v13(); // _ZN7S5402C33v13Ev
  virtual void  v14(); // _ZN7S5402C33v14Ev
  S5402C3(); // tgen
};
//SIG(-1 S5402C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[4] FC2{ m FC3{ m Fp Fi[2] FC4{ m}} Fp[2]} Fp FC5{ Fp FC6{ m Fp Fi FC7{ m}}}}


 S5402C3 ::~S5402C3(){ note_dtor("S5402C3", this);}
void  S5402C3 ::v8(){vfunc_called(this, "_ZN7S5402C32v8Ev");}
void  S5402C3 ::v9(){vfunc_called(this, "_ZN7S5402C32v9Ev");}
void  S5402C3 ::v10(){vfunc_called(this, "_ZN7S5402C33v10Ev");}
void  S5402C3 ::v11(){vfunc_called(this, "_ZN7S5402C33v11Ev");}
void  S5402C3 ::v12(){vfunc_called(this, "_ZN7S5402C33v12Ev");}
void  S5402C3 ::v13(){vfunc_called(this, "_ZN7S5402C33v13Ev");}
void  S5402C3 ::v14(){vfunc_called(this, "_ZN7S5402C33v14Ev");}
S5402C3 ::S5402C3(){ note_ctor("S5402C3", this);} // tgen

static void Test_S5402C3()
{
  extern Class_Descriptor cd_S5402C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S5402C3, buf);
    S5402C3 *dp, &lv = *(dp=new (buf) S5402C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S5402C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5402C3)");
    check_field_offset(lv, s5402c3f0, ABISELECT(8,4), "S5402C3.s5402c3f0");
    check_field_offset(lv, s5402c3f1, ABISELECT(40,20), "S5402C3.s5402c3f1");
    check_field_offset(lv, s5402c3f2, ABISELECT(80,44), "S5402C3.s5402c3f2");
    check_field_offset(lv, s5402c3f3, ABISELECT(88,48), "S5402C3.s5402c3f3");
    test_class_info(&lv, &cd_S5402C3);
    dp->~S5402C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5402C3(Test_S5402C3, "S5402C3", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S5402C3C1Ev();
extern void _ZN7S5402C3D1Ev();
Name_Map name_map_S5402C3[] = {
  NSPAIR(_ZN7S5402C3C1Ev),
  NSPAIR(_ZN7S5402C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5402C3[];
extern void _ZN7S5402C3D1Ev();
extern void _ZN7S5402C3D0Ev();
extern void _ZN7S5402C32v8Ev();
extern void _ZN7S5402C32v9Ev();
extern void _ZN7S5402C33v10Ev();
extern void _ZN7S5402C33v11Ev();
extern void _ZN7S5402C33v12Ev();
extern void _ZN7S5402C33v13Ev();
extern void _ZN7S5402C33v14Ev();
static  VTBL_ENTRY vtc_S5402C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5402C3[0]),
  (VTBL_ENTRY)&_ZN7S5402C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5402C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5402C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5402C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S5402C3[];
extern  VTBL_ENTRY _ZTV7S5402C3[];
Class_Descriptor cd_S5402C3 = {  "S5402C3", // class name
  0,0,//no base classes
  &(vtc_S5402C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S5402C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5402C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5402C10  {
  virtual  ~S5402C10(); // _ZN8S5402C10D1Ev
  virtual void  v15(); // _ZN8S5402C103v15Ev
  virtual void  v16(); // _ZN8S5402C103v16Ev
  virtual void  v17(); // _ZN8S5402C103v17Ev
  S5402C10(); // tgen
};
//SIG(-1 S5402C10) C1{ vd v1 v2 v3}


 S5402C10 ::~S5402C10(){ note_dtor("S5402C10", this);}
void  S5402C10 ::v15(){vfunc_called(this, "_ZN8S5402C103v15Ev");}
void  S5402C10 ::v16(){vfunc_called(this, "_ZN8S5402C103v16Ev");}
void  S5402C10 ::v17(){vfunc_called(this, "_ZN8S5402C103v17Ev");}
S5402C10 ::S5402C10(){ note_ctor("S5402C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S5402C10C1Ev();
extern void _ZN8S5402C10D1Ev();
Name_Map name_map_S5402C10[] = {
  NSPAIR(_ZN8S5402C10C1Ev),
  NSPAIR(_ZN8S5402C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5402C10[];
extern void _ZN8S5402C10D1Ev();
extern void _ZN8S5402C10D0Ev();
extern void _ZN8S5402C103v15Ev();
extern void _ZN8S5402C103v16Ev();
extern void _ZN8S5402C103v17Ev();
static  VTBL_ENTRY vtc_S5402C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5402C10[0]),
  (VTBL_ENTRY)&_ZN8S5402C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5402C10D0Ev,
  (VTBL_ENTRY)&_ZN8S5402C103v15Ev,
  (VTBL_ENTRY)&_ZN8S5402C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5402C103v17Ev,
};
extern VTBL_ENTRY _ZTI8S5402C10[];
extern  VTBL_ENTRY _ZTV8S5402C10[];
Class_Descriptor cd_S5402C10 = {  "S5402C10", // class name
  0,0,//no base classes
  &(vtc_S5402C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5402C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5402C10),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  S5402C2  : S5402C3 , S5402C10 {
  char s5402c2f0;
  ::S5432C11_nt s5402c2f1;
  int s5402c2f2;
  virtual  ~S5402C2(); // _ZN7S5402C2D1Ev
  virtual void  v18(); // _ZN7S5402C23v18Ev
  virtual void  v19(); // _ZN7S5402C23v19Ev
  virtual void  v20(); // _ZN7S5402C23v20Ev
  virtual void  v21(); // _ZN7S5402C23v21Ev
  virtual void  v22(); // _ZN7S5402C23v22Ev
  virtual void  v23(); // _ZN7S5402C23v23Ev
  virtual void  v24(); // _ZN7S5402C23v24Ev
  virtual void  v25(); // _ZN7S5402C23v25Ev
  virtual void  v26(); // _ZN7S5402C23v26Ev
  virtual void  v27(); // _ZN7S5402C23v27Ev
  S5402C2(); // tgen
};
//SIG(-1 S5402C2) C1{ BC2{ vd v11 v12 v13 v14 v15 v16 v17 Fp[4] FC3{ m FC4{ m Fp Fi[2] FC5{ m}} Fp[2]} Fp FC6{ Fp FC7{ m Fp Fi FC8{ m}}}} BC9{ vd v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc FC10{ m FC11{ m Fp} Fi Fp} Fi}


 S5402C2 ::~S5402C2(){ note_dtor("S5402C2", this);}
void  S5402C2 ::v18(){vfunc_called(this, "_ZN7S5402C23v18Ev");}
void  S5402C2 ::v19(){vfunc_called(this, "_ZN7S5402C23v19Ev");}
void  S5402C2 ::v20(){vfunc_called(this, "_ZN7S5402C23v20Ev");}
void  S5402C2 ::v21(){vfunc_called(this, "_ZN7S5402C23v21Ev");}
void  S5402C2 ::v22(){vfunc_called(this, "_ZN7S5402C23v22Ev");}
void  S5402C2 ::v23(){vfunc_called(this, "_ZN7S5402C23v23Ev");}
void  S5402C2 ::v24(){vfunc_called(this, "_ZN7S5402C23v24Ev");}
void  S5402C2 ::v25(){vfunc_called(this, "_ZN7S5402C23v25Ev");}
void  S5402C2 ::v26(){vfunc_called(this, "_ZN7S5402C23v26Ev");}
void  S5402C2 ::v27(){vfunc_called(this, "_ZN7S5402C23v27Ev");}
S5402C2 ::S5402C2(){ note_ctor("S5402C2", this);} // tgen

static void Test_S5402C2()
{
  extern Class_Descriptor cd_S5402C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,23)];
    init_test(&cd_S5402C2, buf);
    S5402C2 *dp, &lv = *(dp=new (buf) S5402C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S5402C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5402C2)");
    check_base_class_offset(lv, (S5402C3*), 0, "S5402C2");
    check_base_class_offset(lv, (S5402C10*), ABISELECT(112,64), "S5402C2");
    check_field_offset(lv, s5402c2f0, ABISELECT(120,68), "S5402C2.s5402c2f0");
    check_field_offset(lv, s5402c2f1, ABISELECT(128,72), "S5402C2.s5402c2f1");
    check_field_offset(lv, s5402c2f2, ABISELECT(152,84), "S5402C2.s5402c2f2");
    test_class_info(&lv, &cd_S5402C2);
    dp->~S5402C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5402C2(Test_S5402C2, "S5402C2", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN7S5402C2C1Ev();
extern void _ZN7S5402C2D1Ev();
Name_Map name_map_S5402C2[] = {
  NSPAIR(_ZN7S5402C2C1Ev),
  NSPAIR(_ZN7S5402C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5402C3;
extern VTBL_ENTRY _ZTI7S5402C3[];
extern  VTBL_ENTRY _ZTV7S5402C3[];
extern Class_Descriptor cd_S5402C10;
extern VTBL_ENTRY _ZTI8S5402C10[];
extern  VTBL_ENTRY _ZTV8S5402C10[];
static Base_Class bases_S5402C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5402C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5402C10,    ABISELECT(112,64), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5402C2[];
extern void _ZN7S5402C2D1Ev();
extern void _ZN7S5402C2D0Ev();
extern void _ZN7S5402C32v8Ev();
extern void _ZN7S5402C32v9Ev();
extern void _ZN7S5402C33v10Ev();
extern void _ZN7S5402C33v11Ev();
extern void _ZN7S5402C33v12Ev();
extern void _ZN7S5402C33v13Ev();
extern void _ZN7S5402C33v14Ev();
extern void _ZN7S5402C23v18Ev();
extern void _ZN7S5402C23v19Ev();
extern void _ZN7S5402C23v20Ev();
extern void _ZN7S5402C23v21Ev();
extern void _ZN7S5402C23v22Ev();
extern void _ZN7S5402C23v23Ev();
extern void _ZN7S5402C23v24Ev();
extern void _ZN7S5402C23v25Ev();
extern void _ZN7S5402C23v26Ev();
extern void _ZN7S5402C23v27Ev();
extern void ABISELECT(_ZThn112_N7S5402C2D1Ev,_ZThn64_N7S5402C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S5402C2D0Ev,_ZThn64_N7S5402C2D0Ev)();
extern void _ZN8S5402C103v15Ev();
extern void _ZN8S5402C103v16Ev();
extern void _ZN8S5402C103v17Ev();
static  VTBL_ENTRY vtc_S5402C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5402C2[0]),
  (VTBL_ENTRY)&_ZN7S5402C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5402C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5402C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5402C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v27Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S5402C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5402C2D1Ev,_ZThn64_N7S5402C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5402C2D0Ev,_ZThn64_N7S5402C2D0Ev),
  (VTBL_ENTRY)&_ZN8S5402C103v15Ev,
  (VTBL_ENTRY)&_ZN8S5402C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5402C103v17Ev,
};
extern VTBL_ENTRY _ZTI7S5402C2[];
extern  VTBL_ENTRY _ZTV7S5402C2[];
Class_Descriptor cd_S5402C2 = {  "S5402C2", // class name
  bases_S5402C2, 2,
  &(vtc_S5402C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI7S5402C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5402C2),28, //virtual function table var
  2, // 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  S5402C1  : S5402C2 {
  virtual  ~S5402C1(); // _ZN7S5402C1D1Ev
  virtual void  v1(); // _ZN7S5402C12v1Ev
  virtual void  v2(); // _ZN7S5402C12v2Ev
  virtual void  v3(); // _ZN7S5402C12v3Ev
  virtual void  v4(); // _ZN7S5402C12v4Ev
  virtual void  v5(); // _ZN7S5402C12v5Ev
  virtual void  v6(); // _ZN7S5402C12v6Ev
  virtual void  v7(); // _ZN7S5402C12v7Ev
  S5402C1(); // tgen
};
//SIG(1 S5402C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 Fp[4] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]} Fp FC7{ Fp FC8{ m Fp Fi FC9{ m}}}} BC10{ vd v15 v16 v17} vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fc FC11{ m FC12{ m Fp} Fi Fp} Fi} vd v1 v2 v3 v4 v5 v6 v7}


 S5402C1 ::~S5402C1(){ note_dtor("S5402C1", this);}
void  S5402C1 ::v1(){vfunc_called(this, "_ZN7S5402C12v1Ev");}
void  S5402C1 ::v2(){vfunc_called(this, "_ZN7S5402C12v2Ev");}
void  S5402C1 ::v3(){vfunc_called(this, "_ZN7S5402C12v3Ev");}
void  S5402C1 ::v4(){vfunc_called(this, "_ZN7S5402C12v4Ev");}
void  S5402C1 ::v5(){vfunc_called(this, "_ZN7S5402C12v5Ev");}
void  S5402C1 ::v6(){vfunc_called(this, "_ZN7S5402C12v6Ev");}
void  S5402C1 ::v7(){vfunc_called(this, "_ZN7S5402C12v7Ev");}
S5402C1 ::S5402C1(){ note_ctor("S5402C1", this);} // tgen

static void Test_S5402C1()
{
  extern Class_Descriptor cd_S5402C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,23)];
    init_test(&cd_S5402C1, buf);
    S5402C1 *dp, &lv = *(dp=new (buf) S5402C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S5402C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5402C1)");
    check_base_class_offset(lv, (S5402C3*)(S5402C2*), 0, "S5402C1");
    check_base_class_offset(lv, (S5402C10*)(S5402C2*), ABISELECT(112,64), "S5402C1");
    check_base_class_offset(lv, (S5402C2*), 0, "S5402C1");
    test_class_info(&lv, &cd_S5402C1);
    dp->~S5402C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5402C1(Test_S5402C1, "S5402C1", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN7S5402C1C1Ev();
extern void _ZN7S5402C1D1Ev();
Name_Map name_map_S5402C1[] = {
  NSPAIR(_ZN7S5402C1C1Ev),
  NSPAIR(_ZN7S5402C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5402C3;
extern VTBL_ENTRY _ZTI7S5402C3[];
extern  VTBL_ENTRY _ZTV7S5402C3[];
extern Class_Descriptor cd_S5402C10;
extern VTBL_ENTRY _ZTI8S5402C10[];
extern  VTBL_ENTRY _ZTV8S5402C10[];
extern Class_Descriptor cd_S5402C2;
extern VTBL_ENTRY _ZTI7S5402C2[];
extern  VTBL_ENTRY _ZTV7S5402C2[];
static Base_Class bases_S5402C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5402C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5402C10,    ABISELECT(112,64), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5402C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5402C1[];
extern void _ZN7S5402C1D1Ev();
extern void _ZN7S5402C1D0Ev();
extern void _ZN7S5402C32v8Ev();
extern void _ZN7S5402C32v9Ev();
extern void _ZN7S5402C33v10Ev();
extern void _ZN7S5402C33v11Ev();
extern void _ZN7S5402C33v12Ev();
extern void _ZN7S5402C33v13Ev();
extern void _ZN7S5402C33v14Ev();
extern void _ZN7S5402C23v18Ev();
extern void _ZN7S5402C23v19Ev();
extern void _ZN7S5402C23v20Ev();
extern void _ZN7S5402C23v21Ev();
extern void _ZN7S5402C23v22Ev();
extern void _ZN7S5402C23v23Ev();
extern void _ZN7S5402C23v24Ev();
extern void _ZN7S5402C23v25Ev();
extern void _ZN7S5402C23v26Ev();
extern void _ZN7S5402C23v27Ev();
extern void _ZN7S5402C12v1Ev();
extern void _ZN7S5402C12v2Ev();
extern void _ZN7S5402C12v3Ev();
extern void _ZN7S5402C12v4Ev();
extern void _ZN7S5402C12v5Ev();
extern void _ZN7S5402C12v6Ev();
extern void _ZN7S5402C12v7Ev();
extern void ABISELECT(_ZThn112_N7S5402C1D1Ev,_ZThn64_N7S5402C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S5402C1D0Ev,_ZThn64_N7S5402C1D0Ev)();
extern void _ZN8S5402C103v15Ev();
extern void _ZN8S5402C103v16Ev();
extern void _ZN8S5402C103v17Ev();
static  VTBL_ENTRY vtc_S5402C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5402C1[0]),
  (VTBL_ENTRY)&_ZN7S5402C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5402C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5402C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5402C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5402C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5402C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5402C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5402C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5402C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5402C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5402C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5402C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5402C12v7Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S5402C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5402C1D1Ev,_ZThn64_N7S5402C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5402C1D0Ev,_ZThn64_N7S5402C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5402C103v15Ev,
  (VTBL_ENTRY)&_ZN8S5402C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5402C103v17Ev,
};
extern VTBL_ENTRY _ZTI7S5402C1[];
extern  VTBL_ENTRY _ZTV7S5402C1[];
Class_Descriptor cd_S5402C1 = {  "S5402C1", // class name
  bases_S5402C1, 3,
  &(vtc_S5402C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI7S5402C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5402C1),35, //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  S2157C4  {
  ::S7368C9_nt s2157c4f0;
  int s2157c4f1[2];
  char s2157c4f2;
  virtual  ~S2157C4(); // _ZN7S2157C4D1Ev
  virtual void  v3(); // _ZN7S2157C42v3Ev
  virtual void  v4(); // _ZN7S2157C42v4Ev
  virtual void  v5(); // _ZN7S2157C42v5Ev
  S2157C4(); // tgen
};
//SIG(-1 S2157C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2157C4 ::~S2157C4(){ note_dtor("S2157C4", this);}
void  S2157C4 ::v3(){vfunc_called(this, "_ZN7S2157C42v3Ev");}
void  S2157C4 ::v4(){vfunc_called(this, "_ZN7S2157C42v4Ev");}
void  S2157C4 ::v5(){vfunc_called(this, "_ZN7S2157C42v5Ev");}
S2157C4 ::S2157C4(){ note_ctor("S2157C4", this);} // tgen

static void Test_S2157C4()
{
  extern Class_Descriptor cd_S2157C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2157C4, buf);
    S2157C4 *dp, &lv = *(dp=new (buf) S2157C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2157C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2157C4)");
    check_field_offset(lv, s2157c4f0, ABISELECT(8,4), "S2157C4.s2157c4f0");
    check_field_offset(lv, s2157c4f1, ABISELECT(24,16), "S2157C4.s2157c4f1");
    check_field_offset(lv, s2157c4f2, ABISELECT(32,24), "S2157C4.s2157c4f2");
    test_class_info(&lv, &cd_S2157C4);
    dp->~S2157C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2157C4(Test_S2157C4, "S2157C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2157C4C1Ev();
extern void _ZN7S2157C4D1Ev();
Name_Map name_map_S2157C4[] = {
  NSPAIR(_ZN7S2157C4C1Ev),
  NSPAIR(_ZN7S2157C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2157C4[];
extern void _ZN7S2157C4D1Ev();
extern void _ZN7S2157C4D0Ev();
extern void _ZN7S2157C42v3Ev();
extern void _ZN7S2157C42v4Ev();
extern void _ZN7S2157C42v5Ev();
static  VTBL_ENTRY vtc_S2157C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2157C4[0]),
  (VTBL_ENTRY)&_ZN7S2157C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2157C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2157C4[];
extern  VTBL_ENTRY _ZTV7S2157C4[];
Class_Descriptor cd_S2157C4 = {  "S2157C4", // class name
  0,0,//no base classes
  &(vtc_S2157C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2157C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2157C4),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  S2157C3  : S2157C4 , S7368C49 {
  void *s2157c3f0;
  virtual  ~S2157C3(); // _ZN7S2157C3D1Ev
  S2157C3(); // tgen
};
//SIG(-1 S2157C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2157C3()
{
  extern Class_Descriptor cd_S2157C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2157C3, buf);
    S2157C3 *dp, &lv = *(dp=new (buf) S2157C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2157C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2157C3)");
    check_base_class_offset(lv, (S2157C4*), 0, "S2157C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2157C3");
    check_field_offset(lv, s2157c3f0, ABISELECT(72,48), "S2157C3.s2157c3f0");
    test_class_info(&lv, &cd_S2157C3);
    dp->~S2157C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2157C3(Test_S2157C3, "S2157C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2157C3C1Ev();
extern void _ZN7S2157C3D1Ev();
Name_Map name_map_S2157C3[] = {
  NSPAIR(_ZN7S2157C3C1Ev),
  NSPAIR(_ZN7S2157C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2157C4;
extern VTBL_ENTRY _ZTI7S2157C4[];
extern  VTBL_ENTRY _ZTV7S2157C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2157C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2157C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2157C3[];
extern void _ZN7S2157C3D1Ev();
extern void _ZN7S2157C3D0Ev();
extern void _ZN7S2157C42v3Ev();
extern void _ZN7S2157C42v4Ev();
extern void _ZN7S2157C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2157C3D1Ev,_ZThn28_N7S2157C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2157C3D0Ev,_ZThn28_N7S2157C3D0Ev)();
static  VTBL_ENTRY vtc_S2157C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2157C3[0]),
  (VTBL_ENTRY)&_ZN7S2157C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2157C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2157C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2157C3D1Ev,_ZThn28_N7S2157C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2157C3D0Ev,_ZThn28_N7S2157C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2157C3[];
extern  VTBL_ENTRY _ZTV7S2157C3[];
Class_Descriptor cd_S2157C3 = {  "S2157C3", // class name
  bases_S2157C3, 2,
  &(vtc_S2157C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2157C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2157C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2157C2  : S2157C3 {
  void *s2157c2f0;
  int s2157c2f1;
  virtual  ~S2157C2(); // _ZN7S2157C2D1Ev
  virtual void  v6(); // _ZN7S2157C22v6Ev
  S2157C2(); // tgen
};
//SIG(-1 S2157C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2157C2()
{
  extern Class_Descriptor cd_S2157C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2157C2, buf);
    S2157C2 *dp, &lv = *(dp=new (buf) S2157C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2157C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2157C2)");
    check_base_class_offset(lv, (S2157C4*)(S2157C3*), 0, "S2157C2");
    check_base_class_offset(lv, (S7368C49*)(S2157C3*), ABISELECT(40,28), "S2157C2");
    check_base_class_offset(lv, (S2157C3*), 0, "S2157C2");
    check_field_offset(lv, s2157c2f0, ABISELECT(80,52), "S2157C2.s2157c2f0");
    check_field_offset(lv, s2157c2f1, ABISELECT(88,56), "S2157C2.s2157c2f1");
    test_class_info(&lv, &cd_S2157C2);
    dp->~S2157C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2157C2(Test_S2157C2, "S2157C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2157C2C1Ev();
extern void _ZN7S2157C2D1Ev();
Name_Map name_map_S2157C2[] = {
  NSPAIR(_ZN7S2157C2C1Ev),
  NSPAIR(_ZN7S2157C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2157C4;
extern VTBL_ENTRY _ZTI7S2157C4[];
extern  VTBL_ENTRY _ZTV7S2157C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2157C3;
extern VTBL_ENTRY _ZTI7S2157C3[];
extern  VTBL_ENTRY _ZTV7S2157C3[];
static Base_Class bases_S2157C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2157C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2157C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2157C2[];
extern void _ZN7S2157C2D1Ev();
extern void _ZN7S2157C2D0Ev();
extern void _ZN7S2157C42v3Ev();
extern void _ZN7S2157C42v4Ev();
extern void _ZN7S2157C42v5Ev();
extern void _ZN7S2157C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2157C2D1Ev,_ZThn28_N7S2157C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2157C2D0Ev,_ZThn28_N7S2157C2D0Ev)();
static  VTBL_ENTRY vtc_S2157C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2157C2[0]),
  (VTBL_ENTRY)&_ZN7S2157C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2157C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2157C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2157C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2157C2D1Ev,_ZThn28_N7S2157C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2157C2D0Ev,_ZThn28_N7S2157C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2157C2[];
extern  VTBL_ENTRY _ZTV7S2157C2[];
Class_Descriptor cd_S2157C2 = {  "S2157C2", // class name
  bases_S2157C2, 3,
  &(vtc_S2157C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2157C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2157C2),12, //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  S2157C1  : S2157C2 {
  ::S7368C33 s2157c1f0;
  ::S7368C34 s2157c1f1;
  void *s2157c1f2;
  virtual  ~S2157C1(); // _ZN7S2157C1D1Ev
  virtual void  v1(); // _ZN7S2157C12v1Ev
  virtual void  v2(); // _ZN7S2157C12v2Ev
  S2157C1(); // tgen
};
//SIG(1 S2157C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fp Fi} vd v1 v2 FC10{ BC11{ vd m Fc} vd FL} FC12{ BC11 vd FC10 Fi FC13{ vd m FC5 FC14{ BC11 vd FL[2]}} FC13 Fi FC5 FC5 Fi FC13 FC13} Fp}


 S2157C1 ::~S2157C1(){ note_dtor("S2157C1", this);}
void  S2157C1 ::v1(){vfunc_called(this, "_ZN7S2157C12v1Ev");}
void  S2157C1 ::v2(){vfunc_called(this, "_ZN7S2157C12v2Ev");}
S2157C1 ::S2157C1(){ note_ctor("S2157C1", this);} // tgen

static void Test_S2157C1()
{
  extern Class_Descriptor cd_S2157C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,76)];
    init_test(&cd_S2157C1, buf);
    S2157C1 *dp, &lv = *(dp=new (buf) S2157C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,300), "sizeof(S2157C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2157C1)");
    check_base_class_offset(lv, (S2157C4*)(S2157C3*)(S2157C2*), 0, "S2157C1");
    check_base_class_offset(lv, (S7368C49*)(S2157C3*)(S2157C2*), ABISELECT(40,28), "S2157C1");
    check_base_class_offset(lv, (S2157C3*)(S2157C2*), 0, "S2157C1");
    check_base_class_offset(lv, (S2157C2*), 0, "S2157C1");
    check_field_offset(lv, s2157c1f0, ABISELECT(96,60), "S2157C1.s2157c1f0");
    check_field_offset(lv, s2157c1f1, ABISELECT(120,76), "S2157C1.s2157c1f1");
    check_field_offset(lv, s2157c1f2, ABISELECT(440,296), "S2157C1.s2157c1f2");
    test_class_info(&lv, &cd_S2157C1);
    dp->~S2157C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2157C1(Test_S2157C1, "S2157C1", ABISELECT(448,300));

#else // __cplusplus

extern void _ZN7S2157C1C1Ev();
extern void _ZN7S2157C1D1Ev();
Name_Map name_map_S2157C1[] = {
  NSPAIR(_ZN7S2157C1C1Ev),
  NSPAIR(_ZN7S2157C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2157C4;
extern VTBL_ENTRY _ZTI7S2157C4[];
extern  VTBL_ENTRY _ZTV7S2157C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2157C3;
extern VTBL_ENTRY _ZTI7S2157C3[];
extern  VTBL_ENTRY _ZTV7S2157C3[];
extern Class_Descriptor cd_S2157C2;
extern VTBL_ENTRY _ZTI7S2157C2[];
extern  VTBL_ENTRY _ZTV7S2157C2[];
static Base_Class bases_S2157C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2157C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2157C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2157C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2157C1[];
extern void _ZN7S2157C1D1Ev();
extern void _ZN7S2157C1D0Ev();
extern void _ZN7S2157C42v3Ev();
extern void _ZN7S2157C42v4Ev();
extern void _ZN7S2157C42v5Ev();
extern void _ZN7S2157C22v6Ev();
extern void _ZN7S2157C12v1Ev();
extern void _ZN7S2157C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2157C1D1Ev,_ZThn28_N7S2157C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2157C1D0Ev,_ZThn28_N7S2157C1D0Ev)();
static  VTBL_ENTRY vtc_S2157C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2157C1[0]),
  (VTBL_ENTRY)&_ZN7S2157C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2157C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2157C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2157C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2157C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2157C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2157C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2157C1D1Ev,_ZThn28_N7S2157C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2157C1D0Ev,_ZThn28_N7S2157C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2157C1[];
extern  VTBL_ENTRY _ZTV7S2157C1[];
Class_Descriptor cd_S2157C1 = {  "S2157C1", // class name
  bases_S2157C1, 4,
  &(vtc_S2157C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,300), // object size
  NSPAIRA(_ZTI7S2157C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2157C1),14, //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  S5403C3  {
  void *s5403c3f0[4];
  ::S1686C5_nt s5403c3f1;
  void *s5403c3f2;
  ::S5432C7 s5403c3f3;
  virtual  ~S5403C3(); // _ZN7S5403C3D1Ev
  virtual void  v8(); // _ZN7S5403C32v8Ev
  virtual void  v9(); // _ZN7S5403C32v9Ev
  virtual void  v10(); // _ZN7S5403C33v10Ev
  virtual void  v11(); // _ZN7S5403C33v11Ev
  virtual void  v12(); // _ZN7S5403C33v12Ev
  virtual void  v13(); // _ZN7S5403C33v13Ev
  virtual void  v14(); // _ZN7S5403C33v14Ev
  S5403C3(); // tgen
};
//SIG(-1 S5403C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[4] FC2{ m FC3{ m Fp Fi[2] FC4{ m}} Fp[2]} Fp FC5{ Fp FC6{ m Fp Fi FC7{ m}}}}


 S5403C3 ::~S5403C3(){ note_dtor("S5403C3", this);}
void  S5403C3 ::v8(){vfunc_called(this, "_ZN7S5403C32v8Ev");}
void  S5403C3 ::v9(){vfunc_called(this, "_ZN7S5403C32v9Ev");}
void  S5403C3 ::v10(){vfunc_called(this, "_ZN7S5403C33v10Ev");}
void  S5403C3 ::v11(){vfunc_called(this, "_ZN7S5403C33v11Ev");}
void  S5403C3 ::v12(){vfunc_called(this, "_ZN7S5403C33v12Ev");}
void  S5403C3 ::v13(){vfunc_called(this, "_ZN7S5403C33v13Ev");}
void  S5403C3 ::v14(){vfunc_called(this, "_ZN7S5403C33v14Ev");}
S5403C3 ::S5403C3(){ note_ctor("S5403C3", this);} // tgen

static void Test_S5403C3()
{
  extern Class_Descriptor cd_S5403C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S5403C3, buf);
    S5403C3 *dp, &lv = *(dp=new (buf) S5403C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S5403C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5403C3)");
    check_field_offset(lv, s5403c3f0, ABISELECT(8,4), "S5403C3.s5403c3f0");
    check_field_offset(lv, s5403c3f1, ABISELECT(40,20), "S5403C3.s5403c3f1");
    check_field_offset(lv, s5403c3f2, ABISELECT(80,44), "S5403C3.s5403c3f2");
    check_field_offset(lv, s5403c3f3, ABISELECT(88,48), "S5403C3.s5403c3f3");
    test_class_info(&lv, &cd_S5403C3);
    dp->~S5403C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5403C3(Test_S5403C3, "S5403C3", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S5403C3C1Ev();
extern void _ZN7S5403C3D1Ev();
Name_Map name_map_S5403C3[] = {
  NSPAIR(_ZN7S5403C3C1Ev),
  NSPAIR(_ZN7S5403C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5403C3[];
extern void _ZN7S5403C3D1Ev();
extern void _ZN7S5403C3D0Ev();
extern void _ZN7S5403C32v8Ev();
extern void _ZN7S5403C32v9Ev();
extern void _ZN7S5403C33v10Ev();
extern void _ZN7S5403C33v11Ev();
extern void _ZN7S5403C33v12Ev();
extern void _ZN7S5403C33v13Ev();
extern void _ZN7S5403C33v14Ev();
static  VTBL_ENTRY vtc_S5403C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5403C3[0]),
  (VTBL_ENTRY)&_ZN7S5403C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5403C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5403C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5403C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S5403C3[];
extern  VTBL_ENTRY _ZTV7S5403C3[];
Class_Descriptor cd_S5403C3 = {  "S5403C3", // class name
  0,0,//no base classes
  &(vtc_S5403C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S5403C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5403C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5403C10  {
  virtual  ~S5403C10(); // _ZN8S5403C10D1Ev
  virtual void  v15(); // _ZN8S5403C103v15Ev
  virtual void  v16(); // _ZN8S5403C103v16Ev
  virtual void  v17(); // _ZN8S5403C103v17Ev
  S5403C10(); // tgen
};
//SIG(-1 S5403C10) C1{ vd v1 v2 v3}


 S5403C10 ::~S5403C10(){ note_dtor("S5403C10", this);}
void  S5403C10 ::v15(){vfunc_called(this, "_ZN8S5403C103v15Ev");}
void  S5403C10 ::v16(){vfunc_called(this, "_ZN8S5403C103v16Ev");}
void  S5403C10 ::v17(){vfunc_called(this, "_ZN8S5403C103v17Ev");}
S5403C10 ::S5403C10(){ note_ctor("S5403C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S5403C10C1Ev();
extern void _ZN8S5403C10D1Ev();
Name_Map name_map_S5403C10[] = {
  NSPAIR(_ZN8S5403C10C1Ev),
  NSPAIR(_ZN8S5403C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S5403C10[];
extern void _ZN8S5403C10D1Ev();
extern void _ZN8S5403C10D0Ev();
extern void _ZN8S5403C103v15Ev();
extern void _ZN8S5403C103v16Ev();
extern void _ZN8S5403C103v17Ev();
static  VTBL_ENTRY vtc_S5403C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S5403C10[0]),
  (VTBL_ENTRY)&_ZN8S5403C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5403C10D0Ev,
  (VTBL_ENTRY)&_ZN8S5403C103v15Ev,
  (VTBL_ENTRY)&_ZN8S5403C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5403C103v17Ev,
};
extern VTBL_ENTRY _ZTI8S5403C10[];
extern  VTBL_ENTRY _ZTV8S5403C10[];
Class_Descriptor cd_S5403C10 = {  "S5403C10", // class name
  0,0,//no base classes
  &(vtc_S5403C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S5403C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S5403C10),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  S5403C2  : S5403C3 , S5403C10 {
  ::S5432C11_nt s5403c2f0;
  int s5403c2f1;
  virtual  ~S5403C2(); // _ZN7S5403C2D1Ev
  virtual void  v18(); // _ZN7S5403C23v18Ev
  virtual void  v19(); // _ZN7S5403C23v19Ev
  virtual void  v20(); // _ZN7S5403C23v20Ev
  virtual void  v21(); // _ZN7S5403C23v21Ev
  virtual void  v22(); // _ZN7S5403C23v22Ev
  virtual void  v23(); // _ZN7S5403C23v23Ev
  virtual void  v24(); // _ZN7S5403C23v24Ev
  virtual void  v25(); // _ZN7S5403C23v25Ev
  virtual void  v26(); // _ZN7S5403C23v26Ev
  virtual void  v27(); // _ZN7S5403C23v27Ev
  S5403C2(); // tgen
};
//SIG(-1 S5403C2) C1{ BC2{ vd v11 v12 v13 v14 v15 v16 v17 Fp[4] FC3{ m FC4{ m Fp Fi[2] FC5{ m}} Fp[2]} Fp FC6{ Fp FC7{ m Fp Fi FC8{ m}}}} BC9{ vd v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC10{ m FC11{ m Fp} Fi Fp} Fi}


 S5403C2 ::~S5403C2(){ note_dtor("S5403C2", this);}
void  S5403C2 ::v18(){vfunc_called(this, "_ZN7S5403C23v18Ev");}
void  S5403C2 ::v19(){vfunc_called(this, "_ZN7S5403C23v19Ev");}
void  S5403C2 ::v20(){vfunc_called(this, "_ZN7S5403C23v20Ev");}
void  S5403C2 ::v21(){vfunc_called(this, "_ZN7S5403C23v21Ev");}
void  S5403C2 ::v22(){vfunc_called(this, "_ZN7S5403C23v22Ev");}
void  S5403C2 ::v23(){vfunc_called(this, "_ZN7S5403C23v23Ev");}
void  S5403C2 ::v24(){vfunc_called(this, "_ZN7S5403C23v24Ev");}
void  S5403C2 ::v25(){vfunc_called(this, "_ZN7S5403C23v25Ev");}
void  S5403C2 ::v26(){vfunc_called(this, "_ZN7S5403C23v26Ev");}
void  S5403C2 ::v27(){vfunc_called(this, "_ZN7S5403C23v27Ev");}
S5403C2 ::S5403C2(){ note_ctor("S5403C2", this);} // tgen

static void Test_S5403C2()
{
  extern Class_Descriptor cd_S5403C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S5403C2, buf);
    S5403C2 *dp, &lv = *(dp=new (buf) S5403C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S5403C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5403C2)");
    check_base_class_offset(lv, (S5403C3*), 0, "S5403C2");
    check_base_class_offset(lv, (S5403C10*), ABISELECT(112,64), "S5403C2");
    check_field_offset(lv, s5403c2f0, ABISELECT(120,68), "S5403C2.s5403c2f0");
    check_field_offset(lv, s5403c2f1, ABISELECT(144,80), "S5403C2.s5403c2f1");
    test_class_info(&lv, &cd_S5403C2);
    dp->~S5403C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5403C2(Test_S5403C2, "S5403C2", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN7S5403C2C1Ev();
extern void _ZN7S5403C2D1Ev();
Name_Map name_map_S5403C2[] = {
  NSPAIR(_ZN7S5403C2C1Ev),
  NSPAIR(_ZN7S5403C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5403C3;
extern VTBL_ENTRY _ZTI7S5403C3[];
extern  VTBL_ENTRY _ZTV7S5403C3[];
extern Class_Descriptor cd_S5403C10;
extern VTBL_ENTRY _ZTI8S5403C10[];
extern  VTBL_ENTRY _ZTV8S5403C10[];
static Base_Class bases_S5403C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5403C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5403C10,    ABISELECT(112,64), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5403C2[];
extern void _ZN7S5403C2D1Ev();
extern void _ZN7S5403C2D0Ev();
extern void _ZN7S5403C32v8Ev();
extern void _ZN7S5403C32v9Ev();
extern void _ZN7S5403C33v10Ev();
extern void _ZN7S5403C33v11Ev();
extern void _ZN7S5403C33v12Ev();
extern void _ZN7S5403C33v13Ev();
extern void _ZN7S5403C33v14Ev();
extern void _ZN7S5403C23v18Ev();
extern void _ZN7S5403C23v19Ev();
extern void _ZN7S5403C23v20Ev();
extern void _ZN7S5403C23v21Ev();
extern void _ZN7S5403C23v22Ev();
extern void _ZN7S5403C23v23Ev();
extern void _ZN7S5403C23v24Ev();
extern void _ZN7S5403C23v25Ev();
extern void _ZN7S5403C23v26Ev();
extern void _ZN7S5403C23v27Ev();
extern void ABISELECT(_ZThn112_N7S5403C2D1Ev,_ZThn64_N7S5403C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S5403C2D0Ev,_ZThn64_N7S5403C2D0Ev)();
extern void _ZN8S5403C103v15Ev();
extern void _ZN8S5403C103v16Ev();
extern void _ZN8S5403C103v17Ev();
static  VTBL_ENTRY vtc_S5403C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5403C2[0]),
  (VTBL_ENTRY)&_ZN7S5403C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5403C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5403C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5403C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v27Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S5403C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5403C2D1Ev,_ZThn64_N7S5403C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5403C2D0Ev,_ZThn64_N7S5403C2D0Ev),
  (VTBL_ENTRY)&_ZN8S5403C103v15Ev,
  (VTBL_ENTRY)&_ZN8S5403C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5403C103v17Ev,
};
extern VTBL_ENTRY _ZTI7S5403C2[];
extern  VTBL_ENTRY _ZTV7S5403C2[];
Class_Descriptor cd_S5403C2 = {  "S5403C2", // class name
  bases_S5403C2, 2,
  &(vtc_S5403C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI7S5403C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5403C2),28, //virtual function table var
  2, // 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  S5403C1  : S5403C2 {
  virtual  ~S5403C1(); // _ZN7S5403C1D1Ev
  virtual void  v1(); // _ZN7S5403C12v1Ev
  virtual void  v2(); // _ZN7S5403C12v2Ev
  virtual void  v3(); // _ZN7S5403C12v3Ev
  virtual void  v4(); // _ZN7S5403C12v4Ev
  virtual void  v5(); // _ZN7S5403C12v5Ev
  virtual void  v6(); // _ZN7S5403C12v6Ev
  virtual void  v7(); // _ZN7S5403C12v7Ev
  S5403C1(); // tgen
};
//SIG(1 S5403C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 Fp[4] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]} Fp FC7{ Fp FC8{ m Fp Fi FC9{ m}}}} BC10{ vd v15 v16 v17} vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 FC11{ m FC12{ m Fp} Fi Fp} Fi} vd v1 v2 v3 v4 v5 v6 v7}


 S5403C1 ::~S5403C1(){ note_dtor("S5403C1", this);}
void  S5403C1 ::v1(){vfunc_called(this, "_ZN7S5403C12v1Ev");}
void  S5403C1 ::v2(){vfunc_called(this, "_ZN7S5403C12v2Ev");}
void  S5403C1 ::v3(){vfunc_called(this, "_ZN7S5403C12v3Ev");}
void  S5403C1 ::v4(){vfunc_called(this, "_ZN7S5403C12v4Ev");}
void  S5403C1 ::v5(){vfunc_called(this, "_ZN7S5403C12v5Ev");}
void  S5403C1 ::v6(){vfunc_called(this, "_ZN7S5403C12v6Ev");}
void  S5403C1 ::v7(){vfunc_called(this, "_ZN7S5403C12v7Ev");}
S5403C1 ::S5403C1(){ note_ctor("S5403C1", this);} // tgen

static void Test_S5403C1()
{
  extern Class_Descriptor cd_S5403C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,22)];
    init_test(&cd_S5403C1, buf);
    S5403C1 *dp, &lv = *(dp=new (buf) S5403C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,84), "sizeof(S5403C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5403C1)");
    check_base_class_offset(lv, (S5403C3*)(S5403C2*), 0, "S5403C1");
    check_base_class_offset(lv, (S5403C10*)(S5403C2*), ABISELECT(112,64), "S5403C1");
    check_base_class_offset(lv, (S5403C2*), 0, "S5403C1");
    test_class_info(&lv, &cd_S5403C1);
    dp->~S5403C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5403C1(Test_S5403C1, "S5403C1", ABISELECT(152,84));

#else // __cplusplus

extern void _ZN7S5403C1C1Ev();
extern void _ZN7S5403C1D1Ev();
Name_Map name_map_S5403C1[] = {
  NSPAIR(_ZN7S5403C1C1Ev),
  NSPAIR(_ZN7S5403C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5403C3;
extern VTBL_ENTRY _ZTI7S5403C3[];
extern  VTBL_ENTRY _ZTV7S5403C3[];
extern Class_Descriptor cd_S5403C10;
extern VTBL_ENTRY _ZTI8S5403C10[];
extern  VTBL_ENTRY _ZTV8S5403C10[];
extern Class_Descriptor cd_S5403C2;
extern VTBL_ENTRY _ZTI7S5403C2[];
extern  VTBL_ENTRY _ZTV7S5403C2[];
static Base_Class bases_S5403C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5403C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5403C10,    ABISELECT(112,64), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5403C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5403C1[];
extern void _ZN7S5403C1D1Ev();
extern void _ZN7S5403C1D0Ev();
extern void _ZN7S5403C32v8Ev();
extern void _ZN7S5403C32v9Ev();
extern void _ZN7S5403C33v10Ev();
extern void _ZN7S5403C33v11Ev();
extern void _ZN7S5403C33v12Ev();
extern void _ZN7S5403C33v13Ev();
extern void _ZN7S5403C33v14Ev();
extern void _ZN7S5403C23v18Ev();
extern void _ZN7S5403C23v19Ev();
extern void _ZN7S5403C23v20Ev();
extern void _ZN7S5403C23v21Ev();
extern void _ZN7S5403C23v22Ev();
extern void _ZN7S5403C23v23Ev();
extern void _ZN7S5403C23v24Ev();
extern void _ZN7S5403C23v25Ev();
extern void _ZN7S5403C23v26Ev();
extern void _ZN7S5403C23v27Ev();
extern void _ZN7S5403C12v1Ev();
extern void _ZN7S5403C12v2Ev();
extern void _ZN7S5403C12v3Ev();
extern void _ZN7S5403C12v4Ev();
extern void _ZN7S5403C12v5Ev();
extern void _ZN7S5403C12v6Ev();
extern void _ZN7S5403C12v7Ev();
extern void ABISELECT(_ZThn112_N7S5403C1D1Ev,_ZThn64_N7S5403C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S5403C1D0Ev,_ZThn64_N7S5403C1D0Ev)();
extern void _ZN8S5403C103v15Ev();
extern void _ZN8S5403C103v16Ev();
extern void _ZN8S5403C103v17Ev();
static  VTBL_ENTRY vtc_S5403C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5403C1[0]),
  (VTBL_ENTRY)&_ZN7S5403C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5403C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5403C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5403C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5403C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5403C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5403C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5403C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5403C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5403C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5403C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5403C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5403C12v7Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S5403C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5403C1D1Ev,_ZThn64_N7S5403C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5403C1D0Ev,_ZThn64_N7S5403C1D0Ev),
  (VTBL_ENTRY)&_ZN8S5403C103v15Ev,
  (VTBL_ENTRY)&_ZN8S5403C103v16Ev,
  (VTBL_ENTRY)&_ZN8S5403C103v17Ev,
};
extern VTBL_ENTRY _ZTI7S5403C1[];
extern  VTBL_ENTRY _ZTV7S5403C1[];
Class_Descriptor cd_S5403C1 = {  "S5403C1", // class name
  bases_S5403C1, 3,
  &(vtc_S5403C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,84), // object size
  NSPAIRA(_ZTI7S5403C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5403C1),35, //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  S8210C4_nt  {
  void *s8210c4f0;
  void  mf8210c4(); // _ZN10S8210C4_nt8mf8210c4Ev
};
//SIG(-1 S8210C4_nt) C1{ m Fp}


void  S8210C4_nt ::mf8210c4(){}

//skip512 S8210C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C6  {
  void *s8210c6f0;
  void  mf8210c6(); // _ZN7S8210C68mf8210c6Ev
};
//SIG(-1 S8210C6) C1{ m Fp}


void  S8210C6 ::mf8210c6(){}

static void Test_S8210C6()
{
  {
    init_simple_test("S8210C6");
    S8210C6 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C6)");
    check_field_offset(lv, s8210c6f0, 0, "S8210C6.s8210c6f0");
  }
}
static Arrange_To_Call_Me vS8210C6(Test_S8210C6, "S8210C6", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C8  {
  void *s8210c8f0;
  void  mf8210c8(); // _ZN7S8210C88mf8210c8Ev
};
//SIG(-1 S8210C8) C1{ m Fp}


void  S8210C8 ::mf8210c8(){}

static void Test_S8210C8()
{
  {
    init_simple_test("S8210C8");
    S8210C8 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C8)");
    check_field_offset(lv, s8210c8f0, 0, "S8210C8.s8210c8f0");
  }
}
static Arrange_To_Call_Me vS8210C8(Test_S8210C8, "S8210C8", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C10  {
  void *s8210c10f0;
  void  mf8210c10(); // _ZN8S8210C109mf8210c10Ev
};
//SIG(-1 S8210C10) C1{ m Fp}


void  S8210C10 ::mf8210c10(){}

static void Test_S8210C10()
{
  {
    init_simple_test("S8210C10");
    S8210C10 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C10)");
    check_field_offset(lv, s8210c10f0, 0, "S8210C10.s8210c10f0");
  }
}
static Arrange_To_Call_Me vS8210C10(Test_S8210C10, "S8210C10", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C12  {
  void *s8210c12f0;
  void  mf8210c12(); // _ZN8S8210C129mf8210c12Ev
};
//SIG(-1 S8210C12) C1{ m Fp}


void  S8210C12 ::mf8210c12(){}

static void Test_S8210C12()
{
  {
    init_simple_test("S8210C12");
    S8210C12 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C12)");
    check_field_offset(lv, s8210c12f0, 0, "S8210C12.s8210c12f0");
  }
}
static Arrange_To_Call_Me vS8210C12(Test_S8210C12, "S8210C12", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C14  {
  void *s8210c14f0;
  void  mf8210c14(); // _ZN8S8210C149mf8210c14Ev
};
//SIG(-1 S8210C14) C1{ m Fp}


void  S8210C14 ::mf8210c14(){}

static void Test_S8210C14()
{
  {
    init_simple_test("S8210C14");
    S8210C14 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C14)");
    check_field_offset(lv, s8210c14f0, 0, "S8210C14.s8210c14f0");
  }
}
static Arrange_To_Call_Me vS8210C14(Test_S8210C14, "S8210C14", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C16  {
  void *s8210c16f0;
  void  mf8210c16(); // _ZN8S8210C169mf8210c16Ev
};
//SIG(-1 S8210C16) C1{ m Fp}


void  S8210C16 ::mf8210c16(){}

static void Test_S8210C16()
{
  {
    init_simple_test("S8210C16");
    S8210C16 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C16)");
    check_field_offset(lv, s8210c16f0, 0, "S8210C16.s8210c16f0");
  }
}
static Arrange_To_Call_Me vS8210C16(Test_S8210C16, "S8210C16", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C18  {
  void *s8210c18f0;
  void  mf8210c18(); // _ZN8S8210C189mf8210c18Ev
};
//SIG(-1 S8210C18) C1{ m Fp}


void  S8210C18 ::mf8210c18(){}

static void Test_S8210C18()
{
  {
    init_simple_test("S8210C18");
    S8210C18 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C18)");
    check_field_offset(lv, s8210c18f0, 0, "S8210C18.s8210c18f0");
  }
}
static Arrange_To_Call_Me vS8210C18(Test_S8210C18, "S8210C18", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C20  {
  void *s8210c20f0;
  void  mf8210c20(); // _ZN8S8210C209mf8210c20Ev
};
//SIG(-1 S8210C20) C1{ m Fp}


void  S8210C20 ::mf8210c20(){}

static void Test_S8210C20()
{
  {
    init_simple_test("S8210C20");
    S8210C20 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C20)");
    check_field_offset(lv, s8210c20f0, 0, "S8210C20.s8210c20f0");
  }
}
static Arrange_To_Call_Me vS8210C20(Test_S8210C20, "S8210C20", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C22  {
  void *s8210c22f0;
  void  mf8210c22(); // _ZN8S8210C229mf8210c22Ev
};
//SIG(-1 S8210C22) C1{ m Fp}


void  S8210C22 ::mf8210c22(){}

static void Test_S8210C22()
{
  {
    init_simple_test("S8210C22");
    S8210C22 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8210C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C22)");
    check_field_offset(lv, s8210c22f0, 0, "S8210C22.s8210c22f0");
  }
}
static Arrange_To_Call_Me vS8210C22(Test_S8210C22, "S8210C22", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8210C1  : S7368C18_nt {
  ::S753C9_nt s8210c1f0;
  ::S8210C4_nt s8210c1f1;
  ::S8210C4_nt s8210c1f2;
  ::S8210C6 s8210c1f3;
  ::S8210C6 s8210c1f4;
  ::S8210C8 s8210c1f5;
  ::S8210C8 s8210c1f6;
  ::S8210C10 s8210c1f7;
  ::S8210C10 s8210c1f8;
  ::S8210C12 s8210c1f9;
  ::S8210C12 s8210c1f10;
  ::S8210C14 s8210c1f11;
  ::S8210C14 s8210c1f12;
  ::S8210C16 s8210c1f13;
  ::S8210C16 s8210c1f14;
  ::S8210C18 s8210c1f15;
  ::S8210C18 s8210c1f16;
  ::S8210C20 s8210c1f17;
  ::S8210C20 s8210c1f18;
  ::S8210C22 s8210c1f19;
  virtual  ~S8210C1(); // _ZN7S8210C1D1Ev
  S8210C1(); // tgen
};
//SIG(1 S8210C1) C1{ BC2{ vd m Fp} vd FC3{ m Fp} FC4{ m Fp} FC4 FC5{ m Fp} FC5 FC6{ m Fp} FC6 FC7{ m Fp} FC7 FC8{ m Fp} FC8 FC9{ m Fp} FC9 FC10{ m Fp} FC10 FC11{ m Fp} FC11 FC12{ m Fp} FC12 FC13{ m Fp}}


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

static void Test_S8210C1()
{
  extern Class_Descriptor cd_S8210C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[23];
    init_test(&cd_S8210C1, buf);
    S8210C1 *dp, &lv = *(dp=new (buf) S8210C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,88), "sizeof(S8210C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8210C1)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S8210C1");
    check_field_offset(lv, s8210c1f0, ABISELECT(16,8), "S8210C1.s8210c1f0");
    check_field_offset(lv, s8210c1f1, ABISELECT(24,12), "S8210C1.s8210c1f1");
    check_field_offset(lv, s8210c1f2, ABISELECT(32,16), "S8210C1.s8210c1f2");
    check_field_offset(lv, s8210c1f3, ABISELECT(40,20), "S8210C1.s8210c1f3");
    check_field_offset(lv, s8210c1f4, ABISELECT(48,24), "S8210C1.s8210c1f4");
    check_field_offset(lv, s8210c1f5, ABISELECT(56,28), "S8210C1.s8210c1f5");
    check_field_offset(lv, s8210c1f6, ABISELECT(64,32), "S8210C1.s8210c1f6");
    check_field_offset(lv, s8210c1f7, ABISELECT(72,36), "S8210C1.s8210c1f7");
    check_field_offset(lv, s8210c1f8, ABISELECT(80,40), "S8210C1.s8210c1f8");
    check_field_offset(lv, s8210c1f9, ABISELECT(88,44), "S8210C1.s8210c1f9");
    check_field_offset(lv, s8210c1f10, ABISELECT(96,48), "S8210C1.s8210c1f10");
    check_field_offset(lv, s8210c1f11, ABISELECT(104,52), "S8210C1.s8210c1f11");
    check_field_offset(lv, s8210c1f12, ABISELECT(112,56), "S8210C1.s8210c1f12");
    check_field_offset(lv, s8210c1f13, ABISELECT(120,60), "S8210C1.s8210c1f13");
    check_field_offset(lv, s8210c1f14, ABISELECT(128,64), "S8210C1.s8210c1f14");
    check_field_offset(lv, s8210c1f15, ABISELECT(136,68), "S8210C1.s8210c1f15");
    check_field_offset(lv, s8210c1f16, ABISELECT(144,72), "S8210C1.s8210c1f16");
    check_field_offset(lv, s8210c1f17, ABISELECT(152,76), "S8210C1.s8210c1f17");
    check_field_offset(lv, s8210c1f18, ABISELECT(160,80), "S8210C1.s8210c1f18");
    check_field_offset(lv, s8210c1f19, ABISELECT(168,84), "S8210C1.s8210c1f19");
    test_class_info(&lv, &cd_S8210C1);
    dp->~S8210C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8210C1(Test_S8210C1, "S8210C1", ABISELECT(176,88));

#else // __cplusplus

extern void _ZN7S8210C1C1Ev();
extern void _ZN7S8210C1D1Ev();
Name_Map name_map_S8210C1[] = {
  NSPAIR(_ZN7S8210C1C1Ev),
  NSPAIR(_ZN7S8210C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S8210C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8210C1[];
extern void _ZN7S8210C1D1Ev();
extern void _ZN7S8210C1D0Ev();
static  VTBL_ENTRY vtc_S8210C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8210C1[0]),
  (VTBL_ENTRY)&_ZN7S8210C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8210C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8210C1[];
extern  VTBL_ENTRY _ZTV7S8210C1[];
Class_Descriptor cd_S8210C1 = {  "S8210C1", // class name
  bases_S8210C1, 1,
  &(vtc_S8210C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,88), // object size
  NSPAIRA(_ZTI7S8210C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8210C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C2  {
  int s13456c2f0;
  ::S2011C29_nt s13456c2f1;
  int s13456c2f2;
  void *s13456c2f3[4];
  int s13456c2f4;
  char s13456c2f5[32];
};
//SIG(-1 S13456C2) C1{ Fi FC2{ Fp[3] Fc[60] Fi} Fi Fp[4] Fi Fc[32]}



static void Test_S13456C2()
{
  {
    init_simple_test("S13456C2");
    S13456C2 lv;
    check2(sizeof(lv), ABISELECT(176,136), "sizeof(S13456C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13456C2)");
    check_field_offset(lv, s13456c2f0, 0, "S13456C2.s13456c2f0");
    check_field_offset(lv, s13456c2f1, ABISELECT(8,4), "S13456C2.s13456c2f1");
    check_field_offset(lv, s13456c2f2, ABISELECT(96,80), "S13456C2.s13456c2f2");
    check_field_offset(lv, s13456c2f3, ABISELECT(104,84), "S13456C2.s13456c2f3");
    check_field_offset(lv, s13456c2f4, ABISELECT(136,100), "S13456C2.s13456c2f4");
    check_field_offset(lv, s13456c2f5, ABISELECT(140,104), "S13456C2.s13456c2f5");
  }
}
static Arrange_To_Call_Me vS13456C2(Test_S13456C2, "S13456C2", ABISELECT(176,136));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C4  {
  int s13456c4f0;
  void *s13456c4f1[2];
  char s13456c4f2[28];
};
//SIG(-1 S13456C4) C1{ Fi Fp[2] Fc[28]}



static void Test_S13456C4()
{
  {
    init_simple_test("S13456C4");
    S13456C4 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S13456C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13456C4)");
    check_field_offset(lv, s13456c4f0, 0, "S13456C4.s13456c4f0");
    check_field_offset(lv, s13456c4f1, ABISELECT(8,4), "S13456C4.s13456c4f1");
    check_field_offset(lv, s13456c4f2, ABISELECT(24,12), "S13456C4.s13456c4f2");
  }
}
static Arrange_To_Call_Me vS13456C4(Test_S13456C4, "S13456C4", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C5_nt  {
  int s13456c5f0[2];
  char s13456c5f1[32];
};
//SIG(-1 S13456C5_nt) C1{ Fi[2] Fc[32]}



//skip512 S13456C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C6_nt  {
  int s13456c6f0;
  char s13456c6f1[32];
};
//SIG(-1 S13456C6_nt) C1{ Fi Fc[32]}



//skip512 S13456C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C7  {
  int s13456c7f0;
  ::S13456C5_nt s13456c7f1;
  void *s13456c7f2;
  char s13456c7f3[32];
};
//SIG(-1 S13456C7) C1{ Fi FC2{ Fi[2] Fc[32]} Fp Fc[32]}



static void Test_S13456C7()
{
  {
    init_simple_test("S13456C7");
    S13456C7 lv;
    check2(sizeof(lv), ABISELECT(88,80), "sizeof(S13456C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13456C7)");
    check_field_offset(lv, s13456c7f0, 0, "S13456C7.s13456c7f0");
    check_field_offset(lv, s13456c7f1, 4, "S13456C7.s13456c7f1");
    check_field_offset(lv, s13456c7f2, ABISELECT(48,44), "S13456C7.s13456c7f2");
    check_field_offset(lv, s13456c7f3, ABISELECT(56,48), "S13456C7.s13456c7f3");
  }
}
static Arrange_To_Call_Me vS13456C7(Test_S13456C7, "S13456C7", ABISELECT(88,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C9  {
  int s13456c9f0[3];
  char s13456c9f1[32];
};
//SIG(-1 S13456C9) C1{ Fi[3] Fc[32]}



static void Test_S13456C9()
{
  {
    init_simple_test("S13456C9");
    S13456C9 lv;
    check2(sizeof(lv), 44, "sizeof(S13456C9)");
    check2(__alignof__(lv), 4, "__alignof__(S13456C9)");
    check_field_offset(lv, s13456c9f0, 0, "S13456C9.s13456c9f0");
    check_field_offset(lv, s13456c9f1, 12, "S13456C9.s13456c9f1");
  }
}
static Arrange_To_Call_Me vS13456C9(Test_S13456C9, "S13456C9", 44);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C10  {
  void *s13456c10f0;
  int s13456c10f1;
  void *s13456c10f2;
  int s13456c10f3;
  void *s13456c10f4;
  int s13456c10f5;
  char s13456c10f6[32];
};
//SIG(-1 S13456C10) C1{ Fp Fi Fp Fi Fp Fi Fc[32]}



static void Test_S13456C10()
{
  {
    init_simple_test("S13456C10");
    S13456C10 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S13456C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13456C10)");
    check_field_offset(lv, s13456c10f0, 0, "S13456C10.s13456c10f0");
    check_field_offset(lv, s13456c10f1, ABISELECT(8,4), "S13456C10.s13456c10f1");
    check_field_offset(lv, s13456c10f2, ABISELECT(16,8), "S13456C10.s13456c10f2");
    check_field_offset(lv, s13456c10f3, ABISELECT(24,12), "S13456C10.s13456c10f3");
    check_field_offset(lv, s13456c10f4, ABISELECT(32,16), "S13456C10.s13456c10f4");
    check_field_offset(lv, s13456c10f5, ABISELECT(40,20), "S13456C10.s13456c10f5");
    check_field_offset(lv, s13456c10f6, ABISELECT(44,24), "S13456C10.s13456c10f6");
  }
}
static Arrange_To_Call_Me vS13456C10(Test_S13456C10, "S13456C10", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13456C1  {
  int s13456c1f0[4];
  ::S13456C2 s13456c1f1;
  ::S13456C4 s13456c1f2;
  ::S13456C5_nt s13456c1f3;
  ::S13456C6_nt s13456c1f4;
  ::S13456C7 s13456c1f5;
  int s13456c1f6[3];
  char s13456c1f7[512];
  ::S13456C6_nt s13456c1f8;
  ::S13456C9 s13456c1f9;
  ::S13456C10 s13456c1f10;
  char s13456c1f11[256];
};
//SIG(1 S13456C1) C1{ Fi[4] FC2{ Fi FC3{ Fp[3] Fc[60] Fi} Fi Fp[4] Fi Fc[32]} FC4{ Fi Fp[2] Fc[28]} FC5{ Fi[2] Fc[32]} FC6{ Fi Fc[32]} FC7{ Fi FC5 Fp Fc[32]} Fi[3] Fc[512] FC6 FC8{ Fi[3] Fc[32]} FC9{ Fp Fi Fp Fi Fp Fi Fc[32]} Fc[256]}



static void Test_S13456C1()
{
  {
    init_simple_test("S13456C1");
    S13456C1 lv;
    check2(sizeof(lv), ABISELECT(1360,1264), "sizeof(S13456C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13456C1)");
    check_field_offset(lv, s13456c1f0, 0, "S13456C1.s13456c1f0");
    check_field_offset(lv, s13456c1f1, 16, "S13456C1.s13456c1f1");
    check_field_offset(lv, s13456c1f2, ABISELECT(192,152), "S13456C1.s13456c1f2");
    check_field_offset(lv, s13456c1f3, ABISELECT(248,192), "S13456C1.s13456c1f3");
    check_field_offset(lv, s13456c1f4, ABISELECT(288,232), "S13456C1.s13456c1f4");
    check_field_offset(lv, s13456c1f5, ABISELECT(328,268), "S13456C1.s13456c1f5");
    check_field_offset(lv, s13456c1f6, ABISELECT(416,348), "S13456C1.s13456c1f6");
    check_field_offset(lv, s13456c1f7, ABISELECT(428,360), "S13456C1.s13456c1f7");
    check_field_offset(lv, s13456c1f8, ABISELECT(940,872), "S13456C1.s13456c1f8");
    check_field_offset(lv, s13456c1f9, ABISELECT(976,908), "S13456C1.s13456c1f9");
    check_field_offset(lv, s13456c1f10, ABISELECT(1024,952), "S13456C1.s13456c1f10");
    check_field_offset(lv, s13456c1f11, ABISELECT(1104,1008), "S13456C1.s13456c1f11");
  }
}
static Arrange_To_Call_Me vS13456C1(Test_S13456C1, "S13456C1", ABISELECT(1360,1264));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C4_nt  {
  char s11362c4f0[12];
};
//SIG(-1 S11362C4_nt) C1{ Fc[12]}



//skip512 S11362C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C2  {
  int s11362c2f0;
  ::S2011C29_nt s11362c2f1;
  int s11362c2f2;
  ::S11362C4_nt s11362c2f3;
  void *s11362c2f4[2];
  int s11362c2f5;
  char s11362c2f6[4];
  int s11362c2f7;
  void *s11362c2f8;
  char s11362c2f9[104];
};
//SIG(-1 S11362C2) C1{ Fi FC2{ Fp[3] Fc[60] Fi} Fi FC3{ Fc[12]} Fp[2] Fi Fc[4] Fi Fp Fc[104]}



static void Test_S11362C2()
{
  {
    init_simple_test("S11362C2");
    S11362C2 lv;
    check2(sizeof(lv), ABISELECT(256,224), "sizeof(S11362C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11362C2)");
    check_field_offset(lv, s11362c2f0, 0, "S11362C2.s11362c2f0");
    check_field_offset(lv, s11362c2f1, ABISELECT(8,4), "S11362C2.s11362c2f1");
    check_field_offset(lv, s11362c2f2, ABISELECT(96,80), "S11362C2.s11362c2f2");
    check_field_offset(lv, s11362c2f3, ABISELECT(100,84), "S11362C2.s11362c2f3");
    check_field_offset(lv, s11362c2f4, ABISELECT(112,96), "S11362C2.s11362c2f4");
    check_field_offset(lv, s11362c2f5, ABISELECT(128,104), "S11362C2.s11362c2f5");
    check_field_offset(lv, s11362c2f6, ABISELECT(132,108), "S11362C2.s11362c2f6");
    check_field_offset(lv, s11362c2f7, ABISELECT(136,112), "S11362C2.s11362c2f7");
    check_field_offset(lv, s11362c2f8, ABISELECT(144,116), "S11362C2.s11362c2f8");
    check_field_offset(lv, s11362c2f9, ABISELECT(152,120), "S11362C2.s11362c2f9");
  }
}
static Arrange_To_Call_Me vS11362C2(Test_S11362C2, "S11362C2", ABISELECT(256,224));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C5  {
  short s11362c5f0[4];
  char s11362c5f1[124];
};
//SIG(-1 S11362C5) C1{ Fs[4] Fc[124]}



static void Test_S11362C5()
{
  {
    init_simple_test("S11362C5");
    S11362C5 lv;
    check2(sizeof(lv), 132, "sizeof(S11362C5)");
    check2(__alignof__(lv), 2, "__alignof__(S11362C5)");
    check_field_offset(lv, s11362c5f0, 0, "S11362C5.s11362c5f0");
    check_field_offset(lv, s11362c5f1, 8, "S11362C5.s11362c5f1");
  }
}
static Arrange_To_Call_Me vS11362C5(Test_S11362C5, "S11362C5", 132);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C6  {
  int s11362c6f0;
  char s11362c6f1[108];
};
//SIG(-1 S11362C6) C1{ Fi Fc[108]}



static void Test_S11362C6()
{
  {
    init_simple_test("S11362C6");
    S11362C6 lv;
    check2(sizeof(lv), 112, "sizeof(S11362C6)");
    check2(__alignof__(lv), 4, "__alignof__(S11362C6)");
    check_field_offset(lv, s11362c6f0, 0, "S11362C6.s11362c6f0");
    check_field_offset(lv, s11362c6f1, 4, "S11362C6.s11362c6f1");
  }
}
static Arrange_To_Call_Me vS11362C6(Test_S11362C6, "S11362C6", 112);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C7  {
  int s11362c7f0[2];
  char s11362c7f1[124];
};
//SIG(-1 S11362C7) C1{ Fi[2] Fc[124]}



static void Test_S11362C7()
{
  {
    init_simple_test("S11362C7");
    S11362C7 lv;
    check2(sizeof(lv), 132, "sizeof(S11362C7)");
    check2(__alignof__(lv), 4, "__alignof__(S11362C7)");
    check_field_offset(lv, s11362c7f0, 0, "S11362C7.s11362c7f0");
    check_field_offset(lv, s11362c7f1, 8, "S11362C7.s11362c7f1");
  }
}
static Arrange_To_Call_Me vS11362C7(Test_S11362C7, "S11362C7", 132);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C8  {
  ::S10256C13_nt s11362c8f0;
  char s11362c8f1[140];
};
//SIG(-1 S11362C8) C1{ FC2{ Fi} Fc[140]}



static void Test_S11362C8()
{
  {
    init_simple_test("S11362C8");
    S11362C8 lv;
    check2(sizeof(lv), 144, "sizeof(S11362C8)");
    check2(__alignof__(lv), 4, "__alignof__(S11362C8)");
    check_field_offset(lv, s11362c8f0, 0, "S11362C8.s11362c8f0");
    check_field_offset(lv, s11362c8f1, 4, "S11362C8.s11362c8f1");
  }
}
static Arrange_To_Call_Me vS11362C8(Test_S11362C8, "S11362C8", 144);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S11362C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C12_nt  {
  char s11362c12f0[8];
};
//SIG(-1 S11362C12_nt) C1{ Fc[8]}



//skip512 S11362C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11362C1  {
  ::S11362C2 s11362c1f0;
  ::S11362C5 s11362c1f1;
  ::S11362C6 s11362c1f2;
  ::S11362C7 s11362c1f3;
  ::S11362C8 s11362c1f4;
  ::S13456C9 s11362c1f5;
  ::S11362C11_nt s11362c1f6;
  char s11362c1f7[64];
  ::S11362C12_nt s11362c1f8;
  ::S11362C11_nt s11362c1f9[200];
};
//SIG(1 S11362C1) C1{ FC2{ Fi FC3{ Fp[3] Fc[60] Fi} Fi FC4{ Fc[12]} Fp[2] Fi Fc[4] Fi Fp Fc[104]} FC5{ Fs[4] Fc[124]} FC6{ Fi Fc[108]} FC7{ Fi[2] Fc[124]} FC8{ FC9{ Fi} Fc[140]} FC10{ Fi[3] Fc[32]} FC11{ Fc[4]} Fc[64] FC12{ Fc[8]} FC11[200]}



static void Test_S11362C1()
{
  {
    init_simple_test("S11362C1");
    S11362C1 lv;
    check2(sizeof(lv), ABISELECT(1696,1664), "sizeof(S11362C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11362C1)");
    check_field_offset(lv, s11362c1f0, 0, "S11362C1.s11362c1f0");
    check_field_offset(lv, s11362c1f1, ABISELECT(256,224), "S11362C1.s11362c1f1");
    check_field_offset(lv, s11362c1f2, ABISELECT(388,356), "S11362C1.s11362c1f2");
    check_field_offset(lv, s11362c1f3, ABISELECT(500,468), "S11362C1.s11362c1f3");
    check_field_offset(lv, s11362c1f4, ABISELECT(632,600), "S11362C1.s11362c1f4");
    check_field_offset(lv, s11362c1f5, ABISELECT(776,744), "S11362C1.s11362c1f5");
    check_field_offset(lv, s11362c1f6, ABISELECT(820,788), "S11362C1.s11362c1f6");
    check_field_offset(lv, s11362c1f7, ABISELECT(824,792), "S11362C1.s11362c1f7");
    check_field_offset(lv, s11362c1f8, ABISELECT(888,856), "S11362C1.s11362c1f8");
    check_field_offset(lv, s11362c1f9, ABISELECT(896,864), "S11362C1.s11362c1f9");
  }
}
static Arrange_To_Call_Me vS11362C1(Test_S11362C1, "S11362C1", ABISELECT(1696,1664));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4468C3  {
  int s4468c3f0[4];
  ::S4464C4_nt s4468c3f1;
  int s4468c3f2;
  char s4468c3f3;
  ::S7368C72_nt s4468c3f4;
  int s4468c3f5;
  virtual  ~S4468C3(); // _ZN7S4468C3D1Ev
  virtual void  v2(); // _ZN7S4468C32v2Ev
  virtual void  v3(); // _ZN7S4468C32v3Ev
  virtual void  v4(); // _ZN7S4468C32v4Ev
  S4468C3(); // tgen
};
//SIG(-1 S4468C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4468C3 ::~S4468C3(){ note_dtor("S4468C3", this);}
void  S4468C3 ::v2(){vfunc_called(this, "_ZN7S4468C32v2Ev");}
void  S4468C3 ::v3(){vfunc_called(this, "_ZN7S4468C32v3Ev");}
void  S4468C3 ::v4(){vfunc_called(this, "_ZN7S4468C32v4Ev");}
S4468C3 ::S4468C3(){ note_ctor("S4468C3", this);} // tgen

static void Test_S4468C3()
{
  extern Class_Descriptor cd_S4468C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4468C3, buf);
    S4468C3 *dp, &lv = *(dp=new (buf) S4468C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4468C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4468C3)");
    check_field_offset(lv, s4468c3f0, ABISELECT(8,4), "S4468C3.s4468c3f0");
    check_field_offset(lv, s4468c3f1, ABISELECT(24,20), "S4468C3.s4468c3f1");
    check_field_offset(lv, s4468c3f2, ABISELECT(40,28), "S4468C3.s4468c3f2");
    check_field_offset(lv, s4468c3f3, ABISELECT(44,32), "S4468C3.s4468c3f3");
    check_field_offset(lv, s4468c3f4, ABISELECT(48,36), "S4468C3.s4468c3f4");
    check_field_offset(lv, s4468c3f5, ABISELECT(64,48), "S4468C3.s4468c3f5");
    test_class_info(&lv, &cd_S4468C3);
    dp->~S4468C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4468C3(Test_S4468C3, "S4468C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4468C3C1Ev();
extern void _ZN7S4468C3D1Ev();
Name_Map name_map_S4468C3[] = {
  NSPAIR(_ZN7S4468C3C1Ev),
  NSPAIR(_ZN7S4468C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4468C3[];
extern void _ZN7S4468C3D1Ev();
extern void _ZN7S4468C3D0Ev();
extern void _ZN7S4468C32v2Ev();
extern void _ZN7S4468C32v3Ev();
extern void _ZN7S4468C32v4Ev();
static  VTBL_ENTRY vtc_S4468C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4468C3[0]),
  (VTBL_ENTRY)&_ZN7S4468C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4468C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4468C3[];
extern  VTBL_ENTRY _ZTV7S4468C3[];
Class_Descriptor cd_S4468C3 = {  "S4468C3", // class name
  0,0,//no base classes
  &(vtc_S4468C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4468C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4468C3),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  S4468C2  : S4468C3 {
  virtual  ~S4468C2(); // _ZN7S4468C2D1Ev
  virtual void  v5(); // _ZN7S4468C22v5Ev
  S4468C2(); // tgen
};
//SIG(-1 S4468C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


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

static void Test_S4468C2()
{
  extern Class_Descriptor cd_S4468C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4468C2, buf);
    S4468C2 *dp, &lv = *(dp=new (buf) S4468C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4468C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4468C2)");
    check_base_class_offset(lv, (S4468C3*), 0, "S4468C2");
    test_class_info(&lv, &cd_S4468C2);
    dp->~S4468C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4468C2(Test_S4468C2, "S4468C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4468C2C1Ev();
extern void _ZN7S4468C2D1Ev();
Name_Map name_map_S4468C2[] = {
  NSPAIR(_ZN7S4468C2C1Ev),
  NSPAIR(_ZN7S4468C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4468C3;
extern VTBL_ENTRY _ZTI7S4468C3[];
extern  VTBL_ENTRY _ZTV7S4468C3[];
static Base_Class bases_S4468C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4468C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4468C2[];
extern void _ZN7S4468C2D1Ev();
extern void _ZN7S4468C2D0Ev();
extern void _ZN7S4468C32v2Ev();
extern void _ZN7S4468C32v3Ev();
extern void _ZN7S4468C32v4Ev();
extern void _ZN7S4468C22v5Ev();
static  VTBL_ENTRY vtc_S4468C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4468C2[0]),
  (VTBL_ENTRY)&_ZN7S4468C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4468C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4468C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4468C2[];
extern  VTBL_ENTRY _ZTV7S4468C2[];
Class_Descriptor cd_S4468C2 = {  "S4468C2", // class name
  bases_S4468C2, 1,
  &(vtc_S4468C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4468C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4468C2),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  S4468C11_nt  {
  ::S10256C3_nt s4468c11f0;
  int s4468c11f1;
  void  mf4468c11(); // _ZN11S4468C11_nt9mf4468c11Ev
};
//SIG(-1 S4468C11_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}} Fi}


void  S4468C11_nt ::mf4468c11(){}

//skip512 S4468C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4468C1  : S4468C2 {
  ::S7368C63 s4468c1f0;
  void *s4468c1f1;
  ::S4468C11_nt s4468c1f2;
  virtual  ~S4468C1(); // _ZN7S4468C1D1Ev
  virtual void  v1(); // _ZN7S4468C12v1Ev
  S4468C1(); // tgen
};
//SIG(1 S4468C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} Fi FC9{ BC10{ vd m Fc} vd FL[2]}} Fp FC11{ m FC12{ m Fp Fi FC13{ m} FC14{ m}} Fi}}


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

static void Test_S4468C1()
{
  extern Class_Descriptor cd_S4468C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S4468C1, buf);
    S4468C1 *dp, &lv = *(dp=new (buf) S4468C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S4468C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4468C1)");
    check_base_class_offset(lv, (S4468C3*)(S4468C2*), 0, "S4468C1");
    check_base_class_offset(lv, (S4468C2*), 0, "S4468C1");
    check_field_offset(lv, s4468c1f0, ABISELECT(72,52), "S4468C1.s4468c1f0");
    check_field_offset(lv, s4468c1f1, ABISELECT(136,96), "S4468C1.s4468c1f1");
    check_field_offset(lv, s4468c1f2, ABISELECT(144,100), "S4468C1.s4468c1f2");
    test_class_info(&lv, &cd_S4468C1);
    dp->~S4468C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4468C1(Test_S4468C1, "S4468C1", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S4468C1C1Ev();
extern void _ZN7S4468C1D1Ev();
Name_Map name_map_S4468C1[] = {
  NSPAIR(_ZN7S4468C1C1Ev),
  NSPAIR(_ZN7S4468C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4468C3;
extern VTBL_ENTRY _ZTI7S4468C3[];
extern  VTBL_ENTRY _ZTV7S4468C3[];
extern Class_Descriptor cd_S4468C2;
extern VTBL_ENTRY _ZTI7S4468C2[];
extern  VTBL_ENTRY _ZTV7S4468C2[];
static Base_Class bases_S4468C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4468C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4468C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4468C1[];
extern void _ZN7S4468C1D1Ev();
extern void _ZN7S4468C1D0Ev();
extern void _ZN7S4468C32v2Ev();
extern void _ZN7S4468C32v3Ev();
extern void _ZN7S4468C32v4Ev();
extern void _ZN7S4468C22v5Ev();
extern void _ZN7S4468C12v1Ev();
static  VTBL_ENTRY vtc_S4468C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4468C1[0]),
  (VTBL_ENTRY)&_ZN7S4468C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4468C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4468C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4468C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4468C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4468C1[];
extern  VTBL_ENTRY _ZTV7S4468C1[];
Class_Descriptor cd_S4468C1 = {  "S4468C1", // class name
  bases_S4468C1, 2,
  &(vtc_S4468C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S4468C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4468C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1657C3  : S7368C49 {
  void *s1657c3f0;
  ::S10256C12_nt s1657c3f1;
  virtual  ~S1657C3(); // _ZN7S1657C3D1Ev
  virtual void  v4(); // _ZN7S1657C32v4Ev
  virtual void  v5(); // _ZN7S1657C32v5Ev
  virtual void  v6(); // _ZN7S1657C32v6Ev
  virtual void  v7(); // _ZN7S1657C32v7Ev
  virtual void  v8(); // _ZN7S1657C32v8Ev
  virtual void  v9(); // _ZN7S1657C32v9Ev
  virtual void  v10(); // _ZN7S1657C33v10Ev
  virtual void  v11(); // _ZN7S1657C33v11Ev
  virtual void  v12(); // _ZN7S1657C33v12Ev
  virtual void  v13(); // _ZN7S1657C33v13Ev
  virtual void  v14(); // _ZN7S1657C33v14Ev
  S1657C3(); // tgen
};
//SIG(-1 S1657C3) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S1657C3 ::~S1657C3(){ note_dtor("S1657C3", this);}
void  S1657C3 ::v4(){vfunc_called(this, "_ZN7S1657C32v4Ev");}
void  S1657C3 ::v5(){vfunc_called(this, "_ZN7S1657C32v5Ev");}
void  S1657C3 ::v6(){vfunc_called(this, "_ZN7S1657C32v6Ev");}
void  S1657C3 ::v7(){vfunc_called(this, "_ZN7S1657C32v7Ev");}
void  S1657C3 ::v8(){vfunc_called(this, "_ZN7S1657C32v8Ev");}
void  S1657C3 ::v9(){vfunc_called(this, "_ZN7S1657C32v9Ev");}
void  S1657C3 ::v10(){vfunc_called(this, "_ZN7S1657C33v10Ev");}
void  S1657C3 ::v11(){vfunc_called(this, "_ZN7S1657C33v11Ev");}
void  S1657C3 ::v12(){vfunc_called(this, "_ZN7S1657C33v12Ev");}
void  S1657C3 ::v13(){vfunc_called(this, "_ZN7S1657C33v13Ev");}
void  S1657C3 ::v14(){vfunc_called(this, "_ZN7S1657C33v14Ev");}
S1657C3 ::S1657C3(){ note_ctor("S1657C3", this);} // tgen

static void Test_S1657C3()
{
  extern Class_Descriptor cd_S1657C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S1657C3, buf);
    S1657C3 *dp, &lv = *(dp=new (buf) S1657C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S1657C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1657C3)");
    check_base_class_offset(lv, (S7368C49*), 0, "S1657C3");
    check_field_offset(lv, s1657c3f0, ABISELECT(32,20), "S1657C3.s1657c3f0");
    check_field_offset(lv, s1657c3f1, ABISELECT(40,24), "S1657C3.s1657c3f1");
    test_class_info(&lv, &cd_S1657C3);
    dp->~S1657C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1657C3(Test_S1657C3, "S1657C3", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S1657C3C1Ev();
extern void _ZN7S1657C3D1Ev();
Name_Map name_map_S1657C3[] = {
  NSPAIR(_ZN7S1657C3C1Ev),
  NSPAIR(_ZN7S1657C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S1657C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1657C3[];
extern void _ZN7S1657C3D1Ev();
extern void _ZN7S1657C3D0Ev();
extern void _ZN7S1657C32v4Ev();
extern void _ZN7S1657C32v5Ev();
extern void _ZN7S1657C32v6Ev();
extern void _ZN7S1657C32v7Ev();
extern void _ZN7S1657C32v8Ev();
extern void _ZN7S1657C32v9Ev();
extern void _ZN7S1657C33v10Ev();
extern void _ZN7S1657C33v11Ev();
extern void _ZN7S1657C33v12Ev();
extern void _ZN7S1657C33v13Ev();
extern void _ZN7S1657C33v14Ev();
static  VTBL_ENTRY vtc_S1657C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1657C3[0]),
  (VTBL_ENTRY)&_ZN7S1657C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1657C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1657C3[];
extern  VTBL_ENTRY _ZTV7S1657C3[];
Class_Descriptor cd_S1657C3 = {  "S1657C3", // class name
  bases_S1657C3, 1,
  &(vtc_S1657C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S1657C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1657C3),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1657C8  {
  virtual  ~S1657C8(); // _ZN7S1657C8D1Ev
  virtual void  v15(); // _ZN7S1657C83v15Ev
  S1657C8(); // tgen
};
//SIG(-1 S1657C8) C1{ vd v1}


 S1657C8 ::~S1657C8(){ note_dtor("S1657C8", this);}
void  S1657C8 ::v15(){vfunc_called(this, "_ZN7S1657C83v15Ev");}
S1657C8 ::S1657C8(){ note_ctor("S1657C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1657C8C1Ev();
extern void _ZN7S1657C8D1Ev();
Name_Map name_map_S1657C8[] = {
  NSPAIR(_ZN7S1657C8C1Ev),
  NSPAIR(_ZN7S1657C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1657C8[];
extern void _ZN7S1657C8D1Ev();
extern void _ZN7S1657C8D0Ev();
extern void _ZN7S1657C83v15Ev();
static  VTBL_ENTRY vtc_S1657C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1657C8[0]),
  (VTBL_ENTRY)&_ZN7S1657C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1657C8D0Ev,
  (VTBL_ENTRY)&_ZN7S1657C83v15Ev,
};
extern VTBL_ENTRY _ZTI7S1657C8[];
extern  VTBL_ENTRY _ZTV7S1657C8[];
Class_Descriptor cd_S1657C8 = {  "S1657C8", // class name
  0,0,//no base classes
  &(vtc_S1657C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1657C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1657C8),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  S1657C9  {
  virtual  ~S1657C9(); // _ZN7S1657C9D1Ev
  virtual void  v16(); // _ZN7S1657C93v16Ev
  S1657C9(); // tgen
};
//SIG(-1 S1657C9) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S1657C9C1Ev();
extern void _ZN7S1657C9D1Ev();
Name_Map name_map_S1657C9[] = {
  NSPAIR(_ZN7S1657C9C1Ev),
  NSPAIR(_ZN7S1657C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1657C9[];
extern void _ZN7S1657C9D1Ev();
extern void _ZN7S1657C9D0Ev();
extern void _ZN7S1657C93v16Ev();
static  VTBL_ENTRY vtc_S1657C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1657C9[0]),
  (VTBL_ENTRY)&_ZN7S1657C9D1Ev,
  (VTBL_ENTRY)&_ZN7S1657C9D0Ev,
  (VTBL_ENTRY)&_ZN7S1657C93v16Ev,
};
extern VTBL_ENTRY _ZTI7S1657C9[];
extern  VTBL_ENTRY _ZTV7S1657C9[];
Class_Descriptor cd_S1657C9 = {  "S1657C9", // class name
  0,0,//no base classes
  &(vtc_S1657C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1657C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1657C9),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  S1657C2  : S1657C3 , S1657C8 , S1657C9 {
  void *s1657c2f0;
  virtual  ~S1657C2(); // _ZN7S1657C2D1Ev
  virtual void  v17(); // _ZN7S1657C23v17Ev
  virtual void  v18(); // _ZN7S1657C23v18Ev
  virtual void  v19(); // _ZN7S1657C23v19Ev
  virtual void  v20(); // _ZN7S1657C23v20Ev
  virtual void  v21(); // _ZN7S1657C23v21Ev
  virtual void  v22(); // _ZN7S1657C23v22Ev
  virtual void  v23(); // _ZN7S1657C23v23Ev
  virtual void  v24(); // _ZN7S1657C23v24Ev
  virtual void  v25(); // _ZN7S1657C23v25Ev
  virtual void  v26(); // _ZN7S1657C23v26Ev
  S1657C2(); // tgen
};
//SIG(-1 S1657C2) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC7{ vd v22} BC8{ vd v23} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp}


 S1657C2 ::~S1657C2(){ note_dtor("S1657C2", this);}
void  S1657C2 ::v17(){vfunc_called(this, "_ZN7S1657C23v17Ev");}
void  S1657C2 ::v18(){vfunc_called(this, "_ZN7S1657C23v18Ev");}
void  S1657C2 ::v19(){vfunc_called(this, "_ZN7S1657C23v19Ev");}
void  S1657C2 ::v20(){vfunc_called(this, "_ZN7S1657C23v20Ev");}
void  S1657C2 ::v21(){vfunc_called(this, "_ZN7S1657C23v21Ev");}
void  S1657C2 ::v22(){vfunc_called(this, "_ZN7S1657C23v22Ev");}
void  S1657C2 ::v23(){vfunc_called(this, "_ZN7S1657C23v23Ev");}
void  S1657C2 ::v24(){vfunc_called(this, "_ZN7S1657C23v24Ev");}
void  S1657C2 ::v25(){vfunc_called(this, "_ZN7S1657C23v25Ev");}
void  S1657C2 ::v26(){vfunc_called(this, "_ZN7S1657C23v26Ev");}
S1657C2 ::S1657C2(){ note_ctor("S1657C2", this);} // tgen

static void Test_S1657C2()
{
  extern Class_Descriptor cd_S1657C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1657C2, buf);
    S1657C2 *dp, &lv = *(dp=new (buf) S1657C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1657C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1657C2)");
    check_base_class_offset(lv, (S7368C49*)(S1657C3*), 0, "S1657C2");
    check_base_class_offset(lv, (S1657C3*), 0, "S1657C2");
    check_base_class_offset(lv, (S1657C8*), ABISELECT(96,64), "S1657C2");
    check_base_class_offset(lv, (S1657C9*), ABISELECT(104,68), "S1657C2");
    check_field_offset(lv, s1657c2f0, ABISELECT(112,72), "S1657C2.s1657c2f0");
    test_class_info(&lv, &cd_S1657C2);
    dp->~S1657C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1657C2(Test_S1657C2, "S1657C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1657C2C1Ev();
extern void _ZN7S1657C2D1Ev();
Name_Map name_map_S1657C2[] = {
  NSPAIR(_ZN7S1657C2C1Ev),
  NSPAIR(_ZN7S1657C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S1657C3;
extern VTBL_ENTRY _ZTI7S1657C3[];
extern  VTBL_ENTRY _ZTV7S1657C3[];
extern Class_Descriptor cd_S1657C8;
extern VTBL_ENTRY _ZTI7S1657C8[];
extern  VTBL_ENTRY _ZTV7S1657C8[];
extern Class_Descriptor cd_S1657C9;
extern VTBL_ENTRY _ZTI7S1657C9[];
extern  VTBL_ENTRY _ZTV7S1657C9[];
static Base_Class bases_S1657C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1657C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S1657C8,    ABISELECT(96,64), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1657C9,    ABISELECT(104,68), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1657C2[];
extern void _ZN7S1657C2D1Ev();
extern void _ZN7S1657C2D0Ev();
extern void _ZN7S1657C32v4Ev();
extern void _ZN7S1657C32v5Ev();
extern void _ZN7S1657C32v6Ev();
extern void _ZN7S1657C32v7Ev();
extern void _ZN7S1657C32v8Ev();
extern void _ZN7S1657C32v9Ev();
extern void _ZN7S1657C33v10Ev();
extern void _ZN7S1657C33v11Ev();
extern void _ZN7S1657C33v12Ev();
extern void _ZN7S1657C33v13Ev();
extern void _ZN7S1657C33v14Ev();
extern void _ZN7S1657C23v17Ev();
extern void _ZN7S1657C23v18Ev();
extern void _ZN7S1657C23v19Ev();
extern void _ZN7S1657C23v20Ev();
extern void _ZN7S1657C23v21Ev();
extern void _ZN7S1657C23v22Ev();
extern void _ZN7S1657C23v23Ev();
extern void _ZN7S1657C23v24Ev();
extern void _ZN7S1657C23v25Ev();
extern void _ZN7S1657C23v26Ev();
extern void ABISELECT(_ZThn96_N7S1657C2D1Ev,_ZThn64_N7S1657C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S1657C2D0Ev,_ZThn64_N7S1657C2D0Ev)();
extern void _ZN7S1657C83v15Ev();
extern void ABISELECT(_ZThn104_N7S1657C2D1Ev,_ZThn68_N7S1657C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S1657C2D0Ev,_ZThn68_N7S1657C2D0Ev)();
extern void _ZN7S1657C93v16Ev();
static  VTBL_ENTRY vtc_S1657C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1657C2[0]),
  (VTBL_ENTRY)&_ZN7S1657C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1657C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v26Ev,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S1657C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S1657C2D1Ev,_ZThn64_N7S1657C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S1657C2D0Ev,_ZThn64_N7S1657C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1657C83v15Ev,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S1657C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1657C2D1Ev,_ZThn68_N7S1657C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1657C2D0Ev,_ZThn68_N7S1657C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1657C93v16Ev,
};
extern VTBL_ENTRY _ZTI7S1657C2[];
extern  VTBL_ENTRY _ZTV7S1657C2[];
Class_Descriptor cd_S1657C2 = {  "S1657C2", // class name
  bases_S1657C2, 4,
  &(vtc_S1657C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1657C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1657C2),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  S1657C1  : S1657C2 {
  int s1657c1f0;
  virtual  ~S1657C1(); // _ZN7S1657C1D1Ev
  virtual void  v1(); // _ZN7S1657C12v1Ev
  virtual void  v2(); // _ZN7S1657C12v2Ev
  virtual void  v3(); // _ZN7S1657C12v3Ev
  S1657C1(); // tgen
};
//SIG(1 S1657C1) C1{ BC2{ BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC8{ vd v15} BC9{ vd v16} vd v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp} vd v1 v2 v3 Fi}


 S1657C1 ::~S1657C1(){ note_dtor("S1657C1", this);}
void  S1657C1 ::v1(){vfunc_called(this, "_ZN7S1657C12v1Ev");}
void  S1657C1 ::v2(){vfunc_called(this, "_ZN7S1657C12v2Ev");}
void  S1657C1 ::v3(){vfunc_called(this, "_ZN7S1657C12v3Ev");}
S1657C1 ::S1657C1(){ note_ctor("S1657C1", this);} // tgen

static void Test_S1657C1()
{
  extern Class_Descriptor cd_S1657C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S1657C1, buf);
    S1657C1 *dp, &lv = *(dp=new (buf) S1657C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S1657C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1657C1)");
    check_base_class_offset(lv, (S7368C49*)(S1657C3*)(S1657C2*), 0, "S1657C1");
    check_base_class_offset(lv, (S1657C3*)(S1657C2*), 0, "S1657C1");
    check_base_class_offset(lv, (S1657C8*)(S1657C2*), ABISELECT(96,64), "S1657C1");
    check_base_class_offset(lv, (S1657C9*)(S1657C2*), ABISELECT(104,68), "S1657C1");
    check_base_class_offset(lv, (S1657C2*), 0, "S1657C1");
    check_field_offset(lv, s1657c1f0, ABISELECT(120,76), "S1657C1.s1657c1f0");
    test_class_info(&lv, &cd_S1657C1);
    dp->~S1657C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1657C1(Test_S1657C1, "S1657C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S1657C1C1Ev();
extern void _ZN7S1657C1D1Ev();
Name_Map name_map_S1657C1[] = {
  NSPAIR(_ZN7S1657C1C1Ev),
  NSPAIR(_ZN7S1657C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S1657C3;
extern VTBL_ENTRY _ZTI7S1657C3[];
extern  VTBL_ENTRY _ZTV7S1657C3[];
extern Class_Descriptor cd_S1657C8;
extern VTBL_ENTRY _ZTI7S1657C8[];
extern  VTBL_ENTRY _ZTV7S1657C8[];
extern Class_Descriptor cd_S1657C9;
extern VTBL_ENTRY _ZTI7S1657C9[];
extern  VTBL_ENTRY _ZTV7S1657C9[];
extern Class_Descriptor cd_S1657C2;
extern VTBL_ENTRY _ZTI7S1657C2[];
extern  VTBL_ENTRY _ZTV7S1657C2[];
static Base_Class bases_S1657C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1657C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1657C8,    ABISELECT(96,64), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_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_S1657C9,    ABISELECT(104,68), //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1657C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1657C1[];
extern void _ZN7S1657C1D1Ev();
extern void _ZN7S1657C1D0Ev();
extern void _ZN7S1657C32v4Ev();
extern void _ZN7S1657C32v5Ev();
extern void _ZN7S1657C32v6Ev();
extern void _ZN7S1657C32v7Ev();
extern void _ZN7S1657C32v8Ev();
extern void _ZN7S1657C32v9Ev();
extern void _ZN7S1657C33v10Ev();
extern void _ZN7S1657C33v11Ev();
extern void _ZN7S1657C33v12Ev();
extern void _ZN7S1657C33v13Ev();
extern void _ZN7S1657C33v14Ev();
extern void _ZN7S1657C23v17Ev();
extern void _ZN7S1657C23v18Ev();
extern void _ZN7S1657C23v19Ev();
extern void _ZN7S1657C23v20Ev();
extern void _ZN7S1657C23v21Ev();
extern void _ZN7S1657C23v22Ev();
extern void _ZN7S1657C23v23Ev();
extern void _ZN7S1657C23v24Ev();
extern void _ZN7S1657C23v25Ev();
extern void _ZN7S1657C23v26Ev();
extern void _ZN7S1657C12v1Ev();
extern void _ZN7S1657C12v2Ev();
extern void _ZN7S1657C12v3Ev();
extern void ABISELECT(_ZThn96_N7S1657C1D1Ev,_ZThn64_N7S1657C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S1657C1D0Ev,_ZThn64_N7S1657C1D0Ev)();
extern void _ZN7S1657C83v15Ev();
extern void ABISELECT(_ZThn104_N7S1657C1D1Ev,_ZThn68_N7S1657C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S1657C1D0Ev,_ZThn68_N7S1657C1D0Ev)();
extern void _ZN7S1657C93v16Ev();
static  VTBL_ENTRY vtc_S1657C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1657C1[0]),
  (VTBL_ENTRY)&_ZN7S1657C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1657C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1657C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1657C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1657C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1657C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1657C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1657C12v3Ev,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S1657C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S1657C1D1Ev,_ZThn64_N7S1657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S1657C1D0Ev,_ZThn64_N7S1657C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1657C83v15Ev,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S1657C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1657C1D1Ev,_ZThn68_N7S1657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S1657C1D0Ev,_ZThn68_N7S1657C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1657C93v16Ev,
};
extern VTBL_ENTRY _ZTI7S1657C1[];
extern  VTBL_ENTRY _ZTV7S1657C1[];
Class_Descriptor cd_S1657C1 = {  "S1657C1", // class name
  bases_S1657C1, 5,
  &(vtc_S1657C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S1657C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1657C1),38, //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  S8541C2  {
  virtual  ~S8541C2(); // _ZN7S8541C2D1Ev
  virtual void  v10(); // _ZN7S8541C23v10Ev
  S8541C2(); // tgen
};
//SIG(-1 S8541C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S8541C2C1Ev();
extern void _ZN7S8541C2D1Ev();
Name_Map name_map_S8541C2[] = {
  NSPAIR(_ZN7S8541C2C1Ev),
  NSPAIR(_ZN7S8541C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8541C2[];
extern void _ZN7S8541C2D1Ev();
extern void _ZN7S8541C2D0Ev();
extern void _ZN7S8541C23v10Ev();
static  VTBL_ENTRY vtc_S8541C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8541C2[0]),
  (VTBL_ENTRY)&_ZN7S8541C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8541C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8541C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S8541C2[];
extern  VTBL_ENTRY _ZTV7S8541C2[];
Class_Descriptor cd_S8541C2 = {  "S8541C2", // class name
  0,0,//no base classes
  &(vtc_S8541C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8541C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8541C2),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  S8541C3  : S7368C49 {
  void *s8541c3f0;
  ::S10256C12_nt s8541c3f1;
  virtual  ~S8541C3(); // _ZN7S8541C3D1Ev
  virtual void  v11(); // _ZN7S8541C33v11Ev
  virtual void  v12(); // _ZN7S8541C33v12Ev
  virtual void  v13(); // _ZN7S8541C33v13Ev
  virtual void  v14(); // _ZN7S8541C33v14Ev
  virtual void  v15(); // _ZN7S8541C33v15Ev
  virtual void  v16(); // _ZN7S8541C33v16Ev
  virtual void  v17(); // _ZN7S8541C33v17Ev
  virtual void  v18(); // _ZN7S8541C33v18Ev
  virtual void  v19(); // _ZN7S8541C33v19Ev
  virtual void  v20(); // _ZN7S8541C33v20Ev
  virtual void  v21(); // _ZN7S8541C33v21Ev
  S8541C3(); // tgen
};
//SIG(-1 S8541C3) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S8541C3 ::~S8541C3(){ note_dtor("S8541C3", this);}
void  S8541C3 ::v11(){vfunc_called(this, "_ZN7S8541C33v11Ev");}
void  S8541C3 ::v12(){vfunc_called(this, "_ZN7S8541C33v12Ev");}
void  S8541C3 ::v13(){vfunc_called(this, "_ZN7S8541C33v13Ev");}
void  S8541C3 ::v14(){vfunc_called(this, "_ZN7S8541C33v14Ev");}
void  S8541C3 ::v15(){vfunc_called(this, "_ZN7S8541C33v15Ev");}
void  S8541C3 ::v16(){vfunc_called(this, "_ZN7S8541C33v16Ev");}
void  S8541C3 ::v17(){vfunc_called(this, "_ZN7S8541C33v17Ev");}
void  S8541C3 ::v18(){vfunc_called(this, "_ZN7S8541C33v18Ev");}
void  S8541C3 ::v19(){vfunc_called(this, "_ZN7S8541C33v19Ev");}
void  S8541C3 ::v20(){vfunc_called(this, "_ZN7S8541C33v20Ev");}
void  S8541C3 ::v21(){vfunc_called(this, "_ZN7S8541C33v21Ev");}
S8541C3 ::S8541C3(){ note_ctor("S8541C3", this);} // tgen

static void Test_S8541C3()
{
  extern Class_Descriptor cd_S8541C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S8541C3, buf);
    S8541C3 *dp, &lv = *(dp=new (buf) S8541C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S8541C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8541C3)");
    check_base_class_offset(lv, (S7368C49*), 0, "S8541C3");
    check_field_offset(lv, s8541c3f0, ABISELECT(32,20), "S8541C3.s8541c3f0");
    check_field_offset(lv, s8541c3f1, ABISELECT(40,24), "S8541C3.s8541c3f1");
    test_class_info(&lv, &cd_S8541C3);
    dp->~S8541C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8541C3(Test_S8541C3, "S8541C3", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S8541C3C1Ev();
extern void _ZN7S8541C3D1Ev();
Name_Map name_map_S8541C3[] = {
  NSPAIR(_ZN7S8541C3C1Ev),
  NSPAIR(_ZN7S8541C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S8541C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8541C3[];
extern void _ZN7S8541C3D1Ev();
extern void _ZN7S8541C3D0Ev();
extern void _ZN7S8541C33v11Ev();
extern void _ZN7S8541C33v12Ev();
extern void _ZN7S8541C33v13Ev();
extern void _ZN7S8541C33v14Ev();
extern void _ZN7S8541C33v15Ev();
extern void _ZN7S8541C33v16Ev();
extern void _ZN7S8541C33v17Ev();
extern void _ZN7S8541C33v18Ev();
extern void _ZN7S8541C33v19Ev();
extern void _ZN7S8541C33v20Ev();
extern void _ZN7S8541C33v21Ev();
static  VTBL_ENTRY vtc_S8541C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8541C3[0]),
  (VTBL_ENTRY)&_ZN7S8541C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8541C3D0Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v11Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v12Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v13Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v14Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v15Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v16Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v17Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v18Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v19Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v20Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v21Ev,
};
extern VTBL_ENTRY _ZTI7S8541C3[];
extern  VTBL_ENTRY _ZTV7S8541C3[];
Class_Descriptor cd_S8541C3 = {  "S8541C3", // class name
  bases_S8541C3, 1,
  &(vtc_S8541C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S8541C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8541C3),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8541C8  {
  virtual  ~S8541C8(); // _ZN7S8541C8D1Ev
  virtual void  v22(); // _ZN7S8541C83v22Ev
  S8541C8(); // tgen
};
//SIG(-1 S8541C8) C1{ vd v1}


 S8541C8 ::~S8541C8(){ note_dtor("S8541C8", this);}
void  S8541C8 ::v22(){vfunc_called(this, "_ZN7S8541C83v22Ev");}
S8541C8 ::S8541C8(){ note_ctor("S8541C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S8541C8C1Ev();
extern void _ZN7S8541C8D1Ev();
Name_Map name_map_S8541C8[] = {
  NSPAIR(_ZN7S8541C8C1Ev),
  NSPAIR(_ZN7S8541C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8541C8[];
extern void _ZN7S8541C8D1Ev();
extern void _ZN7S8541C8D0Ev();
extern void _ZN7S8541C83v22Ev();
static  VTBL_ENTRY vtc_S8541C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8541C8[0]),
  (VTBL_ENTRY)&_ZN7S8541C8D1Ev,
  (VTBL_ENTRY)&_ZN7S8541C8D0Ev,
  (VTBL_ENTRY)&_ZN7S8541C83v22Ev,
};
extern VTBL_ENTRY _ZTI7S8541C8[];
extern  VTBL_ENTRY _ZTV7S8541C8[];
Class_Descriptor cd_S8541C8 = {  "S8541C8", // class name
  0,0,//no base classes
  &(vtc_S8541C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8541C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8541C8),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  S8541C9  : S7368C18_nt {
  void *s8541c9f0;
  virtual  ~S8541C9(); // _ZN7S8541C9D1Ev
  S8541C9(); // tgen
};
//SIG(-1 S8541C9) C1{ BC2{ vd m Fp} vd Fp}


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

static void Test_S8541C9()
{
  extern Class_Descriptor cd_S8541C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8541C9, buf);
    S8541C9 *dp, &lv = *(dp=new (buf) S8541C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8541C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8541C9)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S8541C9");
    check_field_offset(lv, s8541c9f0, ABISELECT(16,8), "S8541C9.s8541c9f0");
    test_class_info(&lv, &cd_S8541C9);
    dp->~S8541C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8541C9(Test_S8541C9, "S8541C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8541C9C1Ev();
extern void _ZN7S8541C9D1Ev();
Name_Map name_map_S8541C9[] = {
  NSPAIR(_ZN7S8541C9C1Ev),
  NSPAIR(_ZN7S8541C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S8541C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8541C9[];
extern void _ZN7S8541C9D1Ev();
extern void _ZN7S8541C9D0Ev();
static  VTBL_ENTRY vtc_S8541C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8541C9[0]),
  (VTBL_ENTRY)&_ZN7S8541C9D1Ev,
  (VTBL_ENTRY)&_ZN7S8541C9D0Ev,
};
extern VTBL_ENTRY _ZTI7S8541C9[];
extern  VTBL_ENTRY _ZTV7S8541C9[];
Class_Descriptor cd_S8541C9 = {  "S8541C9", // class name
  bases_S8541C9, 1,
  &(vtc_S8541C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8541C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8541C9),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  S8541C1  : S8541C2 , S8541C3 , S8541C8 {
  ::S8541C9 s8541c1f0;
  virtual  ~S8541C1(); // _ZN7S8541C1D1Ev
  virtual void  v1(); // _ZN7S8541C12v1Ev
  virtual void  v2(); // _ZN7S8541C12v2Ev
  virtual void  v3(); // _ZN7S8541C12v3Ev
  virtual void  v4(); // _ZN7S8541C12v4Ev
  virtual void  v5(); // _ZN7S8541C12v5Ev
  virtual void  v6(); // _ZN7S8541C12v6Ev
  virtual void  v7(); // _ZN7S8541C12v7Ev
  virtual void  v8(); // _ZN7S8541C12v8Ev
  virtual void  v9(); // _ZN7S8541C12v9Ev
  S8541C1(); // tgen
};
//SIG(1 S8541C1) C1{ BC2{ vd v10} BC3{ BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC8{ vd v22} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC9{ BC10{ vd m Fp} vd Fp}}


 S8541C1 ::~S8541C1(){ note_dtor("S8541C1", this);}
void  S8541C1 ::v1(){vfunc_called(this, "_ZN7S8541C12v1Ev");}
void  S8541C1 ::v2(){vfunc_called(this, "_ZN7S8541C12v2Ev");}
void  S8541C1 ::v3(){vfunc_called(this, "_ZN7S8541C12v3Ev");}
void  S8541C1 ::v4(){vfunc_called(this, "_ZN7S8541C12v4Ev");}
void  S8541C1 ::v5(){vfunc_called(this, "_ZN7S8541C12v5Ev");}
void  S8541C1 ::v6(){vfunc_called(this, "_ZN7S8541C12v6Ev");}
void  S8541C1 ::v7(){vfunc_called(this, "_ZN7S8541C12v7Ev");}
void  S8541C1 ::v8(){vfunc_called(this, "_ZN7S8541C12v8Ev");}
void  S8541C1 ::v9(){vfunc_called(this, "_ZN7S8541C12v9Ev");}
S8541C1 ::S8541C1(){ note_ctor("S8541C1", this);} // tgen

static void Test_S8541C1()
{
  extern Class_Descriptor cd_S8541C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S8541C1, buf);
    S8541C1 *dp, &lv = *(dp=new (buf) S8541C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S8541C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8541C1)");
    check_base_class_offset(lv, (S8541C2*), 0, "S8541C1");
    check_base_class_offset(lv, (S7368C49*)(S8541C3*), ABISELECT(8,4), "S8541C1");
    check_base_class_offset(lv, (S8541C3*), ABISELECT(8,4), "S8541C1");
    check_base_class_offset(lv, (S8541C8*), ABISELECT(104,68), "S8541C1");
    check_field_offset(lv, s8541c1f0, ABISELECT(112,72), "S8541C1.s8541c1f0");
    test_class_info(&lv, &cd_S8541C1);
    dp->~S8541C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8541C1(Test_S8541C1, "S8541C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S8541C1C1Ev();
extern void _ZN7S8541C1D1Ev();
Name_Map name_map_S8541C1[] = {
  NSPAIR(_ZN7S8541C1C1Ev),
  NSPAIR(_ZN7S8541C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8541C2;
extern VTBL_ENTRY _ZTI7S8541C2[];
extern  VTBL_ENTRY _ZTV7S8541C2[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S8541C3;
extern VTBL_ENTRY _ZTI7S8541C3[];
extern  VTBL_ENTRY _ZTV7S8541C3[];
extern Class_Descriptor cd_S8541C8;
extern VTBL_ENTRY _ZTI7S8541C8[];
extern  VTBL_ENTRY _ZTV7S8541C8[];
static Base_Class bases_S8541C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8541C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S8541C3,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8541C8,    ABISELECT(104,68), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8541C1[];
extern void _ZN7S8541C1D1Ev();
extern void _ZN7S8541C1D0Ev();
extern void _ZN7S8541C23v10Ev();
extern void _ZN7S8541C12v1Ev();
extern void _ZN7S8541C12v2Ev();
extern void _ZN7S8541C12v3Ev();
extern void _ZN7S8541C12v4Ev();
extern void _ZN7S8541C12v5Ev();
extern void _ZN7S8541C12v6Ev();
extern void _ZN7S8541C12v7Ev();
extern void _ZN7S8541C12v8Ev();
extern void _ZN7S8541C12v9Ev();
extern void ABISELECT(_ZThn8_N7S8541C1D1Ev,_ZThn4_N7S8541C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8541C1D0Ev,_ZThn4_N7S8541C1D0Ev)();
extern void _ZN7S8541C33v11Ev();
extern void _ZN7S8541C33v12Ev();
extern void _ZN7S8541C33v13Ev();
extern void _ZN7S8541C33v14Ev();
extern void _ZN7S8541C33v15Ev();
extern void _ZN7S8541C33v16Ev();
extern void _ZN7S8541C33v17Ev();
extern void _ZN7S8541C33v18Ev();
extern void _ZN7S8541C33v19Ev();
extern void _ZN7S8541C33v20Ev();
extern void _ZN7S8541C33v21Ev();
extern void ABISELECT(_ZThn104_N7S8541C1D1Ev,_ZThn68_N7S8541C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S8541C1D0Ev,_ZThn68_N7S8541C1D0Ev)();
extern void _ZN7S8541C83v22Ev();
static  VTBL_ENTRY vtc_S8541C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8541C1[0]),
  (VTBL_ENTRY)&_ZN7S8541C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8541C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8541C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8541C12v9Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8541C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8541C1D1Ev,_ZThn4_N7S8541C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8541C1D0Ev,_ZThn4_N7S8541C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8541C33v11Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v12Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v13Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v14Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v15Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v16Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v17Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v18Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v19Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v20Ev,
  (VTBL_ENTRY)&_ZN7S8541C33v21Ev,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S8541C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S8541C1D1Ev,_ZThn68_N7S8541C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S8541C1D0Ev,_ZThn68_N7S8541C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8541C83v22Ev,
};
extern VTBL_ENTRY _ZTI7S8541C1[];
extern  VTBL_ENTRY _ZTV7S8541C1[];
Class_Descriptor cd_S8541C1 = {  "S8541C1", // class name
  bases_S8541C1, 4,
  &(vtc_S8541C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S8541C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8541C1),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  S3658C2  : S7368C49 {
  void *s3658c2f0;
  ::S10256C12_nt s3658c2f1;
  virtual  ~S3658C2(); // _ZN7S3658C2D1Ev
  virtual void  v8(); // _ZN7S3658C22v8Ev
  virtual void  v9(); // _ZN7S3658C22v9Ev
  virtual void  v10(); // _ZN7S3658C23v10Ev
  virtual void  v11(); // _ZN7S3658C23v11Ev
  virtual void  v12(); // _ZN7S3658C23v12Ev
  virtual void  v13(); // _ZN7S3658C23v13Ev
  virtual void  v14(); // _ZN7S3658C23v14Ev
  virtual void  v15(); // _ZN7S3658C23v15Ev
  virtual void  v16(); // _ZN7S3658C23v16Ev
  virtual void  v17(); // _ZN7S3658C23v17Ev
  virtual void  v18(); // _ZN7S3658C23v18Ev
  S3658C2(); // tgen
};
//SIG(-1 S3658C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S3658C2 ::~S3658C2(){ note_dtor("S3658C2", this);}
void  S3658C2 ::v8(){vfunc_called(this, "_ZN7S3658C22v8Ev");}
void  S3658C2 ::v9(){vfunc_called(this, "_ZN7S3658C22v9Ev");}
void  S3658C2 ::v10(){vfunc_called(this, "_ZN7S3658C23v10Ev");}
void  S3658C2 ::v11(){vfunc_called(this, "_ZN7S3658C23v11Ev");}
void  S3658C2 ::v12(){vfunc_called(this, "_ZN7S3658C23v12Ev");}
void  S3658C2 ::v13(){vfunc_called(this, "_ZN7S3658C23v13Ev");}
void  S3658C2 ::v14(){vfunc_called(this, "_ZN7S3658C23v14Ev");}
void  S3658C2 ::v15(){vfunc_called(this, "_ZN7S3658C23v15Ev");}
void  S3658C2 ::v16(){vfunc_called(this, "_ZN7S3658C23v16Ev");}
void  S3658C2 ::v17(){vfunc_called(this, "_ZN7S3658C23v17Ev");}
void  S3658C2 ::v18(){vfunc_called(this, "_ZN7S3658C23v18Ev");}
S3658C2 ::S3658C2(){ note_ctor("S3658C2", this);} // tgen

static void Test_S3658C2()
{
  extern Class_Descriptor cd_S3658C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S3658C2, buf);
    S3658C2 *dp, &lv = *(dp=new (buf) S3658C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S3658C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3658C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3658C2");
    check_field_offset(lv, s3658c2f0, ABISELECT(32,20), "S3658C2.s3658c2f0");
    check_field_offset(lv, s3658c2f1, ABISELECT(40,24), "S3658C2.s3658c2f1");
    test_class_info(&lv, &cd_S3658C2);
    dp->~S3658C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3658C2(Test_S3658C2, "S3658C2", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S3658C2C1Ev();
extern void _ZN7S3658C2D1Ev();
Name_Map name_map_S3658C2[] = {
  NSPAIR(_ZN7S3658C2C1Ev),
  NSPAIR(_ZN7S3658C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3658C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3658C2[];
extern void _ZN7S3658C2D1Ev();
extern void _ZN7S3658C2D0Ev();
extern void _ZN7S3658C22v8Ev();
extern void _ZN7S3658C22v9Ev();
extern void _ZN7S3658C23v10Ev();
extern void _ZN7S3658C23v11Ev();
extern void _ZN7S3658C23v12Ev();
extern void _ZN7S3658C23v13Ev();
extern void _ZN7S3658C23v14Ev();
extern void _ZN7S3658C23v15Ev();
extern void _ZN7S3658C23v16Ev();
extern void _ZN7S3658C23v17Ev();
extern void _ZN7S3658C23v18Ev();
static  VTBL_ENTRY vtc_S3658C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3658C2[0]),
  (VTBL_ENTRY)&_ZN7S3658C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3658C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3658C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3658C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S3658C2[];
extern  VTBL_ENTRY _ZTV7S3658C2[];
Class_Descriptor cd_S3658C2 = {  "S3658C2", // class name
  bases_S3658C2, 1,
  &(vtc_S3658C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S3658C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3658C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3658C7  {
  virtual  ~S3658C7(); // _ZN7S3658C7D1Ev
  virtual void  v19(); // _ZN7S3658C73v19Ev
  S3658C7(); // tgen
};
//SIG(-1 S3658C7) C1{ vd v1}


 S3658C7 ::~S3658C7(){ note_dtor("S3658C7", this);}
void  S3658C7 ::v19(){vfunc_called(this, "_ZN7S3658C73v19Ev");}
S3658C7 ::S3658C7(){ note_ctor("S3658C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3658C7C1Ev();
extern void _ZN7S3658C7D1Ev();
Name_Map name_map_S3658C7[] = {
  NSPAIR(_ZN7S3658C7C1Ev),
  NSPAIR(_ZN7S3658C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3658C7[];
extern void _ZN7S3658C7D1Ev();
extern void _ZN7S3658C7D0Ev();
extern void _ZN7S3658C73v19Ev();
static  VTBL_ENTRY vtc_S3658C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3658C7[0]),
  (VTBL_ENTRY)&_ZN7S3658C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3658C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3658C73v19Ev,
};
extern VTBL_ENTRY _ZTI7S3658C7[];
extern  VTBL_ENTRY _ZTV7S3658C7[];
Class_Descriptor cd_S3658C7 = {  "S3658C7", // class name
  0,0,//no base classes
  &(vtc_S3658C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3658C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3658C7),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  S3658C8  {
  virtual  ~S3658C8(); // _ZN7S3658C8D1Ev
  virtual void  v20(); // _ZN7S3658C83v20Ev
  S3658C8(); // tgen
};
//SIG(-1 S3658C8) C1{ vd v1}


 S3658C8 ::~S3658C8(){ note_dtor("S3658C8", this);}
void  S3658C8 ::v20(){vfunc_called(this, "_ZN7S3658C83v20Ev");}
S3658C8 ::S3658C8(){ note_ctor("S3658C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3658C8C1Ev();
extern void _ZN7S3658C8D1Ev();
Name_Map name_map_S3658C8[] = {
  NSPAIR(_ZN7S3658C8C1Ev),
  NSPAIR(_ZN7S3658C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3658C8[];
extern void _ZN7S3658C8D1Ev();
extern void _ZN7S3658C8D0Ev();
extern void _ZN7S3658C83v20Ev();
static  VTBL_ENTRY vtc_S3658C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3658C8[0]),
  (VTBL_ENTRY)&_ZN7S3658C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3658C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3658C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S3658C8[];
extern  VTBL_ENTRY _ZTV7S3658C8[];
Class_Descriptor cd_S3658C8 = {  "S3658C8", // class name
  0,0,//no base classes
  &(vtc_S3658C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3658C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3658C8),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  S3658C1  : S3658C2 , S3658C7 , S3658C8 {
  char s3658c1f0;
  int s3658c1f1;
  ::S7368C72_nt s3658c1f2;
  int s3658c1f3;
  char s3658c1f4;
  virtual  ~S3658C1(); // _ZN7S3658C1D1Ev
  virtual void  v1(); // _ZN7S3658C12v1Ev
  virtual void  v2(); // _ZN7S3658C12v2Ev
  virtual void  v3(); // _ZN7S3658C12v3Ev
  virtual void  v4(); // _ZN7S3658C12v4Ev
  virtual void  v5(); // _ZN7S3658C12v5Ev
  virtual void  v6(); // _ZN7S3658C12v6Ev
  virtual void  v7(); // _ZN7S3658C12v7Ev
  S3658C1(); // tgen
};
//SIG(1 S3658C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC7{ vd v19} BC8{ vd v20} vd v1 v2 v3 v4 v5 v6 v7 Fc Fi FC9{ vd m Fi[2]} Fi Fc}


 S3658C1 ::~S3658C1(){ note_dtor("S3658C1", this);}
void  S3658C1 ::v1(){vfunc_called(this, "_ZN7S3658C12v1Ev");}
void  S3658C1 ::v2(){vfunc_called(this, "_ZN7S3658C12v2Ev");}
void  S3658C1 ::v3(){vfunc_called(this, "_ZN7S3658C12v3Ev");}
void  S3658C1 ::v4(){vfunc_called(this, "_ZN7S3658C12v4Ev");}
void  S3658C1 ::v5(){vfunc_called(this, "_ZN7S3658C12v5Ev");}
void  S3658C1 ::v6(){vfunc_called(this, "_ZN7S3658C12v6Ev");}
void  S3658C1 ::v7(){vfunc_called(this, "_ZN7S3658C12v7Ev");}
S3658C1 ::S3658C1(){ note_ctor("S3658C1", this);} // tgen

static void Test_S3658C1()
{
  extern Class_Descriptor cd_S3658C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,26)];
    init_test(&cd_S3658C1, buf);
    S3658C1 *dp, &lv = *(dp=new (buf) S3658C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S3658C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3658C1)");
    check_base_class_offset(lv, (S7368C49*)(S3658C2*), 0, "S3658C1");
    check_base_class_offset(lv, (S3658C2*), 0, "S3658C1");
    check_base_class_offset(lv, (S3658C7*), ABISELECT(96,64), "S3658C1");
    check_base_class_offset(lv, (S3658C8*), ABISELECT(104,68), "S3658C1");
    check_field_offset(lv, s3658c1f0, ABISELECT(112,72), "S3658C1.s3658c1f0");
    check_field_offset(lv, s3658c1f1, ABISELECT(116,76), "S3658C1.s3658c1f1");
    check_field_offset(lv, s3658c1f2, ABISELECT(120,80), "S3658C1.s3658c1f2");
    check_field_offset(lv, s3658c1f3, ABISELECT(136,92), "S3658C1.s3658c1f3");
    check_field_offset(lv, s3658c1f4, ABISELECT(140,96), "S3658C1.s3658c1f4");
    test_class_info(&lv, &cd_S3658C1);
    dp->~S3658C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3658C1(Test_S3658C1, "S3658C1", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN7S3658C1C1Ev();
extern void _ZN7S3658C1D1Ev();
Name_Map name_map_S3658C1[] = {
  NSPAIR(_ZN7S3658C1C1Ev),
  NSPAIR(_ZN7S3658C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3658C2;
extern VTBL_ENTRY _ZTI7S3658C2[];
extern  VTBL_ENTRY _ZTV7S3658C2[];
extern Class_Descriptor cd_S3658C7;
extern VTBL_ENTRY _ZTI7S3658C7[];
extern  VTBL_ENTRY _ZTV7S3658C7[];
extern Class_Descriptor cd_S3658C8;
extern VTBL_ENTRY _ZTI7S3658C8[];
extern  VTBL_ENTRY _ZTV7S3658C8[];
static Base_Class bases_S3658C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3658C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3658C7,    ABISELECT(96,64), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3658C8,    ABISELECT(104,68), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3658C1[];
extern void _ZN7S3658C1D1Ev();
extern void _ZN7S3658C1D0Ev();
extern void _ZN7S3658C22v8Ev();
extern void _ZN7S3658C22v9Ev();
extern void _ZN7S3658C23v10Ev();
extern void _ZN7S3658C23v11Ev();
extern void _ZN7S3658C23v12Ev();
extern void _ZN7S3658C23v13Ev();
extern void _ZN7S3658C23v14Ev();
extern void _ZN7S3658C23v15Ev();
extern void _ZN7S3658C23v16Ev();
extern void _ZN7S3658C23v17Ev();
extern void _ZN7S3658C23v18Ev();
extern void _ZN7S3658C12v1Ev();
extern void _ZN7S3658C12v2Ev();
extern void _ZN7S3658C12v3Ev();
extern void _ZN7S3658C12v4Ev();
extern void _ZN7S3658C12v5Ev();
extern void _ZN7S3658C12v6Ev();
extern void _ZN7S3658C12v7Ev();
extern void ABISELECT(_ZThn96_N7S3658C1D1Ev,_ZThn64_N7S3658C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S3658C1D0Ev,_ZThn64_N7S3658C1D0Ev)();
extern void _ZN7S3658C73v19Ev();
extern void ABISELECT(_ZThn104_N7S3658C1D1Ev,_ZThn68_N7S3658C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S3658C1D0Ev,_ZThn68_N7S3658C1D0Ev)();
extern void _ZN7S3658C83v20Ev();
static  VTBL_ENTRY vtc_S3658C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3658C1[0]),
  (VTBL_ENTRY)&_ZN7S3658C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3658C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3658C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3658C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3658C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3658C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3658C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3658C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3658C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3658C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3658C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3658C12v7Ev,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S3658C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3658C1D1Ev,_ZThn64_N7S3658C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3658C1D0Ev,_ZThn64_N7S3658C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3658C73v19Ev,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3658C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S3658C1D1Ev,_ZThn68_N7S3658C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S3658C1D0Ev,_ZThn68_N7S3658C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3658C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S3658C1[];
extern  VTBL_ENTRY _ZTV7S3658C1[];
Class_Descriptor cd_S3658C1 = {  "S3658C1", // class name
  bases_S3658C1, 4,
  &(vtc_S3658C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI7S3658C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3658C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4470C3  {
  int s4470c3f0[4];
  ::S4464C4_nt s4470c3f1;
  int s4470c3f2;
  char s4470c3f3;
  ::S7368C72_nt s4470c3f4;
  int s4470c3f5;
  virtual  ~S4470C3(); // _ZN7S4470C3D1Ev
  virtual void  v2(); // _ZN7S4470C32v2Ev
  virtual void  v3(); // _ZN7S4470C32v3Ev
  virtual void  v4(); // _ZN7S4470C32v4Ev
  S4470C3(); // tgen
};
//SIG(-1 S4470C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4470C3 ::~S4470C3(){ note_dtor("S4470C3", this);}
void  S4470C3 ::v2(){vfunc_called(this, "_ZN7S4470C32v2Ev");}
void  S4470C3 ::v3(){vfunc_called(this, "_ZN7S4470C32v3Ev");}
void  S4470C3 ::v4(){vfunc_called(this, "_ZN7S4470C32v4Ev");}
S4470C3 ::S4470C3(){ note_ctor("S4470C3", this);} // tgen

static void Test_S4470C3()
{
  extern Class_Descriptor cd_S4470C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4470C3, buf);
    S4470C3 *dp, &lv = *(dp=new (buf) S4470C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4470C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4470C3)");
    check_field_offset(lv, s4470c3f0, ABISELECT(8,4), "S4470C3.s4470c3f0");
    check_field_offset(lv, s4470c3f1, ABISELECT(24,20), "S4470C3.s4470c3f1");
    check_field_offset(lv, s4470c3f2, ABISELECT(40,28), "S4470C3.s4470c3f2");
    check_field_offset(lv, s4470c3f3, ABISELECT(44,32), "S4470C3.s4470c3f3");
    check_field_offset(lv, s4470c3f4, ABISELECT(48,36), "S4470C3.s4470c3f4");
    check_field_offset(lv, s4470c3f5, ABISELECT(64,48), "S4470C3.s4470c3f5");
    test_class_info(&lv, &cd_S4470C3);
    dp->~S4470C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4470C3(Test_S4470C3, "S4470C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4470C3C1Ev();
extern void _ZN7S4470C3D1Ev();
Name_Map name_map_S4470C3[] = {
  NSPAIR(_ZN7S4470C3C1Ev),
  NSPAIR(_ZN7S4470C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4470C3[];
extern void _ZN7S4470C3D1Ev();
extern void _ZN7S4470C3D0Ev();
extern void _ZN7S4470C32v2Ev();
extern void _ZN7S4470C32v3Ev();
extern void _ZN7S4470C32v4Ev();
static  VTBL_ENTRY vtc_S4470C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4470C3[0]),
  (VTBL_ENTRY)&_ZN7S4470C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4470C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4470C3[];
extern  VTBL_ENTRY _ZTV7S4470C3[];
Class_Descriptor cd_S4470C3 = {  "S4470C3", // class name
  0,0,//no base classes
  &(vtc_S4470C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4470C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4470C3),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  S4470C2  : S4470C3 {
  virtual  ~S4470C2(); // _ZN7S4470C2D1Ev
  virtual void  v5(); // _ZN7S4470C22v5Ev
  S4470C2(); // tgen
};
//SIG(-1 S4470C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


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

static void Test_S4470C2()
{
  extern Class_Descriptor cd_S4470C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4470C2, buf);
    S4470C2 *dp, &lv = *(dp=new (buf) S4470C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4470C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4470C2)");
    check_base_class_offset(lv, (S4470C3*), 0, "S4470C2");
    test_class_info(&lv, &cd_S4470C2);
    dp->~S4470C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4470C2(Test_S4470C2, "S4470C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4470C2C1Ev();
extern void _ZN7S4470C2D1Ev();
Name_Map name_map_S4470C2[] = {
  NSPAIR(_ZN7S4470C2C1Ev),
  NSPAIR(_ZN7S4470C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4470C3;
extern VTBL_ENTRY _ZTI7S4470C3[];
extern  VTBL_ENTRY _ZTV7S4470C3[];
static Base_Class bases_S4470C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4470C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4470C2[];
extern void _ZN7S4470C2D1Ev();
extern void _ZN7S4470C2D0Ev();
extern void _ZN7S4470C32v2Ev();
extern void _ZN7S4470C32v3Ev();
extern void _ZN7S4470C32v4Ev();
extern void _ZN7S4470C22v5Ev();
static  VTBL_ENTRY vtc_S4470C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4470C2[0]),
  (VTBL_ENTRY)&_ZN7S4470C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4470C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4470C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4470C2[];
extern  VTBL_ENTRY _ZTV7S4470C2[];
Class_Descriptor cd_S4470C2 = {  "S4470C2", // class name
  bases_S4470C2, 1,
  &(vtc_S4470C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4470C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4470C2),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  S4470C6  {
  int s4470c6f0[3];
  ::S4464C12_nt s4470c6f1;
  ::S4464C12_nt s4470c6f2;
  ::S7368C47 s4470c6f3;
  void *s4470c6f4[2];
  void  mf4470c6(); // _ZN7S4470C68mf4470c6Ev
  virtual  ~S4470C6(); // _ZN7S4470C6D1Ev
  S4470C6(); // tgen
};
//SIG(-1 S4470C6) C1{ vd m Fi[3] FC2{ m FC3{ vd m FL Fc} FC3} FC2 FC4{ vd m FC5{ m Fp Fi FC6{ m}}} Fp[2]}


void  S4470C6 ::mf4470c6(){}
 S4470C6 ::~S4470C6(){ note_dtor("S4470C6", this);}
S4470C6 ::S4470C6(){ note_ctor("S4470C6", this);} // tgen

static void Test_S4470C6()
{
  extern Class_Descriptor cd_S4470C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,27)];
    init_test(&cd_S4470C6, buf);
    S4470C6 *dp, &lv = *(dp=new (buf) S4470C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,104), "sizeof(S4470C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4470C6)");
    check_field_offset(lv, s4470c6f0, ABISELECT(8,4), "S4470C6.s4470c6f0");
    check_field_offset(lv, s4470c6f1, ABISELECT(24,16), "S4470C6.s4470c6f1");
    check_field_offset(lv, s4470c6f2, ABISELECT(72,48), "S4470C6.s4470c6f2");
    check_field_offset(lv, s4470c6f3, ABISELECT(120,80), "S4470C6.s4470c6f3");
    check_field_offset(lv, s4470c6f4, ABISELECT(144,96), "S4470C6.s4470c6f4");
    test_class_info(&lv, &cd_S4470C6);
    dp->~S4470C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4470C6(Test_S4470C6, "S4470C6", ABISELECT(160,104));

#else // __cplusplus

extern void _ZN7S4470C6C1Ev();
extern void _ZN7S4470C6D1Ev();
Name_Map name_map_S4470C6[] = {
  NSPAIR(_ZN7S4470C6C1Ev),
  NSPAIR(_ZN7S4470C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4470C6[];
extern void _ZN7S4470C6D1Ev();
extern void _ZN7S4470C6D0Ev();
static  VTBL_ENTRY vtc_S4470C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4470C6[0]),
  (VTBL_ENTRY)&_ZN7S4470C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4470C6D0Ev,
};
extern VTBL_ENTRY _ZTI7S4470C6[];
extern  VTBL_ENTRY _ZTV7S4470C6[];
Class_Descriptor cd_S4470C6 = {  "S4470C6", // class name
  0,0,//no base classes
  &(vtc_S4470C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,104), // object size
  NSPAIRA(_ZTI7S4470C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4470C6),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  S4470C1  : S4470C2 {
  ::S4470C6 s4470c1f0;
  void *s4470c1f1;
  virtual  ~S4470C1(); // _ZN7S4470C1D1Ev
  virtual void  v1(); // _ZN7S4470C12v1Ev
  S4470C1(); // tgen
};
//SIG(1 S4470C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m Fi[3] FC7{ m FC8{ vd m FL Fc} FC8} FC7 FC9{ vd m FC10{ m Fp Fi FC11{ m}}} Fp[2]} Fp}


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

static void Test_S4470C1()
{
  extern Class_Descriptor cd_S4470C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S4470C1, buf);
    S4470C1 *dp, &lv = *(dp=new (buf) S4470C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S4470C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4470C1)");
    check_base_class_offset(lv, (S4470C3*)(S4470C2*), 0, "S4470C1");
    check_base_class_offset(lv, (S4470C2*), 0, "S4470C1");
    check_field_offset(lv, s4470c1f0, ABISELECT(72,52), "S4470C1.s4470c1f0");
    check_field_offset(lv, s4470c1f1, ABISELECT(232,156), "S4470C1.s4470c1f1");
    test_class_info(&lv, &cd_S4470C1);
    dp->~S4470C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4470C1(Test_S4470C1, "S4470C1", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S4470C1C1Ev();
extern void _ZN7S4470C1D1Ev();
Name_Map name_map_S4470C1[] = {
  NSPAIR(_ZN7S4470C1C1Ev),
  NSPAIR(_ZN7S4470C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4470C3;
extern VTBL_ENTRY _ZTI7S4470C3[];
extern  VTBL_ENTRY _ZTV7S4470C3[];
extern Class_Descriptor cd_S4470C2;
extern VTBL_ENTRY _ZTI7S4470C2[];
extern  VTBL_ENTRY _ZTV7S4470C2[];
static Base_Class bases_S4470C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4470C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4470C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4470C1[];
extern void _ZN7S4470C1D1Ev();
extern void _ZN7S4470C1D0Ev();
extern void _ZN7S4470C32v2Ev();
extern void _ZN7S4470C32v3Ev();
extern void _ZN7S4470C32v4Ev();
extern void _ZN7S4470C22v5Ev();
extern void _ZN7S4470C12v1Ev();
static  VTBL_ENTRY vtc_S4470C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4470C1[0]),
  (VTBL_ENTRY)&_ZN7S4470C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4470C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4470C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4470C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4470C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4470C1[];
extern  VTBL_ENTRY _ZTV7S4470C1[];
Class_Descriptor cd_S4470C1 = {  "S4470C1", // class name
  bases_S4470C1, 2,
  &(vtc_S4470C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S4470C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4470C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7649C3  {
  void *s7649c3f0;
  virtual void  v7(); // _ZN7S7649C32v7Ev
  virtual void  v8(); // _ZN7S7649C32v8Ev
  ~S7649C3(); // tgen
  S7649C3(); // tgen
};
//SIG(-1 S7649C3) C1{ v1 v2 Fp}


void  S7649C3 ::v7(){vfunc_called(this, "_ZN7S7649C32v7Ev");}
void  S7649C3 ::v8(){vfunc_called(this, "_ZN7S7649C32v8Ev");}
S7649C3 ::~S7649C3(){ note_dtor("S7649C3", this);} // tgen
S7649C3 ::S7649C3(){ note_ctor("S7649C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7649C3C1Ev();
extern void _ZN7S7649C3D1Ev();
Name_Map name_map_S7649C3[] = {
  NSPAIR(_ZN7S7649C3C1Ev),
  NSPAIR(_ZN7S7649C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7649C3[];
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY vtc_S7649C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C3[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S7649C3[];
extern  VTBL_ENTRY _ZTV7S7649C3[];
Class_Descriptor cd_S7649C3 = {  "S7649C3", // class name
  0,0,//no base classes
  &(vtc_S7649C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7649C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7649C3),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  S7649C4  : virtual S7649C3 {
  void *s7649c4f0;
  virtual  ~S7649C4(); // _ZN7S7649C4D2Ev
  virtual void  v9(); // _ZN7S7649C42v9Ev
  virtual void  v10(); // _ZN7S7649C43v10Ev
  S7649C4(); // tgen
};
//SIG(-1 S7649C4) C1{ VBC2{ v3 v4 Fp} vd v1 v2 Fp}


 S7649C4 ::~S7649C4(){ note_dtor("S7649C4", this);}
void  S7649C4 ::v9(){vfunc_called(this, "_ZN7S7649C42v9Ev");}
void  S7649C4 ::v10(){vfunc_called(this, "_ZN7S7649C43v10Ev");}
S7649C4 ::S7649C4(){ note_ctor("S7649C4", this);} // tgen

static void Test_S7649C4()
{
  extern Class_Descriptor cd_S7649C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7649C4, buf);
    S7649C4 *dp, &lv = *(dp=new (buf) S7649C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7649C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7649C4)");
    check_base_class_offset(lv, (S7649C3*), ABISELECT(16,8), "S7649C4");
    check_field_offset(lv, s7649c4f0, ABISELECT(8,4), "S7649C4.s7649c4f0");
    test_class_info(&lv, &cd_S7649C4);
    dp->~S7649C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7649C4(Test_S7649C4, "S7649C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7649C4C1Ev();
extern void _ZN7S7649C4D2Ev();
Name_Map name_map_S7649C4[] = {
  NSPAIR(_ZN7S7649C4C1Ev),
  NSPAIR(_ZN7S7649C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7649C3;
extern VTBL_ENTRY _ZTI7S7649C3[];
extern  VTBL_ENTRY _ZTV7S7649C3[];
static Base_Class bases_S7649C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7649C3,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7649C4[];
extern void _ZN7S7649C4D1Ev();
extern void _ZN7S7649C4D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY vtc_S7649C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S7649C4[];
static  VTT_ENTRY vtt_S7649C4[] = {
  {&(_ZTV7S7649C4[3]),  3,13},
  {&(_ZTV7S7649C4[11]),  11,13},
};
extern VTBL_ENTRY _ZTI7S7649C4[];
extern  VTBL_ENTRY _ZTV7S7649C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C4[];
Class_Descriptor cd_S7649C4 = {  "S7649C4", // class name
  bases_S7649C4, 1,
  &(vtc_S7649C4[0]), // expected_vtbl_contents
  &(vtt_S7649C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7649C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7649C4),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7649C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7649C5  {
  virtual void  v11(); // _ZN7S7649C53v11Ev
  ~S7649C5(); // tgen
  S7649C5(); // tgen
};
//SIG(-1 S7649C5) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S7649C5C1Ev();
extern void _ZN7S7649C5D1Ev();
Name_Map name_map_S7649C5[] = {
  NSPAIR(_ZN7S7649C5C1Ev),
  NSPAIR(_ZN7S7649C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7649C5[];
extern void _ZN7S7649C53v11Ev();
static  VTBL_ENTRY vtc_S7649C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C5[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
};
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
Class_Descriptor cd_S7649C5 = {  "S7649C5", // class name
  0,0,//no base classes
  &(vtc_S7649C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7649C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7649C5),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  S7649C2  : virtual S7649C3 , S7649C4 , S7649C5 {
  __tsi64 s7649c2f0;
  int s7649c2f1;
  void *s7649c2f2[8];
  int s7649c2f3[2];
  long double s7649c2f4;
  int s7649c2f5;
  virtual  ~S7649C2(); // _ZN7S7649C2D2Ev
  virtual void  v12(); // _ZN7S7649C23v12Ev
  virtual void  v13(); // _ZN7S7649C23v13Ev
  virtual void  v14(); // _ZN7S7649C23v14Ev
  S7649C2(); // tgen
};
//SIG(-1 S7649C2) C1{ VBC2{ v4 v5 Fp} BC3{ VBC2 vd v6 v7 Fp} BC4{ v8} vd v1 v2 v3 FL Fi Fp[8] Fi[2] FD Fi}


 S7649C2 ::~S7649C2(){ note_dtor("S7649C2", this);}
void  S7649C2 ::v12(){vfunc_called(this, "_ZN7S7649C23v12Ev");}
void  S7649C2 ::v13(){vfunc_called(this, "_ZN7S7649C23v13Ev");}
void  S7649C2 ::v14(){vfunc_called(this, "_ZN7S7649C23v14Ev");}
S7649C2 ::S7649C2(){ note_ctor("S7649C2", this);} // tgen

static void Test_S7649C2()
{
  extern Class_Descriptor cd_S7649C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,23)];
    init_test(&cd_S7649C2, buf);
    S7649C2 *dp, &lv = *(dp=new (buf) S7649C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S7649C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7649C2)");
    check_base_class_offset(lv, (S7649C3*), ABISELECT(136,80), "S7649C2");
    check_base_class_offset(lv, (S7649C3*)(S7649C4*), ABISELECT(136,80), "S7649C2");
    check_base_class_offset(lv, (S7649C4*), 0, "S7649C2");
    check_base_class_offset(lv, (S7649C5*), ABISELECT(16,8), "S7649C2");
    check_field_offset(lv, s7649c2f0, ABISELECT(24,12), "S7649C2.s7649c2f0");
    check_field_offset(lv, s7649c2f1, ABISELECT(32,20), "S7649C2.s7649c2f1");
    check_field_offset(lv, s7649c2f2, ABISELECT(40,24), "S7649C2.s7649c2f2");
    check_field_offset(lv, s7649c2f3, ABISELECT(104,56), "S7649C2.s7649c2f3");
    check_field_offset(lv, s7649c2f4, ABISELECT(112,64), "S7649C2.s7649c2f4");
    check_field_offset(lv, s7649c2f5, ABISELECT(128,76), "S7649C2.s7649c2f5");
    test_class_info(&lv, &cd_S7649C2);
    dp->~S7649C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7649C2(Test_S7649C2, "S7649C2", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN7S7649C2C1Ev();
extern void _ZN7S7649C2D2Ev();
Name_Map name_map_S7649C2[] = {
  NSPAIR(_ZN7S7649C2C1Ev),
  NSPAIR(_ZN7S7649C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7649C3;
extern VTBL_ENTRY _ZTI7S7649C3[];
extern  VTBL_ENTRY _ZTV7S7649C3[];
extern Class_Descriptor cd_S7649C4;
extern VTBL_ENTRY _ZTI7S7649C4[];
extern  VTBL_ENTRY _ZTV7S7649C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C4[];
extern Class_Descriptor cd_S7649C5;
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
static Base_Class bases_S7649C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7649C3,    ABISELECT(136,80), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7649C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7649C5,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7649C2[];
extern void _ZN7S7649C2D1Ev();
extern void _ZN7S7649C2D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
extern void _ZN7S7649C53v11Ev();
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY vtc_S7649C2[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S7649C2[];
extern void _ZN7S7649C4D1Ev();
extern void _ZN7S7649C4D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C4__7S7649C2[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C4__7S7649C2[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
static  VTT_ENTRY vtt_S7649C2[] = {
  {&(_ZTV7S7649C2[3]),  3,19},
  {&(_tg__ZTV7S7649C4__7S7649C2[3]),  3,7},
  {&(_tg__ZTV7S7649C3__7S7649C4__7S7649C2[4]),  4,6},
  {&(_ZTV7S7649C2[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S7649C2[];
extern  VTBL_ENTRY _ZTV7S7649C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C2[];
Class_Descriptor cd_S7649C2 = {  "S7649C2", // class name
  bases_S7649C2, 3,
  &(vtc_S7649C2[0]), // expected_vtbl_contents
  &(vtt_S7649C2[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI7S7649C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7649C2),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7649C2),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7649C7  {
  void *s7649c7f0;
  char s7649c7f1;
  virtual void  v15(); // _ZN7S7649C73v15Ev
  virtual void  v16(); // _ZN7S7649C73v16Ev
  virtual void  v17(); // _ZN7S7649C73v17Ev
  virtual void  v18(); // _ZN7S7649C73v18Ev
  ~S7649C7(); // tgen
  S7649C7(); // tgen
};
//SIG(-1 S7649C7) C1{ v1 v2 v3 v4 Fp Fc}


void  S7649C7 ::v15(){vfunc_called(this, "_ZN7S7649C73v15Ev");}
void  S7649C7 ::v16(){vfunc_called(this, "_ZN7S7649C73v16Ev");}
void  S7649C7 ::v17(){vfunc_called(this, "_ZN7S7649C73v17Ev");}
void  S7649C7 ::v18(){vfunc_called(this, "_ZN7S7649C73v18Ev");}
S7649C7 ::~S7649C7(){ note_dtor("S7649C7", this);} // tgen
S7649C7 ::S7649C7(){ note_ctor("S7649C7", this);} // tgen

static void Test_S7649C7()
{
  extern Class_Descriptor cd_S7649C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7649C7, buf);
    S7649C7 *dp, &lv = *(dp=new (buf) S7649C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7649C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7649C7)");
    check_field_offset(lv, s7649c7f0, ABISELECT(8,4), "S7649C7.s7649c7f0");
    check_field_offset(lv, s7649c7f1, ABISELECT(16,8), "S7649C7.s7649c7f1");
    test_class_info(&lv, &cd_S7649C7);
    dp->~S7649C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7649C7(Test_S7649C7, "S7649C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7649C7C1Ev();
extern void _ZN7S7649C7D1Ev();
Name_Map name_map_S7649C7[] = {
  NSPAIR(_ZN7S7649C7C1Ev),
  NSPAIR(_ZN7S7649C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7649C7[];
extern void _ZN7S7649C73v15Ev();
extern void _ZN7S7649C73v16Ev();
extern void _ZN7S7649C73v17Ev();
extern void _ZN7S7649C73v18Ev();
static  VTBL_ENTRY vtc_S7649C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C7[0]),
  (VTBL_ENTRY)&_ZN7S7649C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v18Ev,
};
extern VTBL_ENTRY _ZTI7S7649C7[];
extern  VTBL_ENTRY _ZTV7S7649C7[];
Class_Descriptor cd_S7649C7 = {  "S7649C7", // class name
  0,0,//no base classes
  &(vtc_S7649C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7649C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7649C7),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  S7649C6  : virtual S7649C3 , S7649C2 , S7649C5 , virtual S7649C7 {
  long double s7649c6f0;
  virtual void  v19(); // _ZN7S7649C63v19Ev
  virtual void  v20(); // _ZN7S7649C63v20Ev
  virtual void  v21(); // _ZN7S7649C63v21Ev
  virtual void  v22(); // _ZN7S7649C63v22Ev
  virtual void  v23(); // _ZN7S7649C63v23Ev
  ~S7649C6(); // tgen
  S7649C6(); // tgen
};
//SIG(-1 S7649C6) C1{ VBC2{ v6 v7 Fp} BC3{ VBC2 BC4{ VBC2 vd v8 v9 Fp} BC5{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} BC5 VBC6{ v14 v15 v16 v17 Fp Fc} v1 v2 v3 v4 v5 FD}


void  S7649C6 ::v19(){vfunc_called(this, "_ZN7S7649C63v19Ev");}
void  S7649C6 ::v20(){vfunc_called(this, "_ZN7S7649C63v20Ev");}
void  S7649C6 ::v21(){vfunc_called(this, "_ZN7S7649C63v21Ev");}
void  S7649C6 ::v22(){vfunc_called(this, "_ZN7S7649C63v22Ev");}
void  S7649C6 ::v23(){vfunc_called(this, "_ZN7S7649C63v23Ev");}
S7649C6 ::~S7649C6(){ note_dtor("S7649C6", this);} // tgen
S7649C6 ::S7649C6(){ note_ctor("S7649C6", this);} // tgen

static void Test_S7649C6()
{
  extern Class_Descriptor cd_S7649C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,30)];
    init_test(&cd_S7649C6, buf);
    S7649C6 *dp, &lv = *(dp=new (buf) S7649C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,116), "sizeof(S7649C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7649C6)");
    check_base_class_offset(lv, (S7649C3*), ABISELECT(160,96), "S7649C6");
    check_base_class_offset(lv, (S7649C3*)(S7649C2*), ABISELECT(160,96), "S7649C6");
    check_base_class_offset(lv, (S7649C3*)(S7649C4*)(S7649C2*), ABISELECT(160,96), "S7649C6");
    check_base_class_offset(lv, (S7649C4*)(S7649C2*), 0, "S7649C6");
    check_base_class_offset(lv, (S7649C5*)(S7649C2*), ABISELECT(16,8), "S7649C6");
    check_base_class_offset(lv, (S7649C2*), 0, "S7649C6");
    /*is_ambiguous_... S7649C6::S7649C5 */ AMB_check_base_class_offset(lv, (S7649C5*), ABISELECT(136,80), "S7649C6");
    check_base_class_offset(lv, (S7649C7*), ABISELECT(176,104), "S7649C6");
    check_field_offset(lv, s7649c6f0, ABISELECT(144,84), "S7649C6.s7649c6f0");
    test_class_info(&lv, &cd_S7649C6);
    dp->~S7649C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7649C6(Test_S7649C6, "S7649C6", ABISELECT(208,116));

#else // __cplusplus

extern void _ZN7S7649C6C1Ev();
extern void _ZN7S7649C6D1Ev();
Name_Map name_map_S7649C6[] = {
  NSPAIR(_ZN7S7649C6C1Ev),
  NSPAIR(_ZN7S7649C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7649C3;
extern VTBL_ENTRY _ZTI7S7649C3[];
extern  VTBL_ENTRY _ZTV7S7649C3[];
extern Class_Descriptor cd_S7649C4;
extern VTBL_ENTRY _ZTI7S7649C4[];
extern  VTBL_ENTRY _ZTV7S7649C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C4[];
extern Class_Descriptor cd_S7649C5;
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
extern Class_Descriptor cd_S7649C2;
extern VTBL_ENTRY _ZTI7S7649C2[];
extern  VTBL_ENTRY _ZTV7S7649C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C2[];
extern Class_Descriptor cd_S7649C5;
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
extern Class_Descriptor cd_S7649C7;
extern VTBL_ENTRY _ZTI7S7649C7[];
extern  VTBL_ENTRY _ZTV7S7649C7[];
static Base_Class bases_S7649C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7649C3,    ABISELECT(160,96), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //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_S7649C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7649C5,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7649C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7649C5,    ABISELECT(136,80), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7649C7,    ABISELECT(176,104), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7649C6[];
extern void _ZN7S7649C6D1Ev();
extern void _ZN7S7649C6D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
extern void _ZN7S7649C63v19Ev();
extern void _ZN7S7649C63v20Ev();
extern void _ZN7S7649C63v21Ev();
extern void _ZN7S7649C63v22Ev();
extern void _ZN7S7649C63v23Ev();
extern void _ZN7S7649C53v11Ev();
extern void _ZN7S7649C53v11Ev();
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
extern void _ZN7S7649C73v15Ev();
extern void _ZN7S7649C73v16Ev();
extern void _ZN7S7649C73v17Ev();
extern void _ZN7S7649C73v18Ev();
static  VTBL_ENTRY vtc_S7649C6[] = {
  ABISELECT(176,104),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v23Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v18Ev,
};
extern VTBL_ENTRY _ZTV7S7649C6[];
extern void _ZN7S7649C2D1Ev();
extern void _ZN7S7649C2D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C2__7S7649C6[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
};
extern void _ZN7S7649C4D1Ev();
extern void _ZN7S7649C4D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C47S7649C2__7S7649C6[] = {
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C47S7649C2__7S7649C6[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C2__7S7649C6[] = {
  0,
  0,
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
static  VTT_ENTRY vtt_S7649C6[] = {
  {&(_ZTV7S7649C6[4]),  4,38},
  {&(_tg__ZTV7S7649C2__7S7649C6[3]),  3,10},
  {&(_tg__ZTV7S7649C47S7649C2__7S7649C6[3]),  3,7},
  {&(_tg__ZTV7S7649C3__7S7649C47S7649C2__7S7649C6[4]),  4,6},
  {&(_tg__ZTV7S7649C3__7S7649C2__7S7649C6[4]),  4,6},
  {&(_ZTV7S7649C6[26]),  26,38},
  {&(_ZTV7S7649C6[34]),  34,38},
};
extern VTBL_ENTRY _ZTI7S7649C6[];
extern  VTBL_ENTRY _ZTV7S7649C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C6[];
Class_Descriptor cd_S7649C6 = {  "S7649C6", // class name
  bases_S7649C6, 6,
  &(vtc_S7649C6[0]), // expected_vtbl_contents
  &(vtt_S7649C6[0]), // expected_vtt_contents
  ABISELECT(208,116), // object size
  NSPAIRA(_ZTI7S7649C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7649C6),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7649C6),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7649C1  : S7649C2 , S7649C6 , S7649C5 {
  long double s7649c1f0;
  void *s7649c1f1;
  virtual  ~S7649C1(); // _ZN7S7649C1D2Ev
  virtual void  v1(); // _ZN7S7649C12v1Ev
  virtual void  v2(); // _ZN7S7649C12v2Ev
  virtual void  v3(); // _ZN7S7649C12v3Ev
  virtual void  v4(); // _ZN7S7649C12v4Ev
  virtual void  v5(); // _ZN7S7649C12v5Ev
  virtual void  v6(); // _ZN7S7649C12v6Ev
  S7649C1(); // tgen
};
//SIG(1 S7649C1) C1{ BC2{ VBC3{ v7 v8 Fp} BC4{ VBC3 vd v9 v10 Fp} BC5{ v11} vd v12 v13 v14 FL Fi Fp[8] Fi[2] FD Fi} BC6{ VBC3 BC2 BC5 VBC7{ v15 v16 v17 v18 Fp Fc} v19 v20 v21 v22 v23 FD} BC5 vd v1 v2 v3 v4 v5 v6 FD Fp}


 S7649C1 ::~S7649C1(){ note_dtor("S7649C1", this);}
void  S7649C1 ::v1(){vfunc_called(this, "_ZN7S7649C12v1Ev");}
void  S7649C1 ::v2(){vfunc_called(this, "_ZN7S7649C12v2Ev");}
void  S7649C1 ::v3(){vfunc_called(this, "_ZN7S7649C12v3Ev");}
void  S7649C1 ::v4(){vfunc_called(this, "_ZN7S7649C12v4Ev");}
void  S7649C1 ::v5(){vfunc_called(this, "_ZN7S7649C12v5Ev");}
void  S7649C1 ::v6(){vfunc_called(this, "_ZN7S7649C12v6Ev");}
S7649C1 ::S7649C1(){ note_ctor("S7649C1", this);} // tgen

static void Test_S7649C1()
{
  extern Class_Descriptor cd_S7649C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,55)];
    init_test(&cd_S7649C1, buf);
    S7649C1 *dp, &lv = *(dp=new (buf) S7649C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,216), "sizeof(S7649C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7649C1)");
    /*is_ambiguous_... S7649C1::S7649C2 */ AMB_check_base_class_offset(lv, (S7649C3*)(S7649C2*), ABISELECT(344,196), "S7649C1");
    /*is_ambiguous_... S7649C1::S7649C2 */ AMB_check_base_class_offset(lv, (S7649C3*)(S7649C4*)(S7649C2*), ABISELECT(344,196), "S7649C1");
    check_base_class_offset(lv, (S7649C3*)(S7649C6*), ABISELECT(344,196), "S7649C1");
    check_base_class_offset(lv, (S7649C3*)(S7649C2*)(S7649C6*), ABISELECT(344,196), "S7649C1");
    check_base_class_offset(lv, (S7649C3*)(S7649C4*)(S7649C2*)(S7649C6*), ABISELECT(344,196), "S7649C1");
    /*is_ambiguous_... S7649C1::S7649C2 */ AMB_check_base_class_offset(lv, (S7649C4*)(S7649C2*), 0, "S7649C1");
    /*is_ambiguous_... S7649C1::S7649C2 */ AMB_check_base_class_offset(lv, (S7649C5*)(S7649C2*), ABISELECT(16,8), "S7649C1");
    /*is_ambiguous_... S7649C1::S7649C2 */ AMB_check_base_class_offset(lv, (S7649C2*), 0, "S7649C1");
    check_base_class_offset(lv, (S7649C4*)(S7649C2*)(S7649C6*), ABISELECT(144,80), "S7649C1");
    check_base_class_offset(lv, (S7649C5*)(S7649C2*)(S7649C6*), ABISELECT(160,88), "S7649C1");
    check_base_class_offset(lv, (S7649C2*)(S7649C6*), ABISELECT(144,80), "S7649C1");
    /*is_ambiguous_... S7649C6::S7649C5 */ AMB_check_base_class_offset(lv, (S7649C5*)(S7649C6*), ABISELECT(280,160), "S7649C1");
    check_base_class_offset(lv, (S7649C7*)(S7649C6*), ABISELECT(360,204), "S7649C1");
    check_base_class_offset(lv, (S7649C6*), ABISELECT(144,80), "S7649C1");
    /*is_ambiguous_... S7649C1::S7649C5 */ AMB_check_base_class_offset(lv, (S7649C5*), ABISELECT(304,176), "S7649C1");
    check_field_offset(lv, s7649c1f0, ABISELECT(320,180), "S7649C1.s7649c1f0");
    check_field_offset(lv, s7649c1f1, ABISELECT(336,192), "S7649C1.s7649c1f1");
    test_class_info(&lv, &cd_S7649C1);
    dp->~S7649C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7649C1(Test_S7649C1, "S7649C1", ABISELECT(384,216));

#else // __cplusplus

extern void _ZN7S7649C1C1Ev();
extern void _ZN7S7649C1D2Ev();
Name_Map name_map_S7649C1[] = {
  NSPAIR(_ZN7S7649C1C1Ev),
  NSPAIR(_ZN7S7649C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7649C3;
extern VTBL_ENTRY _ZTI7S7649C3[];
extern  VTBL_ENTRY _ZTV7S7649C3[];
extern Class_Descriptor cd_S7649C4;
extern VTBL_ENTRY _ZTI7S7649C4[];
extern  VTBL_ENTRY _ZTV7S7649C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C4[];
extern Class_Descriptor cd_S7649C5;
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
extern Class_Descriptor cd_S7649C2;
extern VTBL_ENTRY _ZTI7S7649C2[];
extern  VTBL_ENTRY _ZTV7S7649C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C2[];
extern Class_Descriptor cd_S7649C4;
extern VTBL_ENTRY _ZTI7S7649C4[];
extern  VTBL_ENTRY _ZTV7S7649C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C4[];
extern Class_Descriptor cd_S7649C5;
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
extern Class_Descriptor cd_S7649C2;
extern VTBL_ENTRY _ZTI7S7649C2[];
extern  VTBL_ENTRY _ZTV7S7649C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C2[];
extern Class_Descriptor cd_S7649C5;
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
extern Class_Descriptor cd_S7649C7;
extern VTBL_ENTRY _ZTI7S7649C7[];
extern  VTBL_ENTRY _ZTV7S7649C7[];
extern Class_Descriptor cd_S7649C6;
extern VTBL_ENTRY _ZTI7S7649C6[];
extern  VTBL_ENTRY _ZTV7S7649C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C6[];
extern Class_Descriptor cd_S7649C5;
extern VTBL_ENTRY _ZTI7S7649C5[];
extern  VTBL_ENTRY _ZTV7S7649C5[];
static Base_Class bases_S7649C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7649C3,    ABISELECT(344,196), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7649C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7649C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7649C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7649C4,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7649C5,    ABISELECT(160,88), //bcp->offset
    36, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S7649C2,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7649C5,    ABISELECT(280,160), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7649C7,    ABISELECT(360,204), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7649C6,    ABISELECT(144,80), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7649C5,    ABISELECT(304,176), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7649C1[];
extern void _ZN7S7649C1D1Ev();
extern void _ZN7S7649C1D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
extern void _ZN7S7649C12v1Ev();
extern void _ZN7S7649C12v2Ev();
extern void _ZN7S7649C12v3Ev();
extern void _ZN7S7649C12v4Ev();
extern void _ZN7S7649C12v5Ev();
extern void _ZN7S7649C12v6Ev();
extern void _ZN7S7649C53v11Ev();
extern void ABISELECT(_ZThn144_N7S7649C1D1Ev,_ZThn80_N7S7649C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S7649C1D0Ev,_ZThn80_N7S7649C1D0Ev)();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
extern void _ZN7S7649C63v19Ev();
extern void _ZN7S7649C63v20Ev();
extern void _ZN7S7649C63v21Ev();
extern void _ZN7S7649C63v22Ev();
extern void _ZN7S7649C63v23Ev();
extern void _ZN7S7649C53v11Ev();
extern void _ZN7S7649C53v11Ev();
extern void _ZN7S7649C53v11Ev();
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
extern void _ZN7S7649C73v15Ev();
extern void _ZN7S7649C73v16Ev();
extern void _ZN7S7649C73v17Ev();
extern void _ZN7S7649C73v18Ev();
static  VTBL_ENTRY vtc_S7649C1[] = {
  ABISELECT(360,204),
  ABISELECT(344,196),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&_ZN7S7649C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7649C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7649C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7649C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7649C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7649C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7649C12v6Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
  ABISELECT(216,124),
  ABISELECT(200,116),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7649C1D1Ev,_ZThn80_N7S7649C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7649C1D0Ev,_ZThn80_N7S7649C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v23Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&_ZN7S7649C53v11Ev,
  0,
  0,
  ABISELECT(-344,-196),
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-204),
  (VTBL_ENTRY)&(_ZTI7S7649C1[0]),
  (VTBL_ENTRY)&_ZN7S7649C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v18Ev,
};
extern VTBL_ENTRY _ZTV7S7649C1[];
extern void _ZN7S7649C2D1Ev();
extern void _ZN7S7649C2D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C2__7S7649C1[] = {
  ABISELECT(344,196),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
};
extern void _ZN7S7649C4D1Ev();
extern void _ZN7S7649C4D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C47S7649C2__7S7649C1[] = {
  ABISELECT(344,196),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C47S7649C2__7S7649C1[] = {
  0,
  0,
  ABISELECT(-344,-196),
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C2__7S7649C1[] = {
  0,
  0,
  ABISELECT(-344,-196),
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern void _ZN7S7649C6D1Ev();
extern void _ZN7S7649C6D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
extern void _ZN7S7649C63v19Ev();
extern void _ZN7S7649C63v20Ev();
extern void _ZN7S7649C63v21Ev();
extern void _ZN7S7649C63v22Ev();
extern void _ZN7S7649C63v23Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C6__7S7649C1[] = {
  ABISELECT(216,124),
  ABISELECT(200,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7649C63v23Ev,
};
extern void _ZN7S7649C2D1Ev();
extern void _ZN7S7649C2D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
extern void _ZN7S7649C23v12Ev();
extern void _ZN7S7649C23v13Ev();
extern void _ZN7S7649C23v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C27S7649C6__A1__7S7649C1[] = {
  ABISELECT(200,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7649C23v14Ev,
};
extern void _ZN7S7649C4D1Ev();
extern void _ZN7S7649C4D0Ev();
extern void _ZN7S7649C42v9Ev();
extern void _ZN7S7649C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C47S7649C27S7649C6__A1__7S7649C1[] = {
  ABISELECT(200,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7649C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7649C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7649C43v10Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C47S7649C27S7649C6__A1__7S7649C1[] = {
  0,
  0,
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI7S7649C4[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C27S7649C6__A1__7S7649C1[] = {
  0,
  0,
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI7S7649C2[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern void _ZN7S7649C32v7Ev();
extern void _ZN7S7649C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C3__7S7649C6__7S7649C1[] = {
  0,
  0,
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7649C32v8Ev,
};
extern void _ZN7S7649C73v15Ev();
extern void _ZN7S7649C73v16Ev();
extern void _ZN7S7649C73v17Ev();
extern void _ZN7S7649C73v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7649C7__7S7649C6__7S7649C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-216,-124),
  (VTBL_ENTRY)&(_ZTI7S7649C6[0]),
  (VTBL_ENTRY)&_ZN7S7649C73v15Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7649C73v18Ev,
};
static  VTT_ENTRY vtt_S7649C1[] = {
  {&(_ZTV7S7649C1[4]),  4,61},
  {&(_tg__ZTV7S7649C2__7S7649C1[3]),  3,10},
  {&(_tg__ZTV7S7649C47S7649C2__7S7649C1[3]),  3,7},
  {&(_tg__ZTV7S7649C3__7S7649C47S7649C2__7S7649C1[4]),  4,6},
  {&(_tg__ZTV7S7649C3__7S7649C2__7S7649C1[4]),  4,6},
  {&(_tg__ZTV7S7649C6__7S7649C1[4]),  4,16},
  {&(_tg__ZTV7S7649C27S7649C6__A1__7S7649C1[3]),  3,10},
  {&(_tg__ZTV7S7649C47S7649C27S7649C6__A1__7S7649C1[3]),  3,7},
  {&(_tg__ZTV7S7649C3__7S7649C47S7649C27S7649C6__A1__7S7649C1[4]),  4,6},
  {&(_tg__ZTV7S7649C3__7S7649C27S7649C6__A1__7S7649C1[4]),  4,6},
  {&(_tg__ZTV7S7649C3__7S7649C6__7S7649C1[4]),  4,6},
  {&(_tg__ZTV7S7649C7__7S7649C6__7S7649C1[6]),  6,10},
  {&(_ZTV7S7649C1[49]),  49,61},
  {&(_ZTV7S7649C1[24]),  24,61},
  {&(_ZTV7S7649C1[57]),  57,61},
};
extern VTBL_ENTRY _ZTI7S7649C1[];
extern  VTBL_ENTRY _ZTV7S7649C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7649C1[];
Class_Descriptor cd_S7649C1 = {  "S7649C1", // class name
  bases_S7649C1, 11,
  &(vtc_S7649C1[0]), // expected_vtbl_contents
  &(vtt_S7649C1[0]), // expected_vtt_contents
  ABISELECT(384,216), // object size
  NSPAIRA(_ZTI7S7649C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7649C1),61, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7649C1),15, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7179C2_nt  {
  void *s7179c2f0;
  virtual void  v9(); // _ZN10S7179C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7179C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7179C2_nt3v11Ev
  virtual void  v12(); // _ZN10S7179C2_nt3v12Ev
  virtual void  v13(); // _ZN10S7179C2_nt3v13Ev
  virtual void  v14(); // _ZN10S7179C2_nt3v14Ev
  virtual void  v15(); // _ZN10S7179C2_nt3v15Ev
  virtual void  v16(); // _ZN10S7179C2_nt3v16Ev
  ~S7179C2_nt(); // tgen
  S7179C2_nt(); // tgen
};
//SIG(-1 S7179C2_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fp}


void  S7179C2_nt ::v9(){vfunc_called(this, "_ZN10S7179C2_nt2v9Ev");}
void  S7179C2_nt ::v10(){vfunc_called(this, "_ZN10S7179C2_nt3v10Ev");}
void  S7179C2_nt ::v11(){vfunc_called(this, "_ZN10S7179C2_nt3v11Ev");}
void  S7179C2_nt ::v12(){vfunc_called(this, "_ZN10S7179C2_nt3v12Ev");}
void  S7179C2_nt ::v13(){vfunc_called(this, "_ZN10S7179C2_nt3v13Ev");}
void  S7179C2_nt ::v14(){vfunc_called(this, "_ZN10S7179C2_nt3v14Ev");}
void  S7179C2_nt ::v15(){vfunc_called(this, "_ZN10S7179C2_nt3v15Ev");}
void  S7179C2_nt ::v16(){vfunc_called(this, "_ZN10S7179C2_nt3v16Ev");}
S7179C2_nt ::~S7179C2_nt(){ note_dtor("S7179C2_nt", this);} // tgen
S7179C2_nt ::S7179C2_nt(){ note_ctor("S7179C2_nt", this);} // tgen

//skip512 S7179C2_nt

#else // __cplusplus

extern void _ZN10S7179C2_ntC1Ev();
extern void _ZN10S7179C2_ntD1Ev();
Name_Map name_map_S7179C2_nt[] = {
  NSPAIR(_ZN10S7179C2_ntC1Ev),
  NSPAIR(_ZN10S7179C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7179C2_nt[];
extern void _ZN10S7179C2_nt2v9Ev();
extern void _ZN10S7179C2_nt3v10Ev();
extern void _ZN10S7179C2_nt3v11Ev();
extern void _ZN10S7179C2_nt3v12Ev();
extern void _ZN10S7179C2_nt3v13Ev();
extern void _ZN10S7179C2_nt3v14Ev();
extern void _ZN10S7179C2_nt3v15Ev();
extern void _ZN10S7179C2_nt3v16Ev();
static  VTBL_ENTRY vtc_S7179C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7179C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7179C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI10S7179C2_nt[];
VTBL_ENTRY *P__ZTI10S7179C2_nt = _ZTI10S7179C2_nt; 
extern  VTBL_ENTRY _ZTV10S7179C2_nt[];
Class_Descriptor cd_S7179C2_nt = {  "S7179C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7179C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7179C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7179C2_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S7179C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7179C4_nt  {
  int s7179c4f0;
  void  mf7179c4(); // _ZN10S7179C4_nt8mf7179c4Ev
};
//SIG(-1 S7179C4_nt) C1{ m Fi}


void  S7179C4_nt ::mf7179c4(){}

//skip512 S7179C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7179C1  : S7179C2_nt {
  void *s7179c1f0;
  int s7179c1f1;
  ::S7179C3_nt s7179c1f2;
  void *s7179c1f3;
  ::S7179C4_nt s7179c1f4;
  ::S6060C20 s7179c1f5;
  ::S6712C22 s7179c1f6;
  unsigned int s7179c1f7:1;
  unsigned int s7179c1f8:1;
  unsigned int s7179c1f9:1;
  virtual void  v1(); // _ZN7S7179C12v1Ev
  virtual void  v2(); // _ZN7S7179C12v2Ev
  virtual void  v3(); // _ZN7S7179C12v3Ev
  virtual void  v4(); // _ZN7S7179C12v4Ev
  virtual void  v5(); // _ZN7S7179C12v5Ev
  virtual void  v6(); // _ZN7S7179C12v6Ev
  virtual void  v7(); // _ZN7S7179C12v7Ev
  virtual void  v8(); // _ZN7S7179C12v8Ev
  ~S7179C1(); // tgen
  S7179C1(); // tgen
};
//SIG(1 S7179C1) C1{ BC2{ v9 v10 v11 v12 v13 v14 v15 v16 Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi FC3{} Fp FC4{ m Fi} FC5{ m FC6{ BC7{ m Fp Fi[2]}} FC8{ BC7} FC8 Fi[2] FC9{ BC7} FC6 FC9} FC10{ BC7} Fi:1 Fi:1 Fi:1}


void  S7179C1 ::v1(){vfunc_called(this, "_ZN7S7179C12v1Ev");}
void  S7179C1 ::v2(){vfunc_called(this, "_ZN7S7179C12v2Ev");}
void  S7179C1 ::v3(){vfunc_called(this, "_ZN7S7179C12v3Ev");}
void  S7179C1 ::v4(){vfunc_called(this, "_ZN7S7179C12v4Ev");}
void  S7179C1 ::v5(){vfunc_called(this, "_ZN7S7179C12v5Ev");}
void  S7179C1 ::v6(){vfunc_called(this, "_ZN7S7179C12v6Ev");}
void  S7179C1 ::v7(){vfunc_called(this, "_ZN7S7179C12v7Ev");}
void  S7179C1 ::v8(){vfunc_called(this, "_ZN7S7179C12v8Ev");}
S7179C1 ::~S7179C1(){ note_dtor("S7179C1", this);} // tgen
S7179C1 ::S7179C1(){ note_ctor("S7179C1", this);} // tgen

static void Test_S7179C1()
{
  extern Class_Descriptor cd_S7179C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S7179C1, buf);
    S7179C1 *dp, &lv = *(dp=new (buf) S7179C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S7179C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7179C1)");
    check_base_class_offset(lv, (S7179C2_nt*), 0, "S7179C1");
    check_field_offset(lv, s7179c1f0, ABISELECT(16,8), "S7179C1.s7179c1f0");
    check_field_offset(lv, s7179c1f1, ABISELECT(24,12), "S7179C1.s7179c1f1");
    check_field_offset(lv, s7179c1f2, ABISELECT(28,16), "S7179C1.s7179c1f2");
    check_field_offset(lv, s7179c1f3, ABISELECT(32,20), "S7179C1.s7179c1f3");
    check_field_offset(lv, s7179c1f4, ABISELECT(40,24), "S7179C1.s7179c1f4");
    check_field_offset(lv, s7179c1f5, ABISELECT(48,28), "S7179C1.s7179c1f5");
    check_field_offset(lv, s7179c1f6, ABISELECT(152,108), "S7179C1.s7179c1f6");
    set_bf_and_test(lv, s7179c1f7, ABISELECT(168,120), 0, 1, 1, "S7179C1");
    set_bf_and_test(lv, s7179c1f8, ABISELECT(168,120), 1, 1, 1, "S7179C1");
    set_bf_and_test(lv, s7179c1f9, ABISELECT(168,120), 2, 1, 1, "S7179C1");
    test_class_info(&lv, &cd_S7179C1);
    dp->~S7179C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7179C1(Test_S7179C1, "S7179C1", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S7179C1C1Ev();
extern void _ZN7S7179C1D1Ev();
Name_Map name_map_S7179C1[] = {
  NSPAIR(_ZN7S7179C1C1Ev),
  NSPAIR(_ZN7S7179C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7179C2_nt;
extern VTBL_ENTRY _ZTI10S7179C2_nt[];
extern  VTBL_ENTRY _ZTV10S7179C2_nt[];
static Base_Class bases_S7179C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7179C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7179C1[];
extern void _ZN10S7179C2_nt2v9Ev();
extern void _ZN10S7179C2_nt3v10Ev();
extern void _ZN10S7179C2_nt3v11Ev();
extern void _ZN10S7179C2_nt3v12Ev();
extern void _ZN10S7179C2_nt3v13Ev();
extern void _ZN10S7179C2_nt3v14Ev();
extern void _ZN10S7179C2_nt3v15Ev();
extern void _ZN10S7179C2_nt3v16Ev();
extern void _ZN7S7179C12v1Ev();
extern void _ZN7S7179C12v2Ev();
extern void _ZN7S7179C12v3Ev();
extern void _ZN7S7179C12v4Ev();
extern void _ZN7S7179C12v5Ev();
extern void _ZN7S7179C12v6Ev();
extern void _ZN7S7179C12v7Ev();
extern void _ZN7S7179C12v8Ev();
static  VTBL_ENTRY vtc_S7179C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7179C1[0]),
  (VTBL_ENTRY)&_ZN10S7179C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7179C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7179C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S7179C1[];
extern  VTBL_ENTRY _ZTV7S7179C1[];
Class_Descriptor cd_S7179C1 = {  "S7179C1", // class name
  bases_S7179C1, 1,
  &(vtc_S7179C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S7179C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7179C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19377C3  {
  void *s19377c3f0;
  virtual void  v6(); // _ZN8S19377C32v6Ev
  virtual void  v7(); // _ZN8S19377C32v7Ev
  ~S19377C3(); // tgen
  S19377C3(); // tgen
};
//SIG(-1 S19377C3) C1{ v1 v2 Fp}


void  S19377C3 ::v6(){vfunc_called(this, "_ZN8S19377C32v6Ev");}
void  S19377C3 ::v7(){vfunc_called(this, "_ZN8S19377C32v7Ev");}
S19377C3 ::~S19377C3(){ note_dtor("S19377C3", this);} // tgen
S19377C3 ::S19377C3(){ note_ctor("S19377C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19377C3C1Ev();
extern void _ZN8S19377C3D1Ev();
Name_Map name_map_S19377C3[] = {
  NSPAIR(_ZN8S19377C3C1Ev),
  NSPAIR(_ZN8S19377C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19377C3[];
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY vtc_S19377C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C3[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
Class_Descriptor cd_S19377C3 = {  "S19377C3", // class name
  0,0,//no base classes
  &(vtc_S19377C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19377C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19377C3),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  S19377C5  : virtual S19377C3 {
  void *s19377c5f0;
  virtual  ~S19377C5(); // _ZN8S19377C5D2Ev
  virtual void  v8(); // _ZN8S19377C52v8Ev
  virtual void  v9(); // _ZN8S19377C52v9Ev
  S19377C5(); // tgen
};
//SIG(-1 S19377C5) C1{ VBC2{ v3 v4 Fp} vd v1 v2 Fp}


 S19377C5 ::~S19377C5(){ note_dtor("S19377C5", this);}
void  S19377C5 ::v8(){vfunc_called(this, "_ZN8S19377C52v8Ev");}
void  S19377C5 ::v9(){vfunc_called(this, "_ZN8S19377C52v9Ev");}
S19377C5 ::S19377C5(){ note_ctor("S19377C5", this);} // tgen

static void Test_S19377C5()
{
  extern Class_Descriptor cd_S19377C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19377C5, buf);
    S19377C5 *dp, &lv = *(dp=new (buf) S19377C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19377C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19377C5)");
    check_base_class_offset(lv, (S19377C3*), ABISELECT(16,8), "S19377C5");
    check_field_offset(lv, s19377c5f0, ABISELECT(8,4), "S19377C5.s19377c5f0");
    test_class_info(&lv, &cd_S19377C5);
    dp->~S19377C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19377C5(Test_S19377C5, "S19377C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19377C5C1Ev();
extern void _ZN8S19377C5D2Ev();
Name_Map name_map_S19377C5[] = {
  NSPAIR(_ZN8S19377C5C1Ev),
  NSPAIR(_ZN8S19377C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
static Base_Class bases_S19377C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19377C3,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19377C5[];
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY vtc_S19377C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern VTBL_ENTRY _ZTV8S19377C5[];
static  VTT_ENTRY vtt_S19377C5[] = {
  {&(_ZTV8S19377C5[3]),  3,13},
  {&(_ZTV8S19377C5[11]),  11,13},
};
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
Class_Descriptor cd_S19377C5 = {  "S19377C5", // class name
  bases_S19377C5, 1,
  &(vtc_S19377C5[0]), // expected_vtbl_contents
  &(vtt_S19377C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19377C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19377C5),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19377C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19377C6  {
  virtual void  v10(); // _ZN8S19377C63v10Ev
  ~S19377C6(); // tgen
  S19377C6(); // tgen
};
//SIG(-1 S19377C6) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN8S19377C6C1Ev();
extern void _ZN8S19377C6D1Ev();
Name_Map name_map_S19377C6[] = {
  NSPAIR(_ZN8S19377C6C1Ev),
  NSPAIR(_ZN8S19377C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19377C6[];
extern void _ZN8S19377C63v10Ev();
static  VTBL_ENTRY vtc_S19377C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C6[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
};
extern VTBL_ENTRY _ZTI8S19377C6[];
extern  VTBL_ENTRY _ZTV8S19377C6[];
Class_Descriptor cd_S19377C6 = {  "S19377C6", // class name
  0,0,//no base classes
  &(vtc_S19377C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19377C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19377C6),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  S19377C4  : virtual S19377C3 , S19377C5 , S19377C6 {
  __tsi64 s19377c4f0;
  int s19377c4f1;
  void *s19377c4f2[8];
  int s19377c4f3[2];
  long double s19377c4f4;
  int s19377c4f5;
  virtual  ~S19377C4(); // _ZN8S19377C4D2Ev
  virtual void  v11(); // _ZN8S19377C43v11Ev
  virtual void  v12(); // _ZN8S19377C43v12Ev
  virtual void  v13(); // _ZN8S19377C43v13Ev
  S19377C4(); // tgen
};
//SIG(-1 S19377C4) C1{ VBC2{ v4 v5 Fp} BC3{ VBC2 vd v6 v7 Fp} BC4{ v8} vd v1 v2 v3 FL Fi Fp[8] Fi[2] FD Fi}


 S19377C4 ::~S19377C4(){ note_dtor("S19377C4", this);}
void  S19377C4 ::v11(){vfunc_called(this, "_ZN8S19377C43v11Ev");}
void  S19377C4 ::v12(){vfunc_called(this, "_ZN8S19377C43v12Ev");}
void  S19377C4 ::v13(){vfunc_called(this, "_ZN8S19377C43v13Ev");}
S19377C4 ::S19377C4(){ note_ctor("S19377C4", this);} // tgen

static void Test_S19377C4()
{
  extern Class_Descriptor cd_S19377C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,23)];
    init_test(&cd_S19377C4, buf);
    S19377C4 *dp, &lv = *(dp=new (buf) S19377C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S19377C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19377C4)");
    check_base_class_offset(lv, (S19377C3*), ABISELECT(136,80), "S19377C4");
    check_base_class_offset(lv, (S19377C3*)(S19377C5*), ABISELECT(136,80), "S19377C4");
    check_base_class_offset(lv, (S19377C5*), 0, "S19377C4");
    check_base_class_offset(lv, (S19377C6*), ABISELECT(16,8), "S19377C4");
    check_field_offset(lv, s19377c4f0, ABISELECT(24,12), "S19377C4.s19377c4f0");
    check_field_offset(lv, s19377c4f1, ABISELECT(32,20), "S19377C4.s19377c4f1");
    check_field_offset(lv, s19377c4f2, ABISELECT(40,24), "S19377C4.s19377c4f2");
    check_field_offset(lv, s19377c4f3, ABISELECT(104,56), "S19377C4.s19377c4f3");
    check_field_offset(lv, s19377c4f4, ABISELECT(112,64), "S19377C4.s19377c4f4");
    check_field_offset(lv, s19377c4f5, ABISELECT(128,76), "S19377C4.s19377c4f5");
    test_class_info(&lv, &cd_S19377C4);
    dp->~S19377C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19377C4(Test_S19377C4, "S19377C4", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN8S19377C4C1Ev();
extern void _ZN8S19377C4D2Ev();
Name_Map name_map_S19377C4[] = {
  NSPAIR(_ZN8S19377C4C1Ev),
  NSPAIR(_ZN8S19377C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C6;
extern VTBL_ENTRY _ZTI8S19377C6[];
extern  VTBL_ENTRY _ZTV8S19377C6[];
static Base_Class bases_S19377C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19377C3,    ABISELECT(136,80), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19377C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19377C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19377C4[];
extern void _ZN8S19377C4D1Ev();
extern void _ZN8S19377C4D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
extern void _ZN8S19377C63v10Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY vtc_S19377C4[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern VTBL_ENTRY _ZTV8S19377C4[];
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C5__8S19377C4[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C5__8S19377C4[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
static  VTT_ENTRY vtt_S19377C4[] = {
  {&(_ZTV8S19377C4[3]),  3,19},
  {&(_tg__ZTV8S19377C5__8S19377C4[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C5__8S19377C4[4]),  4,6},
  {&(_ZTV8S19377C4[17]),  17,19},
};
extern VTBL_ENTRY _ZTI8S19377C4[];
extern  VTBL_ENTRY _ZTV8S19377C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C4[];
Class_Descriptor cd_S19377C4 = {  "S19377C4", // class name
  bases_S19377C4, 3,
  &(vtc_S19377C4[0]), // expected_vtbl_contents
  &(vtt_S19377C4[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI8S19377C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19377C4),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19377C4),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19377C7  : S19377C3 , virtual S19377C4 , S19377C5 {
  char s19377c7f0;
  int s19377c7f1;
  virtual  ~S19377C7(); // _ZN8S19377C7D2Ev
  virtual void  v14(); // _ZN8S19377C73v14Ev
  virtual void  v15(); // _ZN8S19377C73v15Ev
  virtual void  v16(); // _ZN8S19377C73v16Ev
  virtual void  v17(); // _ZN8S19377C73v17Ev
  S19377C7(); // tgen
};
//SIG(-1 S19377C7) C1{ BC2{ v5 v6 Fp} VBC3{ VBC2 BC4{ VBC2 vd v7 v8 Fp} BC5{ v9} vd v10 v11 v12 FL Fi Fp[8] Fi[2] FD Fi} BC4 vd v1 v2 v3 v4 Fc Fi}


 S19377C7 ::~S19377C7(){ note_dtor("S19377C7", this);}
void  S19377C7 ::v14(){vfunc_called(this, "_ZN8S19377C73v14Ev");}
void  S19377C7 ::v15(){vfunc_called(this, "_ZN8S19377C73v15Ev");}
void  S19377C7 ::v16(){vfunc_called(this, "_ZN8S19377C73v16Ev");}
void  S19377C7 ::v17(){vfunc_called(this, "_ZN8S19377C73v17Ev");}
S19377C7 ::S19377C7(){ note_ctor("S19377C7", this);} // tgen

static void Test_S19377C7()
{
  extern Class_Descriptor cd_S19377C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,29)];
    init_test(&cd_S19377C7, buf);
    S19377C7 *dp, &lv = *(dp=new (buf) S19377C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S19377C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19377C7)");
    /*is_ambiguous_... S19377C7::S19377C3 */ AMB_check_base_class_offset(lv, (S19377C3*), 0, "S19377C7");
    check_base_class_offset(lv, (S19377C3*)(S19377C4*), ABISELECT(184,104), "S19377C7");
    check_base_class_offset(lv, (S19377C3*)(S19377C5*)(S19377C4*), ABISELECT(184,104), "S19377C7");
    /*is_ambiguous_... S19377C7::S19377C5 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C5*), ABISELECT(184,104), "S19377C7");
    check_base_class_offset(lv, (S19377C5*)(S19377C4*), ABISELECT(48,24), "S19377C7");
    check_base_class_offset(lv, (S19377C6*)(S19377C4*), ABISELECT(64,32), "S19377C7");
    check_base_class_offset(lv, (S19377C4*), ABISELECT(48,24), "S19377C7");
    /*is_ambiguous_... S19377C7::S19377C5 */ AMB_check_base_class_offset(lv, (S19377C5*), ABISELECT(16,8), "S19377C7");
    check_field_offset(lv, s19377c7f0, ABISELECT(32,16), "S19377C7.s19377c7f0");
    check_field_offset(lv, s19377c7f1, ABISELECT(36,20), "S19377C7.s19377c7f1");
    test_class_info(&lv, &cd_S19377C7);
    dp->~S19377C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19377C7(Test_S19377C7, "S19377C7", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN8S19377C7C1Ev();
extern void _ZN8S19377C7D2Ev();
Name_Map name_map_S19377C7[] = {
  NSPAIR(_ZN8S19377C7C1Ev),
  NSPAIR(_ZN8S19377C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C6;
extern VTBL_ENTRY _ZTI8S19377C6[];
extern  VTBL_ENTRY _ZTV8S19377C6[];
extern Class_Descriptor cd_S19377C4;
extern VTBL_ENTRY _ZTI8S19377C4[];
extern  VTBL_ENTRY _ZTV8S19377C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C4[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
static Base_Class bases_S19377C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19377C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19377C3,    ABISELECT(184,104), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19377C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19377C6,    ABISELECT(64,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19377C4,    ABISELECT(48,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19377C5,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19377C7[];
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C7D1Ev();
extern void _ZN8S19377C7D0Ev();
extern void _ZN8S19377C73v14Ev();
extern void _ZN8S19377C73v15Ev();
extern void _ZN8S19377C73v16Ev();
extern void _ZN8S19377C73v17Ev();
extern void ABISELECT(_ZThn16_N8S19377C7D1Ev,_ZThn8_N8S19377C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19377C7D0Ev,_ZThn8_N8S19377C7D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19377C7D1Ev,_ZThn24_N8S19377C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19377C7D0Ev,_ZThn24_N8S19377C7D0Ev)() __attribute__((weak));
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
extern void _ZN8S19377C63v10Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY vtc_S19377C7[] = {
  ABISELECT(184,104),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19377C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v17Ev,
  ABISELECT(168,96),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C7D1Ev,_ZThn8_N8S19377C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C7D0Ev,_ZThn8_N8S19377C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(136,80),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
  0,
  0,
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern VTBL_ENTRY _ZTV8S19377C7[];
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C5__A1__8S19377C7[] = {
  ABISELECT(168,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C5__A1__8S19377C7[] = {
  0,
  0,
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C4D1Ev();
extern void _ZN8S19377C4D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__8S19377C7[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C4__8S19377C7[] = {
  ABISELECT(136,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C58S19377C4__8S19377C7[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C4__8S19377C7[] = {
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
static  VTT_ENTRY vtt_S19377C7[] = {
  {&(_ZTV8S19377C7[4]),  4,45},
  {&(_tg__ZTV8S19377C5__A1__8S19377C7[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C5__A1__8S19377C7[4]),  4,6},
  {&(_ZTV8S19377C7[29]),  29,45},
  {&(_ZTV8S19377C7[43]),  43,45},
  {&(_ZTV8S19377C7[38]),  38,45},
  {&(_ZTV8S19377C7[15]),  15,45},
  {&(_tg__ZTV8S19377C4__8S19377C7[3]),  3,10},
  {&(_tg__ZTV8S19377C58S19377C4__8S19377C7[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C58S19377C4__8S19377C7[4]),  4,6},
  {&(_tg__ZTV8S19377C3__8S19377C4__8S19377C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19377C7[];
extern  VTBL_ENTRY _ZTV8S19377C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C7[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19377C7D0Ev,_ZThn24_N8S19377C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19377C7D1Ev,_ZThn24_N8S19377C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19377C7 = {  "S19377C7", // class name
  bases_S19377C7, 6,
  &(vtc_S19377C7[0]), // expected_vtbl_contents
  &(vtt_S19377C7[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI8S19377C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19377C7),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19377C7),11, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19377C2  : S19377C3 , S19377C4 , virtual S19377C7 {
  void *s19377c2f0[5];
  virtual void  v18(); // _ZN8S19377C23v18Ev
  virtual void  v19(); // _ZN8S19377C23v19Ev
  virtual void  v20(); // _ZN8S19377C23v20Ev
  virtual void  v21(); // _ZN8S19377C23v21Ev
  ~S19377C2(); // tgen
  S19377C2(); // tgen
};
//SIG(-1 S19377C2) C1{ BC2{ v5 v6 Fp} BC3{ VBC2 BC4{ VBC2 vd v7 v8 Fp} BC5{ v9} vd v10 v11 v12 FL Fi Fp[8] Fi[2] FD Fi} VBC6{ BC2 VBC3 BC4 vd v13 v14 v15 v16 Fc Fi} v1 v2 v3 v4 Fp[5]}


void  S19377C2 ::v18(){vfunc_called(this, "_ZN8S19377C23v18Ev");}
void  S19377C2 ::v19(){vfunc_called(this, "_ZN8S19377C23v19Ev");}
void  S19377C2 ::v20(){vfunc_called(this, "_ZN8S19377C23v20Ev");}
void  S19377C2 ::v21(){vfunc_called(this, "_ZN8S19377C23v21Ev");}
S19377C2 ::~S19377C2(){ note_dtor("S19377C2", this);} // tgen
S19377C2 ::S19377C2(){ note_ctor("S19377C2", this);} // tgen

static void Test_S19377C2()
{
  extern Class_Descriptor cd_S19377C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,56)];
    init_test(&cd_S19377C2, buf);
    S19377C2 *dp, &lv = *(dp=new (buf) S19377C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,220), "sizeof(S19377C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19377C2)");
    /*is_ambiguous_... S19377C2::S19377C3 */ AMB_check_base_class_offset(lv, (S19377C3*), 0, "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C4*), ABISELECT(192,108), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C5*)(S19377C4*), ABISELECT(192,108), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C4*), ABISELECT(192,108), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C5*)(S19377C4*), ABISELECT(192,108), "S19377C2");
    /*is_ambiguous_... S19377C7::S19377C5 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C5*)(S19377C7*), ABISELECT(192,108), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C5*)(S19377C4*), ABISELECT(16,8), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C6*)(S19377C4*), ABISELECT(32,16), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C4*), ABISELECT(16,8), "S19377C2");
    /*is_ambiguous_... S19377C7::S19377C3 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C7*), ABISELECT(208,116), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C5*)(S19377C4*), ABISELECT(256,140), "S19377C2");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C6*)(S19377C4*), ABISELECT(272,148), "S19377C2");
    check_base_class_offset(lv, (S19377C4*)(S19377C7*), ABISELECT(256,140), "S19377C2");
    /*is_ambiguous_... S19377C7::S19377C5 */ AMB_check_base_class_offset(lv, (S19377C5*)(S19377C7*), ABISELECT(224,124), "S19377C2");
    check_base_class_offset(lv, (S19377C7*), ABISELECT(208,116), "S19377C2");
    check_field_offset(lv, s19377c2f0, ABISELECT(152,88), "S19377C2.s19377c2f0");
    test_class_info(&lv, &cd_S19377C2);
    dp->~S19377C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19377C2(Test_S19377C2, "S19377C2", ABISELECT(400,220));

#else // __cplusplus

extern void _ZN8S19377C2C1Ev();
extern void _ZN8S19377C2D1Ev();
Name_Map name_map_S19377C2[] = {
  NSPAIR(_ZN8S19377C2C1Ev),
  NSPAIR(_ZN8S19377C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C6;
extern VTBL_ENTRY _ZTI8S19377C6[];
extern  VTBL_ENTRY _ZTV8S19377C6[];
extern Class_Descriptor cd_S19377C4;
extern VTBL_ENTRY _ZTI8S19377C4[];
extern  VTBL_ENTRY _ZTV8S19377C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C4[];
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C6;
extern VTBL_ENTRY _ZTI8S19377C6[];
extern  VTBL_ENTRY _ZTV8S19377C6[];
extern Class_Descriptor cd_S19377C4;
extern VTBL_ENTRY _ZTI8S19377C4[];
extern  VTBL_ENTRY _ZTV8S19377C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C4[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C7;
extern VTBL_ENTRY _ZTI8S19377C7[];
extern  VTBL_ENTRY _ZTV8S19377C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C7[];
static Base_Class bases_S19377C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19377C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19377C3,    ABISELECT(192,108), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19377C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19377C6,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19377C4,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19377C3,    ABISELECT(208,116), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19377C5,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19377C6,    ABISELECT(272,148), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19377C4,    ABISELECT(256,140), //bcp->offset
    60, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19377C5,    ABISELECT(224,124), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19377C7,    ABISELECT(208,116), //bcp->offset
    32, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19377C2[];
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C23v18Ev();
extern void _ZN8S19377C23v19Ev();
extern void _ZN8S19377C23v20Ev();
extern void _ZN8S19377C23v21Ev();
extern void _ZN8S19377C2D1Ev();
extern void _ZN8S19377C2D0Ev();
extern void ABISELECT(_ZThn16_N8S19377C2D1Ev,_ZThn8_N8S19377C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19377C2D0Ev,_ZThn8_N8S19377C2D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
extern void _ZN8S19377C63v10Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S19377C2D1Ev,_ZTv0_n28_N8S19377C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S19377C2D1Ev,_ZThn116_N8S19377C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19377C2D0Ev,_ZTv0_n28_N8S19377C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S19377C2D0Ev,_ZThn116_N8S19377C2D0Ev)() __attribute__((weak));
extern void _ZN8S19377C73v14Ev();
extern void _ZN8S19377C73v15Ev();
extern void _ZN8S19377C73v16Ev();
extern void _ZN8S19377C73v17Ev();
extern void ABISELECT(_ZTvn16_n56_N8S19377C2D1Ev,_ZTvn8_n28_N8S19377C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19377C2D0Ev,_ZTvn8_n28_N8S19377C2D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S19377C2D1Ev,_ZTv0_n16_N8S19377C2D1Ev)();
extern void ABISELECT(_ZThn256_N8S19377C2D1Ev,_ZThn140_N8S19377C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19377C2D0Ev,_ZTv0_n16_N8S19377C2D0Ev)();
extern void ABISELECT(_ZThn256_N8S19377C2D0Ev,_ZThn140_N8S19377C2D0Ev)() __attribute__((weak));
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
extern void _ZN8S19377C63v10Ev();
static  VTBL_ENTRY vtc_S19377C2[] = {
  ABISELECT(256,140),
  ABISELECT(208,116),
  ABISELECT(192,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v21Ev,
  (VTBL_ENTRY)&_ZN8S19377C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C2D0Ev,
  ABISELECT(176,100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C2D1Ev,_ZThn8_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C2D0Ev,_ZThn8_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
  0,
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19377C2D1Ev,_ZTv0_n28_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19377C2D0Ev,_ZTv0_n28_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v17Ev,
  ABISELECT(-32,-16),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19377C2D1Ev,_ZTvn8_n28_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19377C2D0Ev,_ZTvn8_n28_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-140),
  ABISELECT(-64,-32),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C2D1Ev,_ZTv0_n16_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C2D0Ev,_ZTv0_n16_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
};
extern VTBL_ENTRY _ZTV8S19377C2[];
extern void _ZN8S19377C4D1Ev();
extern void _ZN8S19377C4D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__A__8S19377C2[] = {
  ABISELECT(176,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C4__8S19377C2[] = {
  ABISELECT(176,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C58S19377C4__8S19377C2[] = {
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C4__A__8S19377C2[] = {
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C7D1Ev();
extern void _ZN8S19377C7D0Ev();
extern void _ZN8S19377C73v14Ev();
extern void _ZN8S19377C73v15Ev();
extern void _ZN8S19377C73v16Ev();
extern void _ZN8S19377C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C7__8S19377C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19377C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v17Ev,
};
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C7__A2__8S19377C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C58S19377C7__A2__8S19377C2[] = {
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19377C7D1Ev,_ZThn24_N8S19377C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19377C7D0Ev,_ZThn24_N8S19377C7D0Ev)() __attribute__((weak));
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__8S19377C7__8S19377C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__A1__8S19377C7__8S19377C2[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C63v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C68S19377C4__8S19377C7__8S19377C2[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
};
extern void ABISELECT(_ZThn16_N8S19377C7D1Ev,_ZThn8_N8S19377C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19377C7D0Ev,_ZThn8_N8S19377C7D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C5__A1__8S19377C7__8S19377C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C7D1Ev,_ZThn8_N8S19377C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C7D0Ev,_ZThn8_N8S19377C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C4D1Ev();
extern void _ZN8S19377C4D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__A1__8S19377C2[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C4__A1__8S19377C2[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C58S19377C4__A1__8S19377C2[] = {
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C4__A1__8S19377C2[] = {
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
static  VTT_ENTRY vtt_S19377C2[] = {
  {&(_ZTV8S19377C2[5]),  5,80},
  {&(_tg__ZTV8S19377C4__A__8S19377C2[3]),  3,10},
  {&(_tg__ZTV8S19377C58S19377C4__8S19377C2[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C58S19377C4__8S19377C2[4]),  4,6},
  {&(_tg__ZTV8S19377C3__8S19377C4__A__8S19377C2[4]),  4,6},
  {&(_ZTV8S19377C2[16]),  16,80},
  {&(_ZTV8S19377C2[30]),  30,80},
  {&(_ZTV8S19377C2[45]),  45,80},
  {&(_ZTV8S19377C2[70]),  70,80},
  {&(_ZTV8S19377C2[79]),  79,80},
  {&(_ZTV8S19377C2[56]),  56,80},
  {&(_tg__ZTV8S19377C7__8S19377C2[4]),  4,12},
  {&(_tg__ZTV8S19377C58S19377C7__A2__8S19377C2[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C58S19377C7__A2__8S19377C2[4]),  4,6},
  {&(_tg__ZTV8S19377C4__8S19377C7__8S19377C2[10]),  10,17},
  {&(_tg__ZTV8S19377C3__A1__8S19377C7__8S19377C2[4]),  4,6},
  {&(_tg__ZTV8S19377C68S19377C4__8S19377C7__8S19377C2[2]),  2,3},
  {&(_tg__ZTV8S19377C5__A1__8S19377C7__8S19377C2[3]),  3,7},
  {&(_tg__ZTV8S19377C4__A1__8S19377C2[3]),  3,10},
  {&(_tg__ZTV8S19377C58S19377C4__A1__8S19377C2[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C58S19377C4__A1__8S19377C2[4]),  4,6},
  {&(_tg__ZTV8S19377C3__8S19377C4__A1__8S19377C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19377C2[];
extern  VTBL_ENTRY _ZTV8S19377C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C2[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19377C7D0Ev,_ZThn24_N8S19377C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19377C7D1Ev,_ZThn24_N8S19377C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C2D0Ev,_ZTv0_n16_N8S19377C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19377C2D0Ev,_ZThn140_N8S19377C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C2D1Ev,_ZTv0_n16_N8S19377C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19377C2D1Ev,_ZThn140_N8S19377C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19377C2D0Ev,_ZTv0_n28_N8S19377C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19377C2D0Ev,_ZThn116_N8S19377C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19377C2D1Ev,_ZTv0_n28_N8S19377C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19377C2D1Ev,_ZThn116_N8S19377C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19377C2 = {  "S19377C2", // class name
  bases_S19377C2, 11,
  &(vtc_S19377C2[0]), // expected_vtbl_contents
  &(vtt_S19377C2[0]), // expected_vtt_contents
  ABISELECT(400,220), // object size
  NSPAIRA(_ZTI8S19377C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19377C2),80, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19377C2),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19377C1  : virtual S19377C2 {
  int s19377c1f0;
  virtual void  v1(); // _ZN8S19377C12v1Ev
  virtual void  v2(); // _ZN8S19377C12v2Ev
  virtual void  v3(); // _ZN8S19377C12v3Ev
  virtual void  v4(); // _ZN8S19377C12v4Ev
  virtual void  v5(); // _ZN8S19377C12v5Ev
  ~S19377C1(); // tgen
  S19377C1(); // tgen
};
//SIG(1 S19377C1) C1{ VBC2{ BC3{ v6 v7 Fp} BC4{ VBC3 BC5{ VBC3 vd v8 v9 Fp} BC6{ v10} vd v11 v12 v13 FL Fi Fp[8] Fi[2] FD Fi} VBC7{ BC3 VBC4 BC5 vd v14 v15 v16 v17 Fc Fi} v18 v19 v20 v21 Fp[5]} v1 v2 v3 v4 v5 Fi}


void  S19377C1 ::v1(){vfunc_called(this, "_ZN8S19377C12v1Ev");}
void  S19377C1 ::v2(){vfunc_called(this, "_ZN8S19377C12v2Ev");}
void  S19377C1 ::v3(){vfunc_called(this, "_ZN8S19377C12v3Ev");}
void  S19377C1 ::v4(){vfunc_called(this, "_ZN8S19377C12v4Ev");}
void  S19377C1 ::v5(){vfunc_called(this, "_ZN8S19377C12v5Ev");}
S19377C1 ::~S19377C1(){ note_dtor("S19377C1", this);} // tgen
S19377C1 ::S19377C1(){ note_ctor("S19377C1", this);} // tgen

static void Test_S19377C1()
{
  extern Class_Descriptor cd_S19377C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,58)];
    init_test(&cd_S19377C1, buf);
    S19377C1 *dp, &lv = *(dp=new (buf) S19377C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,228), "sizeof(S19377C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19377C1)");
    /*is_ambiguous_... S19377C2::S19377C3 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C2*), ABISELECT(16,8), "S19377C1");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C4*)(S19377C2*), ABISELECT(208,116), "S19377C1");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C5*)(S19377C4*)(S19377C2*), ABISELECT(208,116), "S19377C1");
    /*is_ambiguous_... S19377C1::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C4*), ABISELECT(208,116), "S19377C1");
    /*is_ambiguous_... S19377C1::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C5*)(S19377C4*), ABISELECT(208,116), "S19377C1");
    /*is_ambiguous_... S19377C7::S19377C5 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C5*)(S19377C7*), ABISELECT(208,116), "S19377C1");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C5*)(S19377C4*)(S19377C2*), ABISELECT(32,16), "S19377C1");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C6*)(S19377C4*)(S19377C2*), ABISELECT(48,24), "S19377C1");
    /*is_ambiguous_... S19377C2::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C4*)(S19377C2*), ABISELECT(32,16), "S19377C1");
    /*is_ambiguous_... S19377C7::S19377C3 */ AMB_check_base_class_offset(lv, (S19377C3*)(S19377C7*), ABISELECT(224,124), "S19377C1");
    /*is_ambiguous_... S19377C1::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C5*)(S19377C4*), ABISELECT(272,148), "S19377C1");
    /*is_ambiguous_... S19377C1::S19377C4 */ AMB_check_base_class_offset(lv, (S19377C6*)(S19377C4*), ABISELECT(288,156), "S19377C1");
    check_base_class_offset(lv, (S19377C4*)(S19377C7*), ABISELECT(272,148), "S19377C1");
    /*is_ambiguous_... S19377C7::S19377C5 */ AMB_check_base_class_offset(lv, (S19377C5*)(S19377C7*), ABISELECT(240,132), "S19377C1");
    check_base_class_offset(lv, (S19377C7*)(S19377C2*), ABISELECT(224,124), "S19377C1");
    check_base_class_offset(lv, (S19377C2*), ABISELECT(16,8), "S19377C1");
    check_field_offset(lv, s19377c1f0, ABISELECT(8,4), "S19377C1.s19377c1f0");
    test_class_info(&lv, &cd_S19377C1);
    dp->~S19377C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19377C1(Test_S19377C1, "S19377C1", ABISELECT(416,228));

#else // __cplusplus

extern void _ZN8S19377C1C1Ev();
extern void _ZN8S19377C1D1Ev();
Name_Map name_map_S19377C1[] = {
  NSPAIR(_ZN8S19377C1C1Ev),
  NSPAIR(_ZN8S19377C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C6;
extern VTBL_ENTRY _ZTI8S19377C6[];
extern  VTBL_ENTRY _ZTV8S19377C6[];
extern Class_Descriptor cd_S19377C4;
extern VTBL_ENTRY _ZTI8S19377C4[];
extern  VTBL_ENTRY _ZTV8S19377C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C4[];
extern Class_Descriptor cd_S19377C3;
extern VTBL_ENTRY _ZTI8S19377C3[];
extern  VTBL_ENTRY _ZTV8S19377C3[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C6;
extern VTBL_ENTRY _ZTI8S19377C6[];
extern  VTBL_ENTRY _ZTV8S19377C6[];
extern Class_Descriptor cd_S19377C4;
extern VTBL_ENTRY _ZTI8S19377C4[];
extern  VTBL_ENTRY _ZTV8S19377C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C4[];
extern Class_Descriptor cd_S19377C5;
extern VTBL_ENTRY _ZTI8S19377C5[];
extern  VTBL_ENTRY _ZTV8S19377C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C5[];
extern Class_Descriptor cd_S19377C7;
extern VTBL_ENTRY _ZTI8S19377C7[];
extern  VTBL_ENTRY _ZTV8S19377C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C7[];
extern Class_Descriptor cd_S19377C2;
extern VTBL_ENTRY _ZTI8S19377C2[];
extern  VTBL_ENTRY _ZTV8S19377C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C2[];
static Base_Class bases_S19377C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19377C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19377C3,    ABISELECT(208,116), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19377C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19377C6,    ABISELECT(48,24), //bcp->offset
    49, //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
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19377C4,    ABISELECT(32,16), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19377C3,    ABISELECT(224,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19377C5,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19377C6,    ABISELECT(288,156), //bcp->offset
    103, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19377C4,    ABISELECT(272,148), //bcp->offset
    86, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19377C5,    ABISELECT(240,132), //bcp->offset
    79, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19377C7,    ABISELECT(224,124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19377C2,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19377C1[];
extern void _ZN8S19377C12v1Ev();
extern void _ZN8S19377C12v2Ev();
extern void _ZN8S19377C12v3Ev();
extern void _ZN8S19377C12v4Ev();
extern void _ZN8S19377C12v5Ev();
extern void _ZN8S19377C1D1Ev();
extern void _ZN8S19377C1D0Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C23v18Ev();
extern void _ZN8S19377C23v19Ev();
extern void _ZN8S19377C23v20Ev();
extern void _ZN8S19377C23v21Ev();
extern void ABISELECT(_ZTv0_n96_N8S19377C1D1Ev,_ZTv0_n48_N8S19377C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19377C1D1Ev,_ZThn8_N8S19377C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19377C1D0Ev,_ZTv0_n48_N8S19377C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19377C1D0Ev,_ZThn8_N8S19377C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n96_N8S19377C1D1Ev,_ZTvn8_n48_N8S19377C1D1Ev)();
extern void ABISELECT(_ZTvn16_n96_N8S19377C1D0Ev,_ZTvn8_n48_N8S19377C1D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
extern void _ZN8S19377C63v10Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S19377C1D1Ev,_ZTv0_n28_N8S19377C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19377C1D1Ev,_ZThn124_N8S19377C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19377C1D0Ev,_ZTv0_n28_N8S19377C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19377C1D0Ev,_ZThn124_N8S19377C1D0Ev)() __attribute__((weak));
extern void _ZN8S19377C73v14Ev();
extern void _ZN8S19377C73v15Ev();
extern void _ZN8S19377C73v16Ev();
extern void _ZN8S19377C73v17Ev();
extern void ABISELECT(_ZTvn16_n56_N8S19377C1D1Ev,_ZTvn8_n28_N8S19377C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19377C1D0Ev,_ZTvn8_n28_N8S19377C1D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S19377C1D1Ev,_ZTv0_n16_N8S19377C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S19377C1D1Ev,_ZThn148_N8S19377C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19377C1D0Ev,_ZTv0_n16_N8S19377C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S19377C1D0Ev,_ZThn148_N8S19377C1D0Ev)() __attribute__((weak));
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
extern void _ZN8S19377C63v10Ev();
static  VTBL_ENTRY vtc_S19377C1[] = {
  ABISELECT(272,148),
  ABISELECT(224,124),
  ABISELECT(208,116),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&_ZN8S19377C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19377C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19377C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19377C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19377C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19377C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C1D0Ev,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(256,140),
  ABISELECT(208,116),
  ABISELECT(192,108),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19377C1D1Ev,_ZTv0_n48_N8S19377C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19377C1D0Ev,_ZTv0_n48_N8S19377C1D0Ev),
  ABISELECT(176,100),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n96_N8S19377C1D1Ev,_ZTvn8_n48_N8S19377C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n96_N8S19377C1D0Ev,_ZTvn8_n48_N8S19377C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-224,-124),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19377C1D1Ev,_ZTv0_n28_N8S19377C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19377C1D0Ev,_ZTv0_n28_N8S19377C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v17Ev,
  ABISELECT(-32,-16),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19377C1D1Ev,_ZTvn8_n28_N8S19377C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19377C1D0Ev,_ZTvn8_n28_N8S19377C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-272,-148),
  ABISELECT(-64,-32),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C1D1Ev,_ZTv0_n16_N8S19377C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C1D0Ev,_ZTv0_n16_N8S19377C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19377C1[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
};
extern VTBL_ENTRY _ZTV8S19377C1[];
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C23v18Ev();
extern void _ZN8S19377C23v19Ev();
extern void _ZN8S19377C23v20Ev();
extern void _ZN8S19377C23v21Ev();
extern void _ZN8S19377C2D1Ev();
extern void _ZN8S19377C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C2__8S19377C1[] = {
  ABISELECT(256,140),
  ABISELECT(208,116),
  ABISELECT(192,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v18Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v19Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v20Ev,
  (VTBL_ENTRY)&_ZN8S19377C23v21Ev,
  (VTBL_ENTRY)&_ZN8S19377C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C2D0Ev,
};
extern void _ZN8S19377C4D1Ev();
extern void _ZN8S19377C4D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C48S19377C2__8S19377C1[] = {
  ABISELECT(176,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C48S19377C2__8S19377C1[] = {
  ABISELECT(176,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C58S19377C48S19377C2__8S19377C1[] = {
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C48S19377C2__8S19377C1[] = {
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void ABISELECT(_ZThn16_N8S19377C2D1Ev,_ZThn8_N8S19377C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19377C2D0Ev,_ZThn8_N8S19377C2D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__A__8S19377C2__8S19377C1[] = {
  ABISELECT(176,100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C2D1Ev,_ZThn8_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C2D0Ev,_ZThn8_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__A1__8S19377C2__8S19377C1[] = {
  0,
  0,
  ABISELECT(-192,-108),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S19377C2D1Ev,_ZTv0_n28_N8S19377C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S19377C2D1Ev,_ZThn116_N8S19377C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19377C2D0Ev,_ZTv0_n28_N8S19377C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S19377C2D0Ev,_ZThn116_N8S19377C2D0Ev)() __attribute__((weak));
extern void _ZN8S19377C73v14Ev();
extern void _ZN8S19377C73v15Ev();
extern void _ZN8S19377C73v16Ev();
extern void _ZN8S19377C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C7__8S19377C2__8S19377C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19377C2D1Ev,_ZTv0_n28_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19377C2D0Ev,_ZTv0_n28_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v17Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19377C2D1Ev,_ZTv0_n16_N8S19377C2D1Ev)();
extern void ABISELECT(_ZThn256_N8S19377C2D1Ev,_ZThn140_N8S19377C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19377C2D0Ev,_ZTv0_n16_N8S19377C2D0Ev)();
extern void ABISELECT(_ZThn256_N8S19377C2D0Ev,_ZThn140_N8S19377C2D0Ev)() __attribute__((weak));
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__A1__8S19377C2__8S19377C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-256,-140),
  ABISELECT(-64,-32),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C2D1Ev,_ZTv0_n16_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C2D0Ev,_ZTv0_n16_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C63v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C68S19377C4__A1__8S19377C2__8S19377C1[] = {
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
};
extern void ABISELECT(_ZTvn16_n56_N8S19377C2D1Ev,_ZTvn8_n28_N8S19377C2D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19377C2D0Ev,_ZTvn8_n28_N8S19377C2D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C7__A2__8S19377C2__8S19377C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19377C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19377C2D1Ev,_ZTvn8_n28_N8S19377C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19377C2D0Ev,_ZTvn8_n28_N8S19377C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
extern void _ZN8S19377C7D1Ev();
extern void _ZN8S19377C7D0Ev();
extern void _ZN8S19377C73v14Ev();
extern void _ZN8S19377C73v15Ev();
extern void _ZN8S19377C73v16Ev();
extern void _ZN8S19377C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C7__8S19377C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19377C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19377C73v17Ev,
};
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C7__A2__8S19377C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C58S19377C7__A2__8S19377C1[] = {
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19377C7D1Ev,_ZThn24_N8S19377C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19377C7D0Ev,_ZThn24_N8S19377C7D0Ev)() __attribute__((weak));
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__8S19377C7__8S19377C1[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__A1__8S19377C7__8S19377C1[] = {
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C63v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C68S19377C4__8S19377C7__8S19377C1[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&_ZN8S19377C63v10Ev,
};
extern void ABISELECT(_ZThn16_N8S19377C7D1Ev,_ZThn8_N8S19377C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19377C7D0Ev,_ZThn8_N8S19377C7D0Ev)();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C5__A1__8S19377C7__8S19377C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19377C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C7D1Ev,_ZThn8_N8S19377C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19377C7D0Ev,_ZThn8_N8S19377C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C4D1Ev();
extern void _ZN8S19377C4D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
extern void _ZN8S19377C43v11Ev();
extern void _ZN8S19377C43v12Ev();
extern void _ZN8S19377C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C4__A1__8S19377C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19377C43v13Ev,
};
extern void _ZN8S19377C5D1Ev();
extern void _ZN8S19377C5D0Ev();
extern void _ZN8S19377C52v8Ev();
extern void _ZN8S19377C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C58S19377C4__A1__8S19377C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19377C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19377C52v9Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C58S19377C4__A1__8S19377C1[] = {
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19377C5[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
extern void _ZN8S19377C32v6Ev();
extern void _ZN8S19377C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19377C3__8S19377C4__A1__8S19377C1[] = {
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19377C4[0]),
  (VTBL_ENTRY)&_ZN8S19377C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19377C32v7Ev,
};
static  VTT_ENTRY vtt_S19377C1[] = {
  {&(_ZTV8S19377C1[6]),  6,106},
  {&(_ZTV8S19377C1[31]),  31,106},
  {&(_ZTV8S19377C1[42]),  42,106},
  {&(_ZTV8S19377C1[56]),  56,106},
  {&(_ZTV8S19377C1[51]),  51,106},
  {&(_ZTV8S19377C1[71]),  71,106},
  {&(_ZTV8S19377C1[96]),  96,106},
  {&(_ZTV8S19377C1[105]),  105,106},
  {&(_ZTV8S19377C1[82]),  82,106},
  {&(_tg__ZTV8S19377C2__8S19377C1[5]),  5,13},
  {&(_tg__ZTV8S19377C48S19377C2__8S19377C1[3]),  3,10},
  {&(_tg__ZTV8S19377C58S19377C48S19377C2__8S19377C1[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C58S19377C48S19377C2__8S19377C1[4]),  4,6},
  {&(_tg__ZTV8S19377C3__8S19377C48S19377C2__8S19377C1[4]),  4,6},
  {&(_tg__ZTV8S19377C4__A__8S19377C2__8S19377C1[3]),  3,10},
  {&(_tg__ZTV8S19377C3__A1__8S19377C2__8S19377C1[4]),  4,6},
  {&(_tg__ZTV8S19377C7__8S19377C2__8S19377C1[13]),  13,21},
  {&(_tg__ZTV8S19377C4__A1__8S19377C2__8S19377C1[10]),  10,17},
  {&(_tg__ZTV8S19377C68S19377C4__A1__8S19377C2__8S19377C1[2]),  2,3},
  {&(_tg__ZTV8S19377C58S19377C7__A2__8S19377C2__8S19377C1[3]),  3,7},
  {&(_tg__ZTV8S19377C7__8S19377C1[4]),  4,12},
  {&(_tg__ZTV8S19377C58S19377C7__A2__8S19377C1[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C58S19377C7__A2__8S19377C1[4]),  4,6},
  {&(_tg__ZTV8S19377C4__8S19377C7__8S19377C1[10]),  10,17},
  {&(_tg__ZTV8S19377C3__A1__8S19377C7__8S19377C1[4]),  4,6},
  {&(_tg__ZTV8S19377C68S19377C4__8S19377C7__8S19377C1[2]),  2,3},
  {&(_tg__ZTV8S19377C5__A1__8S19377C7__8S19377C1[3]),  3,7},
  {&(_tg__ZTV8S19377C4__A1__8S19377C1[3]),  3,10},
  {&(_tg__ZTV8S19377C58S19377C4__A1__8S19377C1[3]),  3,7},
  {&(_tg__ZTV8S19377C3__8S19377C58S19377C4__A1__8S19377C1[4]),  4,6},
  {&(_tg__ZTV8S19377C3__8S19377C4__A1__8S19377C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19377C1[];
extern  VTBL_ENTRY _ZTV8S19377C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19377C1[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C7D0Ev,_ZTv0_n16_N8S19377C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19377C7D0Ev,_ZThn24_N8S19377C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C7D1Ev,_ZTv0_n16_N8S19377C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19377C7D1Ev,_ZThn24_N8S19377C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C2D0Ev,_ZTv0_n16_N8S19377C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19377C2D0Ev,_ZThn140_N8S19377C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C2D1Ev,_ZTv0_n16_N8S19377C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19377C2D1Ev,_ZThn140_N8S19377C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19377C2D0Ev,_ZTv0_n28_N8S19377C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19377C2D0Ev,_ZThn116_N8S19377C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19377C2D1Ev,_ZTv0_n28_N8S19377C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19377C2D1Ev,_ZThn116_N8S19377C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C1D0Ev,_ZTv0_n16_N8S19377C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19377C1D0Ev,_ZThn148_N8S19377C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19377C1D1Ev,_ZTv0_n16_N8S19377C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19377C1D1Ev,_ZThn148_N8S19377C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19377C1D0Ev,_ZTv0_n28_N8S19377C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19377C1D0Ev,_ZThn124_N8S19377C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19377C1D1Ev,_ZTv0_n28_N8S19377C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19377C1D1Ev,_ZThn124_N8S19377C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19377C1D0Ev,_ZTv0_n48_N8S19377C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19377C1D0Ev,_ZThn8_N8S19377C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19377C1D1Ev,_ZTv0_n48_N8S19377C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19377C1D1Ev,_ZThn8_N8S19377C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19377C1 = {  "S19377C1", // class name
  bases_S19377C1, 12,
  &(vtc_S19377C1[0]), // expected_vtbl_contents
  &(vtt_S19377C1[0]), // expected_vtt_contents
  ABISELECT(416,228), // object size
  NSPAIRA(_ZTI8S19377C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19377C1),106, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19377C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7180C2  {
  void *s7180c2f0;
  virtual void  v9(); // _ZN7S7180C22v9Ev
  virtual void  v10(); // _ZN7S7180C23v10Ev
  virtual void  v11(); // _ZN7S7180C23v11Ev
  virtual void  v12(); // _ZN7S7180C23v12Ev
  virtual void  v13(); // _ZN7S7180C23v13Ev
  virtual void  v14(); // _ZN7S7180C23v14Ev
  virtual void  v15(); // _ZN7S7180C23v15Ev
  virtual void  v16(); // _ZN7S7180C23v16Ev
  ~S7180C2(); // tgen
  S7180C2(); // tgen
};
//SIG(-1 S7180C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fp}


void  S7180C2 ::v9(){vfunc_called(this, "_ZN7S7180C22v9Ev");}
void  S7180C2 ::v10(){vfunc_called(this, "_ZN7S7180C23v10Ev");}
void  S7180C2 ::v11(){vfunc_called(this, "_ZN7S7180C23v11Ev");}
void  S7180C2 ::v12(){vfunc_called(this, "_ZN7S7180C23v12Ev");}
void  S7180C2 ::v13(){vfunc_called(this, "_ZN7S7180C23v13Ev");}
void  S7180C2 ::v14(){vfunc_called(this, "_ZN7S7180C23v14Ev");}
void  S7180C2 ::v15(){vfunc_called(this, "_ZN7S7180C23v15Ev");}
void  S7180C2 ::v16(){vfunc_called(this, "_ZN7S7180C23v16Ev");}
S7180C2 ::~S7180C2(){ note_dtor("S7180C2", this);} // tgen
S7180C2 ::S7180C2(){ note_ctor("S7180C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7180C2C1Ev();
extern void _ZN7S7180C2D1Ev();
Name_Map name_map_S7180C2[] = {
  NSPAIR(_ZN7S7180C2C1Ev),
  NSPAIR(_ZN7S7180C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7180C2[];
extern void _ZN7S7180C22v9Ev();
extern void _ZN7S7180C23v10Ev();
extern void _ZN7S7180C23v11Ev();
extern void _ZN7S7180C23v12Ev();
extern void _ZN7S7180C23v13Ev();
extern void _ZN7S7180C23v14Ev();
extern void _ZN7S7180C23v15Ev();
extern void _ZN7S7180C23v16Ev();
static  VTBL_ENTRY vtc_S7180C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7180C2[0]),
  (VTBL_ENTRY)&_ZN7S7180C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S7180C2[];
extern  VTBL_ENTRY _ZTV7S7180C2[];
Class_Descriptor cd_S7180C2 = {  "S7180C2", // class name
  0,0,//no base classes
  &(vtc_S7180C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7180C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7180C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7180C1  : S7180C2 {
  void *s7180c1f0;
  int s7180c1f1;
  void *s7180c1f2[2];
  ::S7179C4_nt s7180c1f3;
  ::S6060C20 s7180c1f4;
  ::S6712C22 s7180c1f5;
  unsigned int s7180c1f6:1;
  unsigned int s7180c1f7:1;
  unsigned int s7180c1f8:1;
  virtual void  v1(); // _ZN7S7180C12v1Ev
  virtual void  v2(); // _ZN7S7180C12v2Ev
  virtual void  v3(); // _ZN7S7180C12v3Ev
  virtual void  v4(); // _ZN7S7180C12v4Ev
  virtual void  v5(); // _ZN7S7180C12v5Ev
  virtual void  v6(); // _ZN7S7180C12v6Ev
  virtual void  v7(); // _ZN7S7180C12v7Ev
  virtual void  v8(); // _ZN7S7180C12v8Ev
  ~S7180C1(); // tgen
  S7180C1(); // tgen
};
//SIG(1 S7180C1) C1{ BC2{ v9 v10 v11 v12 v13 v14 v15 v16 Fp} v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi Fp[2] FC3{ m Fi} FC4{ m FC5{ BC6{ m Fp Fi[2]}} FC7{ BC6} FC7 Fi[2] FC8{ BC6} FC5 FC8} FC9{ BC6} Fi:1 Fi:1 Fi:1}


void  S7180C1 ::v1(){vfunc_called(this, "_ZN7S7180C12v1Ev");}
void  S7180C1 ::v2(){vfunc_called(this, "_ZN7S7180C12v2Ev");}
void  S7180C1 ::v3(){vfunc_called(this, "_ZN7S7180C12v3Ev");}
void  S7180C1 ::v4(){vfunc_called(this, "_ZN7S7180C12v4Ev");}
void  S7180C1 ::v5(){vfunc_called(this, "_ZN7S7180C12v5Ev");}
void  S7180C1 ::v6(){vfunc_called(this, "_ZN7S7180C12v6Ev");}
void  S7180C1 ::v7(){vfunc_called(this, "_ZN7S7180C12v7Ev");}
void  S7180C1 ::v8(){vfunc_called(this, "_ZN7S7180C12v8Ev");}
S7180C1 ::~S7180C1(){ note_dtor("S7180C1", this);} // tgen
S7180C1 ::S7180C1(){ note_ctor("S7180C1", this);} // tgen

static void Test_S7180C1()
{
  extern Class_Descriptor cd_S7180C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S7180C1, buf);
    S7180C1 *dp, &lv = *(dp=new (buf) S7180C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S7180C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7180C1)");
    check_base_class_offset(lv, (S7180C2*), 0, "S7180C1");
    check_field_offset(lv, s7180c1f0, ABISELECT(16,8), "S7180C1.s7180c1f0");
    check_field_offset(lv, s7180c1f1, ABISELECT(24,12), "S7180C1.s7180c1f1");
    check_field_offset(lv, s7180c1f2, ABISELECT(32,16), "S7180C1.s7180c1f2");
    check_field_offset(lv, s7180c1f3, ABISELECT(48,24), "S7180C1.s7180c1f3");
    check_field_offset(lv, s7180c1f4, ABISELECT(56,28), "S7180C1.s7180c1f4");
    check_field_offset(lv, s7180c1f5, ABISELECT(160,108), "S7180C1.s7180c1f5");
    set_bf_and_test(lv, s7180c1f6, ABISELECT(176,120), 0, 1, 1, "S7180C1");
    set_bf_and_test(lv, s7180c1f7, ABISELECT(176,120), 1, 1, 1, "S7180C1");
    set_bf_and_test(lv, s7180c1f8, ABISELECT(176,120), 2, 1, 1, "S7180C1");
    test_class_info(&lv, &cd_S7180C1);
    dp->~S7180C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7180C1(Test_S7180C1, "S7180C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S7180C1C1Ev();
extern void _ZN7S7180C1D1Ev();
Name_Map name_map_S7180C1[] = {
  NSPAIR(_ZN7S7180C1C1Ev),
  NSPAIR(_ZN7S7180C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7180C2;
extern VTBL_ENTRY _ZTI7S7180C2[];
extern  VTBL_ENTRY _ZTV7S7180C2[];
static Base_Class bases_S7180C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7180C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7180C1[];
extern void _ZN7S7180C22v9Ev();
extern void _ZN7S7180C23v10Ev();
extern void _ZN7S7180C23v11Ev();
extern void _ZN7S7180C23v12Ev();
extern void _ZN7S7180C23v13Ev();
extern void _ZN7S7180C23v14Ev();
extern void _ZN7S7180C23v15Ev();
extern void _ZN7S7180C23v16Ev();
extern void _ZN7S7180C12v1Ev();
extern void _ZN7S7180C12v2Ev();
extern void _ZN7S7180C12v3Ev();
extern void _ZN7S7180C12v4Ev();
extern void _ZN7S7180C12v5Ev();
extern void _ZN7S7180C12v6Ev();
extern void _ZN7S7180C12v7Ev();
extern void _ZN7S7180C12v8Ev();
static  VTBL_ENTRY vtc_S7180C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7180C1[0]),
  (VTBL_ENTRY)&_ZN7S7180C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7180C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7180C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S7180C1[];
extern  VTBL_ENTRY _ZTV7S7180C1[];
Class_Descriptor cd_S7180C1 = {  "S7180C1", // class name
  bases_S7180C1, 1,
  &(vtc_S7180C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S7180C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7180C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8597C2_nt  {
  virtual  ~S8597C2_nt(); // _ZN10S8597C2_ntD1Ev
  virtual void  v13(); // _ZN10S8597C2_nt3v13Ev
  virtual void  v14(); // _ZN10S8597C2_nt3v14Ev
  virtual void  v15(); // _ZN10S8597C2_nt3v15Ev
  virtual void  v16(); // _ZN10S8597C2_nt3v16Ev
  virtual void  v17(); // _ZN10S8597C2_nt3v17Ev
  virtual void  v18(); // _ZN10S8597C2_nt3v18Ev
  virtual void  v19(); // _ZN10S8597C2_nt3v19Ev
  virtual void  v20(); // _ZN10S8597C2_nt3v20Ev
  virtual void  v21(); // _ZN10S8597C2_nt3v21Ev
  S8597C2_nt(); // tgen
};
//SIG(-1 S8597C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S8597C2_nt ::~S8597C2_nt(){ note_dtor("S8597C2_nt", this);}
void  S8597C2_nt ::v13(){vfunc_called(this, "_ZN10S8597C2_nt3v13Ev");}
void  S8597C2_nt ::v14(){vfunc_called(this, "_ZN10S8597C2_nt3v14Ev");}
void  S8597C2_nt ::v15(){vfunc_called(this, "_ZN10S8597C2_nt3v15Ev");}
void  S8597C2_nt ::v16(){vfunc_called(this, "_ZN10S8597C2_nt3v16Ev");}
void  S8597C2_nt ::v17(){vfunc_called(this, "_ZN10S8597C2_nt3v17Ev");}
void  S8597C2_nt ::v18(){vfunc_called(this, "_ZN10S8597C2_nt3v18Ev");}
void  S8597C2_nt ::v19(){vfunc_called(this, "_ZN10S8597C2_nt3v19Ev");}
void  S8597C2_nt ::v20(){vfunc_called(this, "_ZN10S8597C2_nt3v20Ev");}
void  S8597C2_nt ::v21(){vfunc_called(this, "_ZN10S8597C2_nt3v21Ev");}
S8597C2_nt ::S8597C2_nt(){ note_ctor("S8597C2_nt", this);} // tgen

//skip512 S8597C2_nt

#else // __cplusplus

extern void _ZN10S8597C2_ntC1Ev();
extern void _ZN10S8597C2_ntD1Ev();
Name_Map name_map_S8597C2_nt[] = {
  NSPAIR(_ZN10S8597C2_ntC1Ev),
  NSPAIR(_ZN10S8597C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8597C2_nt[];
extern void _ZN10S8597C2_ntD1Ev();
extern void _ZN10S8597C2_ntD0Ev();
extern void _ZN10S8597C2_nt3v13Ev();
extern void _ZN10S8597C2_nt3v14Ev();
extern void _ZN10S8597C2_nt3v15Ev();
extern void _ZN10S8597C2_nt3v16Ev();
extern void _ZN10S8597C2_nt3v17Ev();
extern void _ZN10S8597C2_nt3v18Ev();
extern void _ZN10S8597C2_nt3v19Ev();
extern void _ZN10S8597C2_nt3v20Ev();
extern void _ZN10S8597C2_nt3v21Ev();
static  VTBL_ENTRY vtc_S8597C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8597C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8597C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI10S8597C2_nt[];
VTBL_ENTRY *P__ZTI10S8597C2_nt = _ZTI10S8597C2_nt; 
extern  VTBL_ENTRY _ZTV10S8597C2_nt[];
Class_Descriptor cd_S8597C2_nt = {  "S8597C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8597C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8597C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8597C2_nt),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8597C6  {
  virtual  ~S8597C6(); // _ZN7S8597C6D1Ev
  virtual void  v22(); // _ZN7S8597C63v22Ev
  S8597C6(); // tgen
};
//SIG(-1 S8597C6) C1{ vd v1}


 S8597C6 ::~S8597C6(){ note_dtor("S8597C6", this);}
void  S8597C6 ::v22(){vfunc_called(this, "_ZN7S8597C63v22Ev");}
S8597C6 ::S8597C6(){ note_ctor("S8597C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S8597C6C1Ev();
extern void _ZN7S8597C6D1Ev();
Name_Map name_map_S8597C6[] = {
  NSPAIR(_ZN7S8597C6C1Ev),
  NSPAIR(_ZN7S8597C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8597C6[];
extern void _ZN7S8597C6D1Ev();
extern void _ZN7S8597C6D0Ev();
extern void _ZN7S8597C63v22Ev();
static  VTBL_ENTRY vtc_S8597C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8597C6[0]),
  (VTBL_ENTRY)&_ZN7S8597C6D1Ev,
  (VTBL_ENTRY)&_ZN7S8597C6D0Ev,
  (VTBL_ENTRY)&_ZN7S8597C63v22Ev,
};
extern VTBL_ENTRY _ZTI7S8597C6[];
extern  VTBL_ENTRY _ZTV7S8597C6[];
Class_Descriptor cd_S8597C6 = {  "S8597C6", // class name
  0,0,//no base classes
  &(vtc_S8597C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8597C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8597C6),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  S8597C7  {
  virtual  ~S8597C7(); // _ZN7S8597C7D1Ev
  virtual void  v23(); // _ZN7S8597C73v23Ev
  S8597C7(); // tgen
};
//SIG(-1 S8597C7) C1{ vd v1}


 S8597C7 ::~S8597C7(){ note_dtor("S8597C7", this);}
void  S8597C7 ::v23(){vfunc_called(this, "_ZN7S8597C73v23Ev");}
S8597C7 ::S8597C7(){ note_ctor("S8597C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S8597C7C1Ev();
extern void _ZN7S8597C7D1Ev();
Name_Map name_map_S8597C7[] = {
  NSPAIR(_ZN7S8597C7C1Ev),
  NSPAIR(_ZN7S8597C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8597C7[];
extern void _ZN7S8597C7D1Ev();
extern void _ZN7S8597C7D0Ev();
extern void _ZN7S8597C73v23Ev();
static  VTBL_ENTRY vtc_S8597C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8597C7[0]),
  (VTBL_ENTRY)&_ZN7S8597C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8597C7D0Ev,
  (VTBL_ENTRY)&_ZN7S8597C73v23Ev,
};
extern VTBL_ENTRY _ZTI7S8597C7[];
extern  VTBL_ENTRY _ZTV7S8597C7[];
Class_Descriptor cd_S8597C7 = {  "S8597C7", // class name
  0,0,//no base classes
  &(vtc_S8597C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8597C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8597C7),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  S8597C8  {
  virtual  ~S8597C8(); // _ZN7S8597C8D1Ev
  virtual void  v24(); // _ZN7S8597C83v24Ev
  S8597C8(); // tgen
};
//SIG(-1 S8597C8) C1{ vd v1}


 S8597C8 ::~S8597C8(){ note_dtor("S8597C8", this);}
void  S8597C8 ::v24(){vfunc_called(this, "_ZN7S8597C83v24Ev");}
S8597C8 ::S8597C8(){ note_ctor("S8597C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S8597C8C1Ev();
extern void _ZN7S8597C8D1Ev();
Name_Map name_map_S8597C8[] = {
  NSPAIR(_ZN7S8597C8C1Ev),
  NSPAIR(_ZN7S8597C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8597C8[];
extern void _ZN7S8597C8D1Ev();
extern void _ZN7S8597C8D0Ev();
extern void _ZN7S8597C83v24Ev();
static  VTBL_ENTRY vtc_S8597C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8597C8[0]),
  (VTBL_ENTRY)&_ZN7S8597C8D1Ev,
  (VTBL_ENTRY)&_ZN7S8597C8D0Ev,
  (VTBL_ENTRY)&_ZN7S8597C83v24Ev,
};
extern VTBL_ENTRY _ZTI7S8597C8[];
extern  VTBL_ENTRY _ZTV7S8597C8[];
Class_Descriptor cd_S8597C8 = {  "S8597C8", // class name
  0,0,//no base classes
  &(vtc_S8597C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8597C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8597C8),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  S8597C1  : S8597C2_nt , S7368C49 , S8597C6 , S8597C7 , S8597C8 {
  void *s8597c1f0;
  int s8597c1f1;
  char s8597c1f2[2];
  void *s8597c1f3;
  __tsi64 s8597c1f4;
  virtual  ~S8597C1(); // _ZN7S8597C1D1Ev
  virtual void  v1(); // _ZN7S8597C12v1Ev
  virtual void  v2(); // _ZN7S8597C12v2Ev
  virtual void  v3(); // _ZN7S8597C12v3Ev
  virtual void  v4(); // _ZN7S8597C12v4Ev
  virtual void  v5(); // _ZN7S8597C12v5Ev
  virtual void  v6(); // _ZN7S8597C12v6Ev
  virtual void  v7(); // _ZN7S8597C12v7Ev
  virtual void  v8(); // _ZN7S8597C12v8Ev
  virtual void  v9(); // _ZN7S8597C12v9Ev
  virtual void  v10(); // _ZN7S8597C13v10Ev
  virtual void  v11(); // _ZN7S8597C13v11Ev
  virtual void  v12(); // _ZN7S8597C13v12Ev
  S8597C1(); // tgen
};
//SIG(1 S8597C1) C1{ BC2{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21} BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} BC6{ vd v22} BC7{ vd v23} BC8{ vd v24} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp Fi Fc[2] Fp FL}


 S8597C1 ::~S8597C1(){ note_dtor("S8597C1", this);}
void  S8597C1 ::v1(){vfunc_called(this, "_ZN7S8597C12v1Ev");}
void  S8597C1 ::v2(){vfunc_called(this, "_ZN7S8597C12v2Ev");}
void  S8597C1 ::v3(){vfunc_called(this, "_ZN7S8597C12v3Ev");}
void  S8597C1 ::v4(){vfunc_called(this, "_ZN7S8597C12v4Ev");}
void  S8597C1 ::v5(){vfunc_called(this, "_ZN7S8597C12v5Ev");}
void  S8597C1 ::v6(){vfunc_called(this, "_ZN7S8597C12v6Ev");}
void  S8597C1 ::v7(){vfunc_called(this, "_ZN7S8597C12v7Ev");}
void  S8597C1 ::v8(){vfunc_called(this, "_ZN7S8597C12v8Ev");}
void  S8597C1 ::v9(){vfunc_called(this, "_ZN7S8597C12v9Ev");}
void  S8597C1 ::v10(){vfunc_called(this, "_ZN7S8597C13v10Ev");}
void  S8597C1 ::v11(){vfunc_called(this, "_ZN7S8597C13v11Ev");}
void  S8597C1 ::v12(){vfunc_called(this, "_ZN7S8597C13v12Ev");}
S8597C1 ::S8597C1(){ note_ctor("S8597C1", this);} // tgen

static void Test_S8597C1()
{
  extern Class_Descriptor cd_S8597C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S8597C1, buf);
    S8597C1 *dp, &lv = *(dp=new (buf) S8597C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S8597C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8597C1)");
    check_base_class_offset(lv, (S8597C2_nt*), 0, "S8597C1");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(8,4), "S8597C1");
    check_base_class_offset(lv, (S8597C6*), ABISELECT(40,24), "S8597C1");
    check_base_class_offset(lv, (S8597C7*), ABISELECT(48,28), "S8597C1");
    check_base_class_offset(lv, (S8597C8*), ABISELECT(56,32), "S8597C1");
    check_field_offset(lv, s8597c1f0, ABISELECT(64,36), "S8597C1.s8597c1f0");
    check_field_offset(lv, s8597c1f1, ABISELECT(72,40), "S8597C1.s8597c1f1");
    check_field_offset(lv, s8597c1f2, ABISELECT(76,44), "S8597C1.s8597c1f2");
    check_field_offset(lv, s8597c1f3, ABISELECT(80,48), "S8597C1.s8597c1f3");
    check_field_offset(lv, s8597c1f4, ABISELECT(88,52), "S8597C1.s8597c1f4");
    test_class_info(&lv, &cd_S8597C1);
    dp->~S8597C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8597C1(Test_S8597C1, "S8597C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S8597C1C1Ev();
extern void _ZN7S8597C1D1Ev();
Name_Map name_map_S8597C1[] = {
  NSPAIR(_ZN7S8597C1C1Ev),
  NSPAIR(_ZN7S8597C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8597C2_nt;
extern VTBL_ENTRY _ZTI10S8597C2_nt[];
extern  VTBL_ENTRY _ZTV10S8597C2_nt[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S8597C6;
extern VTBL_ENTRY _ZTI7S8597C6[];
extern  VTBL_ENTRY _ZTV7S8597C6[];
extern Class_Descriptor cd_S8597C7;
extern VTBL_ENTRY _ZTI7S8597C7[];
extern  VTBL_ENTRY _ZTV7S8597C7[];
extern Class_Descriptor cd_S8597C8;
extern VTBL_ENTRY _ZTI7S8597C8[];
extern  VTBL_ENTRY _ZTV7S8597C8[];
static Base_Class bases_S8597C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8597C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(8,4), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8597C6,    ABISELECT(40,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8597C7,    ABISELECT(48,28), //bcp->offset
    34, //bcp->virtual_function_table_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_S8597C8,    ABISELECT(56,32), //bcp->offset
    39, //bcp->virtual_function_table_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 _ZTI7S8597C1[];
extern void _ZN7S8597C1D1Ev();
extern void _ZN7S8597C1D0Ev();
extern void _ZN10S8597C2_nt3v13Ev();
extern void _ZN10S8597C2_nt3v14Ev();
extern void _ZN10S8597C2_nt3v15Ev();
extern void _ZN10S8597C2_nt3v16Ev();
extern void _ZN10S8597C2_nt3v17Ev();
extern void _ZN10S8597C2_nt3v18Ev();
extern void _ZN10S8597C2_nt3v19Ev();
extern void _ZN10S8597C2_nt3v20Ev();
extern void _ZN10S8597C2_nt3v21Ev();
extern void _ZN7S8597C12v1Ev();
extern void _ZN7S8597C12v2Ev();
extern void _ZN7S8597C12v3Ev();
extern void _ZN7S8597C12v4Ev();
extern void _ZN7S8597C12v5Ev();
extern void _ZN7S8597C12v6Ev();
extern void _ZN7S8597C12v7Ev();
extern void _ZN7S8597C12v8Ev();
extern void _ZN7S8597C12v9Ev();
extern void _ZN7S8597C13v10Ev();
extern void _ZN7S8597C13v11Ev();
extern void _ZN7S8597C13v12Ev();
extern void ABISELECT(_ZThn8_N7S8597C1D1Ev,_ZThn4_N7S8597C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8597C1D0Ev,_ZThn4_N7S8597C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S8597C1D1Ev,_ZThn24_N7S8597C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S8597C1D0Ev,_ZThn24_N7S8597C1D0Ev)();
extern void _ZN7S8597C63v22Ev();
extern void ABISELECT(_ZThn48_N7S8597C1D1Ev,_ZThn28_N7S8597C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S8597C1D0Ev,_ZThn28_N7S8597C1D0Ev)();
extern void _ZN7S8597C73v23Ev();
extern void ABISELECT(_ZThn56_N7S8597C1D1Ev,_ZThn32_N7S8597C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S8597C1D0Ev,_ZThn32_N7S8597C1D0Ev)();
extern void _ZN7S8597C83v24Ev();
static  VTBL_ENTRY vtc_S8597C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8597C1[0]),
  (VTBL_ENTRY)&_ZN7S8597C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8597C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S8597C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8597C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8597C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8597C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8597C13v12Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8597C1D1Ev,_ZThn4_N7S8597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8597C1D0Ev,_ZThn4_N7S8597C1D0Ev),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S8597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S8597C1D1Ev,_ZThn24_N7S8597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S8597C1D0Ev,_ZThn24_N7S8597C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8597C63v22Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S8597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S8597C1D1Ev,_ZThn28_N7S8597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S8597C1D0Ev,_ZThn28_N7S8597C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8597C73v23Ev,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S8597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S8597C1D1Ev,_ZThn32_N7S8597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S8597C1D0Ev,_ZThn32_N7S8597C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8597C83v24Ev,
};
extern VTBL_ENTRY _ZTI7S8597C1[];
extern  VTBL_ENTRY _ZTV7S8597C1[];
Class_Descriptor cd_S8597C1 = {  "S8597C1", // class name
  bases_S8597C1, 5,
  &(vtc_S8597C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S8597C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S8597C1),44, //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  S3660C2  : S7368C49 {
  void *s3660c2f0;
  ::S10256C12_nt s3660c2f1;
  virtual  ~S3660C2(); // _ZN7S3660C2D1Ev
  virtual void  v8(); // _ZN7S3660C22v8Ev
  virtual void  v9(); // _ZN7S3660C22v9Ev
  virtual void  v10(); // _ZN7S3660C23v10Ev
  virtual void  v11(); // _ZN7S3660C23v11Ev
  virtual void  v12(); // _ZN7S3660C23v12Ev
  virtual void  v13(); // _ZN7S3660C23v13Ev
  virtual void  v14(); // _ZN7S3660C23v14Ev
  virtual void  v15(); // _ZN7S3660C23v15Ev
  virtual void  v16(); // _ZN7S3660C23v16Ev
  virtual void  v17(); // _ZN7S3660C23v17Ev
  virtual void  v18(); // _ZN7S3660C23v18Ev
  S3660C2(); // tgen
};
//SIG(-1 S3660C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S3660C2 ::~S3660C2(){ note_dtor("S3660C2", this);}
void  S3660C2 ::v8(){vfunc_called(this, "_ZN7S3660C22v8Ev");}
void  S3660C2 ::v9(){vfunc_called(this, "_ZN7S3660C22v9Ev");}
void  S3660C2 ::v10(){vfunc_called(this, "_ZN7S3660C23v10Ev");}
void  S3660C2 ::v11(){vfunc_called(this, "_ZN7S3660C23v11Ev");}
void  S3660C2 ::v12(){vfunc_called(this, "_ZN7S3660C23v12Ev");}
void  S3660C2 ::v13(){vfunc_called(this, "_ZN7S3660C23v13Ev");}
void  S3660C2 ::v14(){vfunc_called(this, "_ZN7S3660C23v14Ev");}
void  S3660C2 ::v15(){vfunc_called(this, "_ZN7S3660C23v15Ev");}
void  S3660C2 ::v16(){vfunc_called(this, "_ZN7S3660C23v16Ev");}
void  S3660C2 ::v17(){vfunc_called(this, "_ZN7S3660C23v17Ev");}
void  S3660C2 ::v18(){vfunc_called(this, "_ZN7S3660C23v18Ev");}
S3660C2 ::S3660C2(){ note_ctor("S3660C2", this);} // tgen

static void Test_S3660C2()
{
  extern Class_Descriptor cd_S3660C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S3660C2, buf);
    S3660C2 *dp, &lv = *(dp=new (buf) S3660C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S3660C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3660C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3660C2");
    check_field_offset(lv, s3660c2f0, ABISELECT(32,20), "S3660C2.s3660c2f0");
    check_field_offset(lv, s3660c2f1, ABISELECT(40,24), "S3660C2.s3660c2f1");
    test_class_info(&lv, &cd_S3660C2);
    dp->~S3660C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3660C2(Test_S3660C2, "S3660C2", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S3660C2C1Ev();
extern void _ZN7S3660C2D1Ev();
Name_Map name_map_S3660C2[] = {
  NSPAIR(_ZN7S3660C2C1Ev),
  NSPAIR(_ZN7S3660C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3660C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3660C2[];
extern void _ZN7S3660C2D1Ev();
extern void _ZN7S3660C2D0Ev();
extern void _ZN7S3660C22v8Ev();
extern void _ZN7S3660C22v9Ev();
extern void _ZN7S3660C23v10Ev();
extern void _ZN7S3660C23v11Ev();
extern void _ZN7S3660C23v12Ev();
extern void _ZN7S3660C23v13Ev();
extern void _ZN7S3660C23v14Ev();
extern void _ZN7S3660C23v15Ev();
extern void _ZN7S3660C23v16Ev();
extern void _ZN7S3660C23v17Ev();
extern void _ZN7S3660C23v18Ev();
static  VTBL_ENTRY vtc_S3660C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3660C2[0]),
  (VTBL_ENTRY)&_ZN7S3660C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3660C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3660C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3660C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S3660C2[];
extern  VTBL_ENTRY _ZTV7S3660C2[];
Class_Descriptor cd_S3660C2 = {  "S3660C2", // class name
  bases_S3660C2, 1,
  &(vtc_S3660C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S3660C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3660C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3660C7  {
  virtual  ~S3660C7(); // _ZN7S3660C7D1Ev
  virtual void  v19(); // _ZN7S3660C73v19Ev
  S3660C7(); // tgen
};
//SIG(-1 S3660C7) C1{ vd v1}


 S3660C7 ::~S3660C7(){ note_dtor("S3660C7", this);}
void  S3660C7 ::v19(){vfunc_called(this, "_ZN7S3660C73v19Ev");}
S3660C7 ::S3660C7(){ note_ctor("S3660C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3660C7C1Ev();
extern void _ZN7S3660C7D1Ev();
Name_Map name_map_S3660C7[] = {
  NSPAIR(_ZN7S3660C7C1Ev),
  NSPAIR(_ZN7S3660C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3660C7[];
extern void _ZN7S3660C7D1Ev();
extern void _ZN7S3660C7D0Ev();
extern void _ZN7S3660C73v19Ev();
static  VTBL_ENTRY vtc_S3660C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3660C7[0]),
  (VTBL_ENTRY)&_ZN7S3660C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3660C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3660C73v19Ev,
};
extern VTBL_ENTRY _ZTI7S3660C7[];
extern  VTBL_ENTRY _ZTV7S3660C7[];
Class_Descriptor cd_S3660C7 = {  "S3660C7", // class name
  0,0,//no base classes
  &(vtc_S3660C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3660C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3660C7),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  S3660C8  {
  virtual  ~S3660C8(); // _ZN7S3660C8D1Ev
  virtual void  v20(); // _ZN7S3660C83v20Ev
  S3660C8(); // tgen
};
//SIG(-1 S3660C8) C1{ vd v1}


 S3660C8 ::~S3660C8(){ note_dtor("S3660C8", this);}
void  S3660C8 ::v20(){vfunc_called(this, "_ZN7S3660C83v20Ev");}
S3660C8 ::S3660C8(){ note_ctor("S3660C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3660C8C1Ev();
extern void _ZN7S3660C8D1Ev();
Name_Map name_map_S3660C8[] = {
  NSPAIR(_ZN7S3660C8C1Ev),
  NSPAIR(_ZN7S3660C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3660C8[];
extern void _ZN7S3660C8D1Ev();
extern void _ZN7S3660C8D0Ev();
extern void _ZN7S3660C83v20Ev();
static  VTBL_ENTRY vtc_S3660C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3660C8[0]),
  (VTBL_ENTRY)&_ZN7S3660C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3660C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3660C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S3660C8[];
extern  VTBL_ENTRY _ZTV7S3660C8[];
Class_Descriptor cd_S3660C8 = {  "S3660C8", // class name
  0,0,//no base classes
  &(vtc_S3660C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3660C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3660C8),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  S3660C1  : S3660C2 , S3660C7 , S3660C8 {
  void *s3660c1f0;
  virtual  ~S3660C1(); // _ZN7S3660C1D1Ev
  virtual void  v1(); // _ZN7S3660C12v1Ev
  virtual void  v2(); // _ZN7S3660C12v2Ev
  virtual void  v3(); // _ZN7S3660C12v3Ev
  virtual void  v4(); // _ZN7S3660C12v4Ev
  virtual void  v5(); // _ZN7S3660C12v5Ev
  virtual void  v6(); // _ZN7S3660C12v6Ev
  virtual void  v7(); // _ZN7S3660C12v7Ev
  S3660C1(); // tgen
};
//SIG(1 S3660C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC7{ vd v19} BC8{ vd v20} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S3660C1 ::~S3660C1(){ note_dtor("S3660C1", this);}
void  S3660C1 ::v1(){vfunc_called(this, "_ZN7S3660C12v1Ev");}
void  S3660C1 ::v2(){vfunc_called(this, "_ZN7S3660C12v2Ev");}
void  S3660C1 ::v3(){vfunc_called(this, "_ZN7S3660C12v3Ev");}
void  S3660C1 ::v4(){vfunc_called(this, "_ZN7S3660C12v4Ev");}
void  S3660C1 ::v5(){vfunc_called(this, "_ZN7S3660C12v5Ev");}
void  S3660C1 ::v6(){vfunc_called(this, "_ZN7S3660C12v6Ev");}
void  S3660C1 ::v7(){vfunc_called(this, "_ZN7S3660C12v7Ev");}
S3660C1 ::S3660C1(){ note_ctor("S3660C1", this);} // tgen

static void Test_S3660C1()
{
  extern Class_Descriptor cd_S3660C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3660C1, buf);
    S3660C1 *dp, &lv = *(dp=new (buf) S3660C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3660C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3660C1)");
    check_base_class_offset(lv, (S7368C49*)(S3660C2*), 0, "S3660C1");
    check_base_class_offset(lv, (S3660C2*), 0, "S3660C1");
    check_base_class_offset(lv, (S3660C7*), ABISELECT(96,64), "S3660C1");
    check_base_class_offset(lv, (S3660C8*), ABISELECT(104,68), "S3660C1");
    check_field_offset(lv, s3660c1f0, ABISELECT(112,72), "S3660C1.s3660c1f0");
    test_class_info(&lv, &cd_S3660C1);
    dp->~S3660C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3660C1(Test_S3660C1, "S3660C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3660C1C1Ev();
extern void _ZN7S3660C1D1Ev();
Name_Map name_map_S3660C1[] = {
  NSPAIR(_ZN7S3660C1C1Ev),
  NSPAIR(_ZN7S3660C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3660C2;
extern VTBL_ENTRY _ZTI7S3660C2[];
extern  VTBL_ENTRY _ZTV7S3660C2[];
extern Class_Descriptor cd_S3660C7;
extern VTBL_ENTRY _ZTI7S3660C7[];
extern  VTBL_ENTRY _ZTV7S3660C7[];
extern Class_Descriptor cd_S3660C8;
extern VTBL_ENTRY _ZTI7S3660C8[];
extern  VTBL_ENTRY _ZTV7S3660C8[];
static Base_Class bases_S3660C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3660C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3660C7,    ABISELECT(96,64), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3660C8,    ABISELECT(104,68), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3660C1[];
extern void _ZN7S3660C1D1Ev();
extern void _ZN7S3660C1D0Ev();
extern void _ZN7S3660C22v8Ev();
extern void _ZN7S3660C22v9Ev();
extern void _ZN7S3660C23v10Ev();
extern void _ZN7S3660C23v11Ev();
extern void _ZN7S3660C23v12Ev();
extern void _ZN7S3660C23v13Ev();
extern void _ZN7S3660C23v14Ev();
extern void _ZN7S3660C23v15Ev();
extern void _ZN7S3660C23v16Ev();
extern void _ZN7S3660C23v17Ev();
extern void _ZN7S3660C23v18Ev();
extern void _ZN7S3660C12v1Ev();
extern void _ZN7S3660C12v2Ev();
extern void _ZN7S3660C12v3Ev();
extern void _ZN7S3660C12v4Ev();
extern void _ZN7S3660C12v5Ev();
extern void _ZN7S3660C12v6Ev();
extern void _ZN7S3660C12v7Ev();
extern void ABISELECT(_ZThn96_N7S3660C1D1Ev,_ZThn64_N7S3660C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S3660C1D0Ev,_ZThn64_N7S3660C1D0Ev)();
extern void _ZN7S3660C73v19Ev();
extern void ABISELECT(_ZThn104_N7S3660C1D1Ev,_ZThn68_N7S3660C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S3660C1D0Ev,_ZThn68_N7S3660C1D0Ev)();
extern void _ZN7S3660C83v20Ev();
static  VTBL_ENTRY vtc_S3660C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3660C1[0]),
  (VTBL_ENTRY)&_ZN7S3660C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3660C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3660C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3660C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3660C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3660C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3660C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3660C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3660C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3660C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3660C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3660C12v7Ev,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S3660C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3660C1D1Ev,_ZThn64_N7S3660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3660C1D0Ev,_ZThn64_N7S3660C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3660C73v19Ev,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3660C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S3660C1D1Ev,_ZThn68_N7S3660C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S3660C1D0Ev,_ZThn68_N7S3660C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3660C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S3660C1[];
extern  VTBL_ENTRY _ZTV7S3660C1[];
Class_Descriptor cd_S3660C1 = {  "S3660C1", // class name
  bases_S3660C1, 4,
  &(vtc_S3660C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3660C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3660C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3659C2  : S7368C49 {
  void *s3659c2f0;
  ::S10256C12_nt s3659c2f1;
  virtual  ~S3659C2(); // _ZN7S3659C2D1Ev
  virtual void  v8(); // _ZN7S3659C22v8Ev
  virtual void  v9(); // _ZN7S3659C22v9Ev
  virtual void  v10(); // _ZN7S3659C23v10Ev
  virtual void  v11(); // _ZN7S3659C23v11Ev
  virtual void  v12(); // _ZN7S3659C23v12Ev
  virtual void  v13(); // _ZN7S3659C23v13Ev
  virtual void  v14(); // _ZN7S3659C23v14Ev
  virtual void  v15(); // _ZN7S3659C23v15Ev
  virtual void  v16(); // _ZN7S3659C23v16Ev
  virtual void  v17(); // _ZN7S3659C23v17Ev
  virtual void  v18(); // _ZN7S3659C23v18Ev
  S3659C2(); // tgen
};
//SIG(-1 S3659C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S3659C2 ::~S3659C2(){ note_dtor("S3659C2", this);}
void  S3659C2 ::v8(){vfunc_called(this, "_ZN7S3659C22v8Ev");}
void  S3659C2 ::v9(){vfunc_called(this, "_ZN7S3659C22v9Ev");}
void  S3659C2 ::v10(){vfunc_called(this, "_ZN7S3659C23v10Ev");}
void  S3659C2 ::v11(){vfunc_called(this, "_ZN7S3659C23v11Ev");}
void  S3659C2 ::v12(){vfunc_called(this, "_ZN7S3659C23v12Ev");}
void  S3659C2 ::v13(){vfunc_called(this, "_ZN7S3659C23v13Ev");}
void  S3659C2 ::v14(){vfunc_called(this, "_ZN7S3659C23v14Ev");}
void  S3659C2 ::v15(){vfunc_called(this, "_ZN7S3659C23v15Ev");}
void  S3659C2 ::v16(){vfunc_called(this, "_ZN7S3659C23v16Ev");}
void  S3659C2 ::v17(){vfunc_called(this, "_ZN7S3659C23v17Ev");}
void  S3659C2 ::v18(){vfunc_called(this, "_ZN7S3659C23v18Ev");}
S3659C2 ::S3659C2(){ note_ctor("S3659C2", this);} // tgen

static void Test_S3659C2()
{
  extern Class_Descriptor cd_S3659C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S3659C2, buf);
    S3659C2 *dp, &lv = *(dp=new (buf) S3659C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S3659C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3659C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3659C2");
    check_field_offset(lv, s3659c2f0, ABISELECT(32,20), "S3659C2.s3659c2f0");
    check_field_offset(lv, s3659c2f1, ABISELECT(40,24), "S3659C2.s3659c2f1");
    test_class_info(&lv, &cd_S3659C2);
    dp->~S3659C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3659C2(Test_S3659C2, "S3659C2", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S3659C2C1Ev();
extern void _ZN7S3659C2D1Ev();
Name_Map name_map_S3659C2[] = {
  NSPAIR(_ZN7S3659C2C1Ev),
  NSPAIR(_ZN7S3659C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3659C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3659C2[];
extern void _ZN7S3659C2D1Ev();
extern void _ZN7S3659C2D0Ev();
extern void _ZN7S3659C22v8Ev();
extern void _ZN7S3659C22v9Ev();
extern void _ZN7S3659C23v10Ev();
extern void _ZN7S3659C23v11Ev();
extern void _ZN7S3659C23v12Ev();
extern void _ZN7S3659C23v13Ev();
extern void _ZN7S3659C23v14Ev();
extern void _ZN7S3659C23v15Ev();
extern void _ZN7S3659C23v16Ev();
extern void _ZN7S3659C23v17Ev();
extern void _ZN7S3659C23v18Ev();
static  VTBL_ENTRY vtc_S3659C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3659C2[0]),
  (VTBL_ENTRY)&_ZN7S3659C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3659C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3659C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3659C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S3659C2[];
extern  VTBL_ENTRY _ZTV7S3659C2[];
Class_Descriptor cd_S3659C2 = {  "S3659C2", // class name
  bases_S3659C2, 1,
  &(vtc_S3659C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S3659C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3659C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3659C7  {
  virtual  ~S3659C7(); // _ZN7S3659C7D1Ev
  virtual void  v19(); // _ZN7S3659C73v19Ev
  S3659C7(); // tgen
};
//SIG(-1 S3659C7) C1{ vd v1}


 S3659C7 ::~S3659C7(){ note_dtor("S3659C7", this);}
void  S3659C7 ::v19(){vfunc_called(this, "_ZN7S3659C73v19Ev");}
S3659C7 ::S3659C7(){ note_ctor("S3659C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3659C7C1Ev();
extern void _ZN7S3659C7D1Ev();
Name_Map name_map_S3659C7[] = {
  NSPAIR(_ZN7S3659C7C1Ev),
  NSPAIR(_ZN7S3659C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3659C7[];
extern void _ZN7S3659C7D1Ev();
extern void _ZN7S3659C7D0Ev();
extern void _ZN7S3659C73v19Ev();
static  VTBL_ENTRY vtc_S3659C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3659C7[0]),
  (VTBL_ENTRY)&_ZN7S3659C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3659C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3659C73v19Ev,
};
extern VTBL_ENTRY _ZTI7S3659C7[];
extern  VTBL_ENTRY _ZTV7S3659C7[];
Class_Descriptor cd_S3659C7 = {  "S3659C7", // class name
  0,0,//no base classes
  &(vtc_S3659C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3659C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3659C7),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  S3659C8  {
  virtual  ~S3659C8(); // _ZN7S3659C8D1Ev
  virtual void  v20(); // _ZN7S3659C83v20Ev
  S3659C8(); // tgen
};
//SIG(-1 S3659C8) C1{ vd v1}


 S3659C8 ::~S3659C8(){ note_dtor("S3659C8", this);}
void  S3659C8 ::v20(){vfunc_called(this, "_ZN7S3659C83v20Ev");}
S3659C8 ::S3659C8(){ note_ctor("S3659C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3659C8C1Ev();
extern void _ZN7S3659C8D1Ev();
Name_Map name_map_S3659C8[] = {
  NSPAIR(_ZN7S3659C8C1Ev),
  NSPAIR(_ZN7S3659C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3659C8[];
extern void _ZN7S3659C8D1Ev();
extern void _ZN7S3659C8D0Ev();
extern void _ZN7S3659C83v20Ev();
static  VTBL_ENTRY vtc_S3659C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3659C8[0]),
  (VTBL_ENTRY)&_ZN7S3659C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3659C8D0Ev,
  (VTBL_ENTRY)&_ZN7S3659C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S3659C8[];
extern  VTBL_ENTRY _ZTV7S3659C8[];
Class_Descriptor cd_S3659C8 = {  "S3659C8", // class name
  0,0,//no base classes
  &(vtc_S3659C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3659C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3659C8),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  S3659C1  : S3659C2 , S3659C7 , S3659C8 {
  int s3659c1f0;
  virtual  ~S3659C1(); // _ZN7S3659C1D1Ev
  virtual void  v1(); // _ZN7S3659C12v1Ev
  virtual void  v2(); // _ZN7S3659C12v2Ev
  virtual void  v3(); // _ZN7S3659C12v3Ev
  virtual void  v4(); // _ZN7S3659C12v4Ev
  virtual void  v5(); // _ZN7S3659C12v5Ev
  virtual void  v6(); // _ZN7S3659C12v6Ev
  virtual void  v7(); // _ZN7S3659C12v7Ev
  S3659C1(); // tgen
};
//SIG(1 S3659C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC7{ vd v19} BC8{ vd v20} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S3659C1 ::~S3659C1(){ note_dtor("S3659C1", this);}
void  S3659C1 ::v1(){vfunc_called(this, "_ZN7S3659C12v1Ev");}
void  S3659C1 ::v2(){vfunc_called(this, "_ZN7S3659C12v2Ev");}
void  S3659C1 ::v3(){vfunc_called(this, "_ZN7S3659C12v3Ev");}
void  S3659C1 ::v4(){vfunc_called(this, "_ZN7S3659C12v4Ev");}
void  S3659C1 ::v5(){vfunc_called(this, "_ZN7S3659C12v5Ev");}
void  S3659C1 ::v6(){vfunc_called(this, "_ZN7S3659C12v6Ev");}
void  S3659C1 ::v7(){vfunc_called(this, "_ZN7S3659C12v7Ev");}
S3659C1 ::S3659C1(){ note_ctor("S3659C1", this);} // tgen

static void Test_S3659C1()
{
  extern Class_Descriptor cd_S3659C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3659C1, buf);
    S3659C1 *dp, &lv = *(dp=new (buf) S3659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3659C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3659C1)");
    check_base_class_offset(lv, (S7368C49*)(S3659C2*), 0, "S3659C1");
    check_base_class_offset(lv, (S3659C2*), 0, "S3659C1");
    check_base_class_offset(lv, (S3659C7*), ABISELECT(96,64), "S3659C1");
    check_base_class_offset(lv, (S3659C8*), ABISELECT(104,68), "S3659C1");
    check_field_offset(lv, s3659c1f0, ABISELECT(112,72), "S3659C1.s3659c1f0");
    test_class_info(&lv, &cd_S3659C1);
    dp->~S3659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3659C1(Test_S3659C1, "S3659C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3659C1C1Ev();
extern void _ZN7S3659C1D1Ev();
Name_Map name_map_S3659C1[] = {
  NSPAIR(_ZN7S3659C1C1Ev),
  NSPAIR(_ZN7S3659C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3659C2;
extern VTBL_ENTRY _ZTI7S3659C2[];
extern  VTBL_ENTRY _ZTV7S3659C2[];
extern Class_Descriptor cd_S3659C7;
extern VTBL_ENTRY _ZTI7S3659C7[];
extern  VTBL_ENTRY _ZTV7S3659C7[];
extern Class_Descriptor cd_S3659C8;
extern VTBL_ENTRY _ZTI7S3659C8[];
extern  VTBL_ENTRY _ZTV7S3659C8[];
static Base_Class bases_S3659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3659C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3659C7,    ABISELECT(96,64), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3659C8,    ABISELECT(104,68), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3659C1[];
extern void _ZN7S3659C1D1Ev();
extern void _ZN7S3659C1D0Ev();
extern void _ZN7S3659C22v8Ev();
extern void _ZN7S3659C22v9Ev();
extern void _ZN7S3659C23v10Ev();
extern void _ZN7S3659C23v11Ev();
extern void _ZN7S3659C23v12Ev();
extern void _ZN7S3659C23v13Ev();
extern void _ZN7S3659C23v14Ev();
extern void _ZN7S3659C23v15Ev();
extern void _ZN7S3659C23v16Ev();
extern void _ZN7S3659C23v17Ev();
extern void _ZN7S3659C23v18Ev();
extern void _ZN7S3659C12v1Ev();
extern void _ZN7S3659C12v2Ev();
extern void _ZN7S3659C12v3Ev();
extern void _ZN7S3659C12v4Ev();
extern void _ZN7S3659C12v5Ev();
extern void _ZN7S3659C12v6Ev();
extern void _ZN7S3659C12v7Ev();
extern void ABISELECT(_ZThn96_N7S3659C1D1Ev,_ZThn64_N7S3659C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S3659C1D0Ev,_ZThn64_N7S3659C1D0Ev)();
extern void _ZN7S3659C73v19Ev();
extern void ABISELECT(_ZThn104_N7S3659C1D1Ev,_ZThn68_N7S3659C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S3659C1D0Ev,_ZThn68_N7S3659C1D0Ev)();
extern void _ZN7S3659C83v20Ev();
static  VTBL_ENTRY vtc_S3659C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3659C1[0]),
  (VTBL_ENTRY)&_ZN7S3659C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3659C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3659C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3659C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3659C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3659C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3659C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3659C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3659C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3659C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3659C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3659C12v7Ev,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S3659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3659C1D1Ev,_ZThn64_N7S3659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3659C1D0Ev,_ZThn64_N7S3659C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3659C73v19Ev,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S3659C1D1Ev,_ZThn68_N7S3659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S3659C1D0Ev,_ZThn68_N7S3659C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3659C83v20Ev,
};
extern VTBL_ENTRY _ZTI7S3659C1[];
extern  VTBL_ENTRY _ZTV7S3659C1[];
Class_Descriptor cd_S3659C1 = {  "S3659C1", // class name
  bases_S3659C1, 4,
  &(vtc_S3659C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3659C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3659C1),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8017C5  {
  int s8017c5f0;
  ::S7368C9_nt s8017c5f1;
  ::S7368C11 s8017c5f2;
  void  mf8017c5(); // _ZN7S8017C58mf8017c5Ev
  virtual  ~S8017C5(); // _ZN7S8017C5D1Ev
  S8017C5(); // tgen
};
//SIG(-1 S8017C5) C1{ vd m Fi FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ vd m Fc} vd FL[2]}}


void  S8017C5 ::mf8017c5(){}
 S8017C5 ::~S8017C5(){ note_dtor("S8017C5", this);}
S8017C5 ::S8017C5(){ note_ctor("S8017C5", this);} // tgen

static void Test_S8017C5()
{
  extern Class_Descriptor cd_S8017C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S8017C5, buf);
    S8017C5 *dp, &lv = *(dp=new (buf) S8017C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S8017C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8017C5)");
    check_field_offset(lv, s8017c5f0, ABISELECT(8,4), "S8017C5.s8017c5f0");
    check_field_offset(lv, s8017c5f1, ABISELECT(16,8), "S8017C5.s8017c5f1");
    check_field_offset(lv, s8017c5f2, ABISELECT(32,20), "S8017C5.s8017c5f2");
    test_class_info(&lv, &cd_S8017C5);
    dp->~S8017C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8017C5(Test_S8017C5, "S8017C5", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S8017C5C1Ev();
extern void _ZN7S8017C5D1Ev();
Name_Map name_map_S8017C5[] = {
  NSPAIR(_ZN7S8017C5C1Ev),
  NSPAIR(_ZN7S8017C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8017C5[];
extern void _ZN7S8017C5D1Ev();
extern void _ZN7S8017C5D0Ev();
static  VTBL_ENTRY vtc_S8017C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8017C5[0]),
  (VTBL_ENTRY)&_ZN7S8017C5D1Ev,
  (VTBL_ENTRY)&_ZN7S8017C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S8017C5[];
extern  VTBL_ENTRY _ZTV7S8017C5[];
Class_Descriptor cd_S8017C5 = {  "S8017C5", // class name
  0,0,//no base classes
  &(vtc_S8017C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S8017C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8017C5),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  S8017C10  {
  ::S487C6_nt s8017c10f0;
  ::S487C6_nt s8017c10f1;
  ::S487C6_nt s8017c10f2;
  int s8017c10f3[4];
  char s8017c10f4[2];
  int s8017c10f5;
  void  mf8017c10(); // _ZN8S8017C109mf8017c10Ev
  virtual  ~S8017C10(); // _ZN8S8017C10D1Ev
  S8017C10(); // tgen
};
//SIG(-1 S8017C10) C1{ vd m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC2 Fi[4] Fc[2] Fi}


void  S8017C10 ::mf8017c10(){}
 S8017C10 ::~S8017C10(){ note_dtor("S8017C10", this);}
S8017C10 ::S8017C10(){ note_ctor("S8017C10", this);} // tgen

static void Test_S8017C10()
{
  extern Class_Descriptor cd_S8017C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S8017C10, buf);
    S8017C10 *dp, &lv = *(dp=new (buf) S8017C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S8017C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8017C10)");
    check_field_offset(lv, s8017c10f0, ABISELECT(8,4), "S8017C10.s8017c10f0");
    check_field_offset(lv, s8017c10f1, ABISELECT(32,20), "S8017C10.s8017c10f1");
    check_field_offset(lv, s8017c10f2, ABISELECT(56,36), "S8017C10.s8017c10f2");
    check_field_offset(lv, s8017c10f3, ABISELECT(80,52), "S8017C10.s8017c10f3");
    check_field_offset(lv, s8017c10f4, ABISELECT(96,68), "S8017C10.s8017c10f4");
    check_field_offset(lv, s8017c10f5, ABISELECT(100,72), "S8017C10.s8017c10f5");
    test_class_info(&lv, &cd_S8017C10);
    dp->~S8017C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8017C10(Test_S8017C10, "S8017C10", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN8S8017C10C1Ev();
extern void _ZN8S8017C10D1Ev();
Name_Map name_map_S8017C10[] = {
  NSPAIR(_ZN8S8017C10C1Ev),
  NSPAIR(_ZN8S8017C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8017C10[];
extern void _ZN8S8017C10D1Ev();
extern void _ZN8S8017C10D0Ev();
static  VTBL_ENTRY vtc_S8017C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8017C10[0]),
  (VTBL_ENTRY)&_ZN8S8017C10D1Ev,
  (VTBL_ENTRY)&_ZN8S8017C10D0Ev,
};
extern VTBL_ENTRY _ZTI8S8017C10[];
extern  VTBL_ENTRY _ZTV8S8017C10[];
Class_Descriptor cd_S8017C10 = {  "S8017C10", // class name
  0,0,//no base classes
  &(vtc_S8017C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI8S8017C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8017C10),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  S8017C1  : S7368C49 {
  ::S8017C5 s8017c1f0;
  ::S8017C10 s8017c1f1;
  void *s8017c1f2;
  virtual  ~S8017C1(); // _ZN7S8017C1D1Ev
  S8017C1(); // tgen
};
//SIG(1 S8017C1) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd FC5{ vd m Fi FC6{ m Fp Fi FC7{ m}} FC8{ BC9{ vd m Fc} vd FL[2]}} FC10{ vd m FC11{ m FC6 Fi} FC11 FC11 Fi[4] Fc[2] Fi} Fp}


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

static void Test_S8017C1()
{
  extern Class_Descriptor cd_S8017C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S8017C1, buf);
    S8017C1 *dp, &lv = *(dp=new (buf) S8017C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S8017C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8017C1)");
    check_base_class_offset(lv, (S7368C49*), 0, "S8017C1");
    check_field_offset(lv, s8017c1f0, ABISELECT(32,20), "S8017C1.s8017c1f0");
    check_field_offset(lv, s8017c1f1, ABISELECT(96,64), "S8017C1.s8017c1f1");
    check_field_offset(lv, s8017c1f2, ABISELECT(200,140), "S8017C1.s8017c1f2");
    test_class_info(&lv, &cd_S8017C1);
    dp->~S8017C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8017C1(Test_S8017C1, "S8017C1", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN7S8017C1C1Ev();
extern void _ZN7S8017C1D1Ev();
Name_Map name_map_S8017C1[] = {
  NSPAIR(_ZN7S8017C1C1Ev),
  NSPAIR(_ZN7S8017C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S8017C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8017C1[];
extern void _ZN7S8017C1D1Ev();
extern void _ZN7S8017C1D0Ev();
static  VTBL_ENTRY vtc_S8017C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8017C1[0]),
  (VTBL_ENTRY)&_ZN7S8017C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8017C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8017C1[];
extern  VTBL_ENTRY _ZTV7S8017C1[];
Class_Descriptor cd_S8017C1 = {  "S8017C1", // class name
  bases_S8017C1, 1,
  &(vtc_S8017C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI7S8017C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8017C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3653C2  : S7368C49 {
  void *s3653c2f0;
  ::S487C6_nt s3653c2f1;
  void *s3653c2f2;
  char s3653c2f3;
  virtual  ~S3653C2(); // _ZN7S3653C2D1Ev
  virtual void  v4(); // _ZN7S3653C22v4Ev
  virtual void  v5(); // _ZN7S3653C22v5Ev
  virtual void  v6(); // _ZN7S3653C22v6Ev
  virtual void  v7(); // _ZN7S3653C22v7Ev
  virtual void  v8(); // _ZN7S3653C22v8Ev
  S3653C2(); // tgen
};
//SIG(-1 S3653C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp Fc}


 S3653C2 ::~S3653C2(){ note_dtor("S3653C2", this);}
void  S3653C2 ::v4(){vfunc_called(this, "_ZN7S3653C22v4Ev");}
void  S3653C2 ::v5(){vfunc_called(this, "_ZN7S3653C22v5Ev");}
void  S3653C2 ::v6(){vfunc_called(this, "_ZN7S3653C22v6Ev");}
void  S3653C2 ::v7(){vfunc_called(this, "_ZN7S3653C22v7Ev");}
void  S3653C2 ::v8(){vfunc_called(this, "_ZN7S3653C22v8Ev");}
S3653C2 ::S3653C2(){ note_ctor("S3653C2", this);} // tgen

static void Test_S3653C2()
{
  extern Class_Descriptor cd_S3653C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3653C2, buf);
    S3653C2 *dp, &lv = *(dp=new (buf) S3653C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3653C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3653C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3653C2");
    check_field_offset(lv, s3653c2f0, ABISELECT(32,20), "S3653C2.s3653c2f0");
    check_field_offset(lv, s3653c2f1, ABISELECT(40,24), "S3653C2.s3653c2f1");
    check_field_offset(lv, s3653c2f2, ABISELECT(64,40), "S3653C2.s3653c2f2");
    check_field_offset(lv, s3653c2f3, ABISELECT(72,44), "S3653C2.s3653c2f3");
    test_class_info(&lv, &cd_S3653C2);
    dp->~S3653C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3653C2(Test_S3653C2, "S3653C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3653C2C1Ev();
extern void _ZN7S3653C2D1Ev();
Name_Map name_map_S3653C2[] = {
  NSPAIR(_ZN7S3653C2C1Ev),
  NSPAIR(_ZN7S3653C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3653C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3653C2[];
extern void _ZN7S3653C2D1Ev();
extern void _ZN7S3653C2D0Ev();
extern void _ZN7S3653C22v4Ev();
extern void _ZN7S3653C22v5Ev();
extern void _ZN7S3653C22v6Ev();
extern void _ZN7S3653C22v7Ev();
extern void _ZN7S3653C22v8Ev();
static  VTBL_ENTRY vtc_S3653C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3653C2[0]),
  (VTBL_ENTRY)&_ZN7S3653C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3653C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S3653C2[];
extern  VTBL_ENTRY _ZTV7S3653C2[];
Class_Descriptor cd_S3653C2 = {  "S3653C2", // class name
  bases_S3653C2, 1,
  &(vtc_S3653C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3653C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3653C2),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  S3653C9  {
  virtual  ~S3653C9(); // _ZN7S3653C9D1Ev
  virtual void  v9(); // _ZN7S3653C92v9Ev
  S3653C9(); // tgen
};
//SIG(-1 S3653C9) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S3653C9C1Ev();
extern void _ZN7S3653C9D1Ev();
Name_Map name_map_S3653C9[] = {
  NSPAIR(_ZN7S3653C9C1Ev),
  NSPAIR(_ZN7S3653C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3653C9[];
extern void _ZN7S3653C9D1Ev();
extern void _ZN7S3653C9D0Ev();
extern void _ZN7S3653C92v9Ev();
static  VTBL_ENTRY vtc_S3653C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3653C9[0]),
  (VTBL_ENTRY)&_ZN7S3653C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3653C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3653C92v9Ev,
};
extern VTBL_ENTRY _ZTI7S3653C9[];
extern  VTBL_ENTRY _ZTV7S3653C9[];
Class_Descriptor cd_S3653C9 = {  "S3653C9", // class name
  0,0,//no base classes
  &(vtc_S3653C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3653C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3653C9),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  S3653C10  : S7368C18_nt {
  void *s3653c10f0[2];
  virtual  ~S3653C10(); // _ZN8S3653C10D1Ev
  S3653C10(); // tgen
};
//SIG(-1 S3653C10) C1{ BC2{ vd m Fp} vd Fp[2]}


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

static void Test_S3653C10()
{
  extern Class_Descriptor cd_S3653C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3653C10, buf);
    S3653C10 *dp, &lv = *(dp=new (buf) S3653C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3653C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3653C10)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S3653C10");
    check_field_offset(lv, s3653c10f0, ABISELECT(16,8), "S3653C10.s3653c10f0");
    test_class_info(&lv, &cd_S3653C10);
    dp->~S3653C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3653C10(Test_S3653C10, "S3653C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3653C10C1Ev();
extern void _ZN8S3653C10D1Ev();
Name_Map name_map_S3653C10[] = {
  NSPAIR(_ZN8S3653C10C1Ev),
  NSPAIR(_ZN8S3653C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S3653C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3653C10[];
extern void _ZN8S3653C10D1Ev();
extern void _ZN8S3653C10D0Ev();
static  VTBL_ENTRY vtc_S3653C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3653C10[0]),
  (VTBL_ENTRY)&_ZN8S3653C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3653C10D0Ev,
};
extern VTBL_ENTRY _ZTI8S3653C10[];
extern  VTBL_ENTRY _ZTV8S3653C10[];
Class_Descriptor cd_S3653C10 = {  "S3653C10", // class name
  bases_S3653C10, 1,
  &(vtc_S3653C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3653C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3653C10),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  S3653C1  : S3653C2 , S3653C9 {
  ::S3653C10 s3653c1f0;
  void *s3653c1f1;
  int s3653c1f2[3];
  void *s3653c1f3[2];
  virtual  ~S3653C1(); // _ZN7S3653C1D1Ev
  virtual void  v1(); // _ZN7S3653C12v1Ev
  virtual void  v2(); // _ZN7S3653C12v2Ev
  virtual void  v3(); // _ZN7S3653C12v3Ev
  S3653C1(); // tgen
};
//SIG(1 S3653C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v4 v5 v6 v7 v8 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp Fc} BC9{ vd v9} vd v1 v2 v3 FC10{ BC11{ vd m Fp} vd Fp[2]} Fp Fi[3] Fp[2]}


 S3653C1 ::~S3653C1(){ note_dtor("S3653C1", this);}
void  S3653C1 ::v1(){vfunc_called(this, "_ZN7S3653C12v1Ev");}
void  S3653C1 ::v2(){vfunc_called(this, "_ZN7S3653C12v2Ev");}
void  S3653C1 ::v3(){vfunc_called(this, "_ZN7S3653C12v3Ev");}
S3653C1 ::S3653C1(){ note_ctor("S3653C1", this);} // tgen

static void Test_S3653C1()
{
  extern Class_Descriptor cd_S3653C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,24)];
    init_test(&cd_S3653C1, buf);
    S3653C1 *dp, &lv = *(dp=new (buf) S3653C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S3653C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3653C1)");
    check_base_class_offset(lv, (S7368C49*)(S3653C2*), 0, "S3653C1");
    check_base_class_offset(lv, (S3653C2*), 0, "S3653C1");
    check_base_class_offset(lv, (S3653C9*), ABISELECT(80,48), "S3653C1");
    check_field_offset(lv, s3653c1f0, ABISELECT(88,52), "S3653C1.s3653c1f0");
    check_field_offset(lv, s3653c1f1, ABISELECT(120,68), "S3653C1.s3653c1f1");
    check_field_offset(lv, s3653c1f2, ABISELECT(128,72), "S3653C1.s3653c1f2");
    check_field_offset(lv, s3653c1f3, ABISELECT(144,84), "S3653C1.s3653c1f3");
    test_class_info(&lv, &cd_S3653C1);
    dp->~S3653C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3653C1(Test_S3653C1, "S3653C1", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN7S3653C1C1Ev();
extern void _ZN7S3653C1D1Ev();
Name_Map name_map_S3653C1[] = {
  NSPAIR(_ZN7S3653C1C1Ev),
  NSPAIR(_ZN7S3653C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3653C2;
extern VTBL_ENTRY _ZTI7S3653C2[];
extern  VTBL_ENTRY _ZTV7S3653C2[];
extern Class_Descriptor cd_S3653C9;
extern VTBL_ENTRY _ZTI7S3653C9[];
extern  VTBL_ENTRY _ZTV7S3653C9[];
static Base_Class bases_S3653C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3653C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3653C9,    ABISELECT(80,48), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3653C1[];
extern void _ZN7S3653C1D1Ev();
extern void _ZN7S3653C1D0Ev();
extern void _ZN7S3653C22v4Ev();
extern void _ZN7S3653C22v5Ev();
extern void _ZN7S3653C22v6Ev();
extern void _ZN7S3653C22v7Ev();
extern void _ZN7S3653C22v8Ev();
extern void _ZN7S3653C12v1Ev();
extern void _ZN7S3653C12v2Ev();
extern void _ZN7S3653C12v3Ev();
extern void ABISELECT(_ZThn80_N7S3653C1D1Ev,_ZThn48_N7S3653C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S3653C1D0Ev,_ZThn48_N7S3653C1D0Ev)();
extern void _ZN7S3653C92v9Ev();
static  VTBL_ENTRY vtc_S3653C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3653C1[0]),
  (VTBL_ENTRY)&_ZN7S3653C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3653C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3653C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3653C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3653C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3653C12v3Ev,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S3653C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S3653C1D1Ev,_ZThn48_N7S3653C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S3653C1D0Ev,_ZThn48_N7S3653C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3653C92v9Ev,
};
extern VTBL_ENTRY _ZTI7S3653C1[];
extern  VTBL_ENTRY _ZTV7S3653C1[];
Class_Descriptor cd_S3653C1 = {  "S3653C1", // class name
  bases_S3653C1, 3,
  &(vtc_S3653C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI7S3653C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3653C1),17, //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  S16576C3_nt  {
  char s16576c3f0;
  char s16576c3f1[15];
  void  mf16576c3(); // _ZN11S16576C3_nt9mf16576c3Ev
};
//SIG(-1 S16576C3_nt) C1{ m Fc[16]}


void  S16576C3_nt ::mf16576c3(){}

//skip512 S16576C3_nt

#else // __cplusplus

Class_Descriptor cd_S16576C3_nt = {  "S16576C3_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  S16576C2_nt  : S16576C3_nt {
};
//SIG(-1 S16576C2_nt) C1{ BC2{ m Fc[16]}}



//skip512 S16576C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S16576C3_nt;
static Base_Class bases_S16576C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16576C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16576C7  {
  char s16576c7f0;
  char s16576c7f1[15];
  void  mf16576c7(); // _ZN8S16576C79mf16576c7Ev
};
//SIG(-1 S16576C7) C1{ m Fc[16]}


void  S16576C7 ::mf16576c7(){}

static void Test_S16576C7()
{
  {
    init_simple_test("S16576C7");
    S16576C7 lv;
    check2(sizeof(lv), 16, "sizeof(S16576C7)");
    check2(__alignof__(lv), 1, "__alignof__(S16576C7)");
    check_field_offset(lv, s16576c7f0, 0, "S16576C7.s16576c7f0");
    check_field_offset(lv, s16576c7f1, 1, "S16576C7.s16576c7f1");
  }
}
static Arrange_To_Call_Me vS16576C7(Test_S16576C7, "S16576C7", 16);

#else // __cplusplus

Class_Descriptor cd_S16576C7 = {  "S16576C7", // 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  S16576C6  : S16576C7 {
};
//SIG(-1 S16576C6) C1{ BC2{ m Fc[16]}}



static void Test_S16576C6()
{
  extern Class_Descriptor cd_S16576C6;
  void *lvp;
  {
    char buf[16];
    init_test(&cd_S16576C6, buf);
    S16576C6 &lv = *(new (buf) S16576C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S16576C6)");
    check2(__alignof__(lv), 1, "__alignof__(S16576C6)");
    check_base_class_offset(lv, (S16576C7*), 0, "S16576C6");
    test_class_info(&lv, &cd_S16576C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16576C6(Test_S16576C6, "S16576C6", 16);

#else // __cplusplus

extern Class_Descriptor cd_S16576C7;
static Base_Class bases_S16576C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16576C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S16576C6 = {  "S16576C6", // class name
  bases_S16576C6, 1,
  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  S16576C9_nt  {
  ::S16576C3_nt s16576c9f0;
  ::S16576C3_nt s16576c9f1;
  ::S16576C3_nt s16576c9f2;
  ::S16576C3_nt s16576c9f3;
  void  mf16576c9(); // _ZN11S16576C9_nt9mf16576c9Ev
};
//SIG(-1 S16576C9_nt) C1{ m FC2{ m Fc[16]} FC2 FC2 FC2}


void  S16576C9_nt ::mf16576c9(){}

//skip512 S16576C9_nt

#else // __cplusplus

Class_Descriptor cd_S16576C9_nt = {  "S16576C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S16576C8_nt  : S16576C9_nt {
};
//SIG(-1 S16576C8_nt) C1{ BC2{ m FC3{ m Fc[16]} FC3 FC3 FC3}}



//skip512 S16576C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S16576C9_nt;
static Base_Class bases_S16576C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16576C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16576C1  {
  int s16576c1f0;
  char s16576c1f1[100];
  int s16576c1f2[3];
  ::S16576C2_nt s16576c1f3;
  ::S16576C2_nt s16576c1f4;
  ::S16576C6 s16576c1f5;
  int s16576c1f6[21];
  char s16576c1f7;
  int s16576c1f8;
  ::S16576C6 s16576c1f9;
  ::S16576C8_nt s16576c1f10;
  int s16576c1f11;
  ::S16576C8_nt s16576c1f12;
  char s16576c1f13;
  void *s16576c1f14;
  void  mf16576c1(); // _ZN8S16576C19mf16576c1Ev
};
//SIG(1 S16576C1) C1{ m Fi Fc[100] Fi[3] FC2{ BC3{ m Fc[16]}} FC2 FC4{ BC5{ m Fc[16]}} Fi[21] Fc Fi FC4 FC6{ BC7{ m FC3 FC3 FC3 FC3}} Fi FC6 Fc Fp}


void  S16576C1 ::mf16576c1(){}

static void Test_S16576C1()
{
  {
    init_simple_test("S16576C1");
    S16576C1 lv;
    check2(sizeof(lv), ABISELECT(416,412), "sizeof(S16576C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16576C1)");
    check_field_offset(lv, s16576c1f0, 0, "S16576C1.s16576c1f0");
    check_field_offset(lv, s16576c1f1, 4, "S16576C1.s16576c1f1");
    check_field_offset(lv, s16576c1f2, 104, "S16576C1.s16576c1f2");
    check_field_offset(lv, s16576c1f3, 116, "S16576C1.s16576c1f3");
    check_field_offset(lv, s16576c1f4, 132, "S16576C1.s16576c1f4");
    check_field_offset(lv, s16576c1f5, 148, "S16576C1.s16576c1f5");
    check_field_offset(lv, s16576c1f6, 164, "S16576C1.s16576c1f6");
    check_field_offset(lv, s16576c1f7, 248, "S16576C1.s16576c1f7");
    check_field_offset(lv, s16576c1f8, 252, "S16576C1.s16576c1f8");
    check_field_offset(lv, s16576c1f9, 256, "S16576C1.s16576c1f9");
    check_field_offset(lv, s16576c1f10, 272, "S16576C1.s16576c1f10");
    check_field_offset(lv, s16576c1f11, 336, "S16576C1.s16576c1f11");
    check_field_offset(lv, s16576c1f12, 340, "S16576C1.s16576c1f12");
    check_field_offset(lv, s16576c1f13, 404, "S16576C1.s16576c1f13");
    check_field_offset(lv, s16576c1f14, 408, "S16576C1.s16576c1f14");
  }
}
static Arrange_To_Call_Me vS16576C1(Test_S16576C1, "S16576C1", ABISELECT(416,412));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4933C4  {
  ::S7368C9_nt s4933c4f0;
  void *s4933c4f1;
  ::S7368C9_nt s4933c4f2;
};
//SIG(-1 S4933C4) C1{ FC2{ m Fp Fi FC3{ m}} Fp FC2}



static void Test_S4933C4()
{
  {
    init_simple_test("S4933C4");
    S4933C4 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4933C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4933C4)");
    check_field_offset(lv, s4933c4f0, 0, "S4933C4.s4933c4f0");
    check_field_offset(lv, s4933c4f1, ABISELECT(16,12), "S4933C4.s4933c4f1");
    check_field_offset(lv, s4933c4f2, ABISELECT(24,16), "S4933C4.s4933c4f2");
  }
}
static Arrange_To_Call_Me vS4933C4(Test_S4933C4, "S4933C4", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4933C3  {
  void *s4933c3f0[3];
  ::S4933C4 s4933c3f1;
  void *s4933c3f2;
  ::S487C6_nt s4933c3f3;
  virtual  ~S4933C3(); // _ZN7S4933C3D1Ev
  virtual void  v3(); // _ZN7S4933C32v3Ev
  virtual void  v4(); // _ZN7S4933C32v4Ev
  virtual void  v5(); // _ZN7S4933C32v5Ev
  virtual void  v6(); // _ZN7S4933C32v6Ev
  virtual void  v7(); // _ZN7S4933C32v7Ev
  virtual void  v8(); // _ZN7S4933C32v8Ev
  virtual void  v9(); // _ZN7S4933C32v9Ev
  S4933C3(); // tgen
};
//SIG(-1 S4933C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[3] FC2{ FC3{ m Fp Fi FC4{ m}} Fp FC3} Fp FC5{ m FC3 Fi}}


 S4933C3 ::~S4933C3(){ note_dtor("S4933C3", this);}
void  S4933C3 ::v3(){vfunc_called(this, "_ZN7S4933C32v3Ev");}
void  S4933C3 ::v4(){vfunc_called(this, "_ZN7S4933C32v4Ev");}
void  S4933C3 ::v5(){vfunc_called(this, "_ZN7S4933C32v5Ev");}
void  S4933C3 ::v6(){vfunc_called(this, "_ZN7S4933C32v6Ev");}
void  S4933C3 ::v7(){vfunc_called(this, "_ZN7S4933C32v7Ev");}
void  S4933C3 ::v8(){vfunc_called(this, "_ZN7S4933C32v8Ev");}
void  S4933C3 ::v9(){vfunc_called(this, "_ZN7S4933C32v9Ev");}
S4933C3 ::S4933C3(){ note_ctor("S4933C3", this);} // tgen

static void Test_S4933C3()
{
  extern Class_Descriptor cd_S4933C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4933C3, buf);
    S4933C3 *dp, &lv = *(dp=new (buf) S4933C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4933C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4933C3)");
    check_field_offset(lv, s4933c3f0, ABISELECT(8,4), "S4933C3.s4933c3f0");
    check_field_offset(lv, s4933c3f1, ABISELECT(32,16), "S4933C3.s4933c3f1");
    check_field_offset(lv, s4933c3f2, ABISELECT(72,44), "S4933C3.s4933c3f2");
    check_field_offset(lv, s4933c3f3, ABISELECT(80,48), "S4933C3.s4933c3f3");
    test_class_info(&lv, &cd_S4933C3);
    dp->~S4933C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4933C3(Test_S4933C3, "S4933C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4933C3C1Ev();
extern void _ZN7S4933C3D1Ev();
Name_Map name_map_S4933C3[] = {
  NSPAIR(_ZN7S4933C3C1Ev),
  NSPAIR(_ZN7S4933C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4933C3[];
extern void _ZN7S4933C3D1Ev();
extern void _ZN7S4933C3D0Ev();
extern void _ZN7S4933C32v3Ev();
extern void _ZN7S4933C32v4Ev();
extern void _ZN7S4933C32v5Ev();
extern void _ZN7S4933C32v6Ev();
extern void _ZN7S4933C32v7Ev();
extern void _ZN7S4933C32v8Ev();
extern void _ZN7S4933C32v9Ev();
static  VTBL_ENTRY vtc_S4933C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4933C3[0]),
  (VTBL_ENTRY)&_ZN7S4933C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4933C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S4933C3[];
extern  VTBL_ENTRY _ZTV7S4933C3[];
Class_Descriptor cd_S4933C3 = {  "S4933C3", // class name
  0,0,//no base classes
  &(vtc_S4933C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4933C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4933C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4933C2  : S4933C3 {
  virtual  ~S4933C2(); // _ZN7S4933C2D1Ev
  virtual void  v10(); // _ZN7S4933C23v10Ev
  virtual void  v11(); // _ZN7S4933C23v11Ev
  virtual void  v12(); // _ZN7S4933C23v12Ev
  virtual void  v13(); // _ZN7S4933C23v13Ev
  virtual void  v14(); // _ZN7S4933C23v14Ev
  virtual void  v15(); // _ZN7S4933C23v15Ev
  virtual void  v16(); // _ZN7S4933C23v16Ev
  S4933C2(); // tgen
};
//SIG(-1 S4933C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fp[3] FC3{ FC4{ m Fp Fi FC5{ m}} Fp FC4} Fp FC6{ m FC4 Fi}} vd v1 v2 v3 v4 v5 v6 v7}


 S4933C2 ::~S4933C2(){ note_dtor("S4933C2", this);}
void  S4933C2 ::v10(){vfunc_called(this, "_ZN7S4933C23v10Ev");}
void  S4933C2 ::v11(){vfunc_called(this, "_ZN7S4933C23v11Ev");}
void  S4933C2 ::v12(){vfunc_called(this, "_ZN7S4933C23v12Ev");}
void  S4933C2 ::v13(){vfunc_called(this, "_ZN7S4933C23v13Ev");}
void  S4933C2 ::v14(){vfunc_called(this, "_ZN7S4933C23v14Ev");}
void  S4933C2 ::v15(){vfunc_called(this, "_ZN7S4933C23v15Ev");}
void  S4933C2 ::v16(){vfunc_called(this, "_ZN7S4933C23v16Ev");}
S4933C2 ::S4933C2(){ note_ctor("S4933C2", this);} // tgen

static void Test_S4933C2()
{
  extern Class_Descriptor cd_S4933C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4933C2, buf);
    S4933C2 *dp, &lv = *(dp=new (buf) S4933C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4933C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4933C2)");
    check_base_class_offset(lv, (S4933C3*), 0, "S4933C2");
    test_class_info(&lv, &cd_S4933C2);
    dp->~S4933C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4933C2(Test_S4933C2, "S4933C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4933C2C1Ev();
extern void _ZN7S4933C2D1Ev();
Name_Map name_map_S4933C2[] = {
  NSPAIR(_ZN7S4933C2C1Ev),
  NSPAIR(_ZN7S4933C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4933C3;
extern VTBL_ENTRY _ZTI7S4933C3[];
extern  VTBL_ENTRY _ZTV7S4933C3[];
static Base_Class bases_S4933C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4933C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4933C2[];
extern void _ZN7S4933C2D1Ev();
extern void _ZN7S4933C2D0Ev();
extern void _ZN7S4933C32v3Ev();
extern void _ZN7S4933C32v4Ev();
extern void _ZN7S4933C32v5Ev();
extern void _ZN7S4933C32v6Ev();
extern void _ZN7S4933C32v7Ev();
extern void _ZN7S4933C32v8Ev();
extern void _ZN7S4933C32v9Ev();
extern void _ZN7S4933C23v10Ev();
extern void _ZN7S4933C23v11Ev();
extern void _ZN7S4933C23v12Ev();
extern void _ZN7S4933C23v13Ev();
extern void _ZN7S4933C23v14Ev();
extern void _ZN7S4933C23v15Ev();
extern void _ZN7S4933C23v16Ev();
static  VTBL_ENTRY vtc_S4933C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4933C2[0]),
  (VTBL_ENTRY)&_ZN7S4933C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4933C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S4933C2[];
extern  VTBL_ENTRY _ZTV7S4933C2[];
Class_Descriptor cd_S4933C2 = {  "S4933C2", // class name
  bases_S4933C2, 1,
  &(vtc_S4933C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4933C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4933C2),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4933C8  {
  ::S7368C9_nt s4933c8f0;
  int s4933c8f1;
  char s4933c8f2[2];
};
//SIG(-1 S4933C8) C1{ FC2{ m Fp Fi FC3{ m}} Fi Fc[2]}



static void Test_S4933C8()
{
  {
    init_simple_test("S4933C8");
    S4933C8 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S4933C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4933C8)");
    check_field_offset(lv, s4933c8f0, 0, "S4933C8.s4933c8f0");
    check_field_offset(lv, s4933c8f1, ABISELECT(16,12), "S4933C8.s4933c8f1");
    check_field_offset(lv, s4933c8f2, ABISELECT(20,16), "S4933C8.s4933c8f2");
  }
}
static Arrange_To_Call_Me vS4933C8(Test_S4933C8, "S4933C8", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4933C1  : S4933C2 {
  ::S4933C8 s4933c1f0;
  virtual  ~S4933C1(); // _ZN7S4933C1D1Ev
  virtual void  v1(); // _ZN7S4933C12v1Ev
  virtual void  v2(); // _ZN7S4933C12v2Ev
  S4933C1(); // tgen
};
//SIG(1 S4933C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 Fp[3] FC4{ FC5{ m Fp Fi FC6{ m}} Fp FC5} Fp FC7{ m FC5 Fi}} vd v10 v11 v12 v13 v14 v15 v16} vd v1 v2 FC8{ FC5 Fi Fc[2]}}


 S4933C1 ::~S4933C1(){ note_dtor("S4933C1", this);}
void  S4933C1 ::v1(){vfunc_called(this, "_ZN7S4933C12v1Ev");}
void  S4933C1 ::v2(){vfunc_called(this, "_ZN7S4933C12v2Ev");}
S4933C1 ::S4933C1(){ note_ctor("S4933C1", this);} // tgen

static void Test_S4933C1()
{
  extern Class_Descriptor cd_S4933C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S4933C1, buf);
    S4933C1 *dp, &lv = *(dp=new (buf) S4933C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S4933C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4933C1)");
    check_base_class_offset(lv, (S4933C3*)(S4933C2*), 0, "S4933C1");
    check_base_class_offset(lv, (S4933C2*), 0, "S4933C1");
    check_field_offset(lv, s4933c1f0, ABISELECT(104,64), "S4933C1.s4933c1f0");
    test_class_info(&lv, &cd_S4933C1);
    dp->~S4933C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4933C1(Test_S4933C1, "S4933C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S4933C1C1Ev();
extern void _ZN7S4933C1D1Ev();
Name_Map name_map_S4933C1[] = {
  NSPAIR(_ZN7S4933C1C1Ev),
  NSPAIR(_ZN7S4933C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4933C3;
extern VTBL_ENTRY _ZTI7S4933C3[];
extern  VTBL_ENTRY _ZTV7S4933C3[];
extern Class_Descriptor cd_S4933C2;
extern VTBL_ENTRY _ZTI7S4933C2[];
extern  VTBL_ENTRY _ZTV7S4933C2[];
static Base_Class bases_S4933C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4933C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4933C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4933C1[];
extern void _ZN7S4933C1D1Ev();
extern void _ZN7S4933C1D0Ev();
extern void _ZN7S4933C32v3Ev();
extern void _ZN7S4933C32v4Ev();
extern void _ZN7S4933C32v5Ev();
extern void _ZN7S4933C32v6Ev();
extern void _ZN7S4933C32v7Ev();
extern void _ZN7S4933C32v8Ev();
extern void _ZN7S4933C32v9Ev();
extern void _ZN7S4933C23v10Ev();
extern void _ZN7S4933C23v11Ev();
extern void _ZN7S4933C23v12Ev();
extern void _ZN7S4933C23v13Ev();
extern void _ZN7S4933C23v14Ev();
extern void _ZN7S4933C23v15Ev();
extern void _ZN7S4933C23v16Ev();
extern void _ZN7S4933C12v1Ev();
extern void _ZN7S4933C12v2Ev();
static  VTBL_ENTRY vtc_S4933C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4933C1[0]),
  (VTBL_ENTRY)&_ZN7S4933C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4933C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4933C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4933C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4933C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4933C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4933C1[];
extern  VTBL_ENTRY _ZTV7S4933C1[];
Class_Descriptor cd_S4933C1 = {  "S4933C1", // class name
  bases_S4933C1, 2,
  &(vtc_S4933C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S4933C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4933C1),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  S21658C1  {
  int s21658c1f0[2];
  __tsi64 s21658c1f1[2];
  void *s21658c1f2;
  ::S10256C11 s21658c1f3;
  char s21658c1f4;
  int s21658c1f5;
  void *s21658c1f6;
  ::S499C36_nt s21658c1f7;
  ::S487C6_nt s21658c1f8;
  ::S487C6_nt s21658c1f9;
  int s21658c1f10;
  void  mf21658c1(); // _ZN8S21658C19mf21658c1Ev
  virtual  ~S21658C1(); // _ZN8S21658C1D1Ev
  S21658C1(); // tgen
};
//SIG(1 S21658C1) C1{ vd m Fi[2] FL[2] Fp FC2{ m FC3{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC4{ Fi} Fi Fc Fi Fc} Fc Fi Fp FC5{ m Fp[2]} FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} FC6 Fi}


void  S21658C1 ::mf21658c1(){}
 S21658C1 ::~S21658C1(){ note_dtor("S21658C1", this);}
S21658C1 ::S21658C1(){ note_ctor("S21658C1", this);} // tgen

static void Test_S21658C1()
{
  extern Class_Descriptor cd_S21658C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,47)];
    init_test(&cd_S21658C1, buf);
    S21658C1 *dp, &lv = *(dp=new (buf) S21658C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,184), "sizeof(S21658C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21658C1)");
    check_field_offset(lv, s21658c1f0, ABISELECT(8,4), "S21658C1.s21658c1f0");
    check_field_offset(lv, s21658c1f1, ABISELECT(16,12), "S21658C1.s21658c1f1");
    check_field_offset(lv, s21658c1f2, ABISELECT(32,28), "S21658C1.s21658c1f2");
    check_field_offset(lv, s21658c1f3, ABISELECT(40,32), "S21658C1.s21658c1f3");
    check_field_offset(lv, s21658c1f4, ABISELECT(160,128), "S21658C1.s21658c1f4");
    check_field_offset(lv, s21658c1f5, ABISELECT(164,132), "S21658C1.s21658c1f5");
    check_field_offset(lv, s21658c1f6, ABISELECT(168,136), "S21658C1.s21658c1f6");
    check_field_offset(lv, s21658c1f7, ABISELECT(176,140), "S21658C1.s21658c1f7");
    check_field_offset(lv, s21658c1f8, ABISELECT(192,148), "S21658C1.s21658c1f8");
    check_field_offset(lv, s21658c1f9, ABISELECT(216,164), "S21658C1.s21658c1f9");
    check_field_offset(lv, s21658c1f10, ABISELECT(240,180), "S21658C1.s21658c1f10");
    test_class_info(&lv, &cd_S21658C1);
    dp->~S21658C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21658C1(Test_S21658C1, "S21658C1", ABISELECT(248,184));

#else // __cplusplus

extern void _ZN8S21658C1C1Ev();
extern void _ZN8S21658C1D1Ev();
Name_Map name_map_S21658C1[] = {
  NSPAIR(_ZN8S21658C1C1Ev),
  NSPAIR(_ZN8S21658C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21658C1[];
extern void _ZN8S21658C1D1Ev();
extern void _ZN8S21658C1D0Ev();
static  VTBL_ENTRY vtc_S21658C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21658C1[0]),
  (VTBL_ENTRY)&_ZN8S21658C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21658C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21658C1[];
extern  VTBL_ENTRY _ZTV8S21658C1[];
Class_Descriptor cd_S21658C1 = {  "S21658C1", // class name
  0,0,//no base classes
  &(vtc_S21658C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,184), // object size
  NSPAIRA(_ZTI8S21658C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21658C1),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  S3657C2  : S7368C49 {
  void *s3657c2f0;
  ::S10256C12_nt s3657c2f1;
  virtual  ~S3657C2(); // _ZN7S3657C2D1Ev
  virtual void  v6(); // _ZN7S3657C22v6Ev
  virtual void  v7(); // _ZN7S3657C22v7Ev
  virtual void  v8(); // _ZN7S3657C22v8Ev
  virtual void  v9(); // _ZN7S3657C22v9Ev
  virtual void  v10(); // _ZN7S3657C23v10Ev
  virtual void  v11(); // _ZN7S3657C23v11Ev
  virtual void  v12(); // _ZN7S3657C23v12Ev
  virtual void  v13(); // _ZN7S3657C23v13Ev
  virtual void  v14(); // _ZN7S3657C23v14Ev
  virtual void  v15(); // _ZN7S3657C23v15Ev
  virtual void  v16(); // _ZN7S3657C23v16Ev
  S3657C2(); // tgen
};
//SIG(-1 S3657C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC5{ m Fi[4] Fp Fc Fi[2] Fp[2]}}


 S3657C2 ::~S3657C2(){ note_dtor("S3657C2", this);}
void  S3657C2 ::v6(){vfunc_called(this, "_ZN7S3657C22v6Ev");}
void  S3657C2 ::v7(){vfunc_called(this, "_ZN7S3657C22v7Ev");}
void  S3657C2 ::v8(){vfunc_called(this, "_ZN7S3657C22v8Ev");}
void  S3657C2 ::v9(){vfunc_called(this, "_ZN7S3657C22v9Ev");}
void  S3657C2 ::v10(){vfunc_called(this, "_ZN7S3657C23v10Ev");}
void  S3657C2 ::v11(){vfunc_called(this, "_ZN7S3657C23v11Ev");}
void  S3657C2 ::v12(){vfunc_called(this, "_ZN7S3657C23v12Ev");}
void  S3657C2 ::v13(){vfunc_called(this, "_ZN7S3657C23v13Ev");}
void  S3657C2 ::v14(){vfunc_called(this, "_ZN7S3657C23v14Ev");}
void  S3657C2 ::v15(){vfunc_called(this, "_ZN7S3657C23v15Ev");}
void  S3657C2 ::v16(){vfunc_called(this, "_ZN7S3657C23v16Ev");}
S3657C2 ::S3657C2(){ note_ctor("S3657C2", this);} // tgen

static void Test_S3657C2()
{
  extern Class_Descriptor cd_S3657C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S3657C2, buf);
    S3657C2 *dp, &lv = *(dp=new (buf) S3657C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S3657C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3657C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3657C2");
    check_field_offset(lv, s3657c2f0, ABISELECT(32,20), "S3657C2.s3657c2f0");
    check_field_offset(lv, s3657c2f1, ABISELECT(40,24), "S3657C2.s3657c2f1");
    test_class_info(&lv, &cd_S3657C2);
    dp->~S3657C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3657C2(Test_S3657C2, "S3657C2", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S3657C2C1Ev();
extern void _ZN7S3657C2D1Ev();
Name_Map name_map_S3657C2[] = {
  NSPAIR(_ZN7S3657C2C1Ev),
  NSPAIR(_ZN7S3657C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3657C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3657C2[];
extern void _ZN7S3657C2D1Ev();
extern void _ZN7S3657C2D0Ev();
extern void _ZN7S3657C22v6Ev();
extern void _ZN7S3657C22v7Ev();
extern void _ZN7S3657C22v8Ev();
extern void _ZN7S3657C22v9Ev();
extern void _ZN7S3657C23v10Ev();
extern void _ZN7S3657C23v11Ev();
extern void _ZN7S3657C23v12Ev();
extern void _ZN7S3657C23v13Ev();
extern void _ZN7S3657C23v14Ev();
extern void _ZN7S3657C23v15Ev();
extern void _ZN7S3657C23v16Ev();
static  VTBL_ENTRY vtc_S3657C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3657C2[0]),
  (VTBL_ENTRY)&_ZN7S3657C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3657C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S3657C2[];
extern  VTBL_ENTRY _ZTV7S3657C2[];
Class_Descriptor cd_S3657C2 = {  "S3657C2", // class name
  bases_S3657C2, 1,
  &(vtc_S3657C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S3657C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3657C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3657C7  {
  virtual  ~S3657C7(); // _ZN7S3657C7D1Ev
  virtual void  v17(); // _ZN7S3657C73v17Ev
  S3657C7(); // tgen
};
//SIG(-1 S3657C7) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S3657C7C1Ev();
extern void _ZN7S3657C7D1Ev();
Name_Map name_map_S3657C7[] = {
  NSPAIR(_ZN7S3657C7C1Ev),
  NSPAIR(_ZN7S3657C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3657C7[];
extern void _ZN7S3657C7D1Ev();
extern void _ZN7S3657C7D0Ev();
extern void _ZN7S3657C73v17Ev();
static  VTBL_ENTRY vtc_S3657C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3657C7[0]),
  (VTBL_ENTRY)&_ZN7S3657C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3657C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3657C73v17Ev,
};
extern VTBL_ENTRY _ZTI7S3657C7[];
extern  VTBL_ENTRY _ZTV7S3657C7[];
Class_Descriptor cd_S3657C7 = {  "S3657C7", // class name
  0,0,//no base classes
  &(vtc_S3657C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3657C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3657C7),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  S3657C1  : S3657C2 , S3657C7 {
  virtual  ~S3657C1(); // _ZN7S3657C1D1Ev
  virtual void  v1(); // _ZN7S3657C12v1Ev
  virtual void  v2(); // _ZN7S3657C12v2Ev
  virtual void  v3(); // _ZN7S3657C12v3Ev
  virtual void  v4(); // _ZN7S3657C12v4Ev
  virtual void  v5(); // _ZN7S3657C12v5Ev
  S3657C1(); // tgen
};
//SIG(1 S3657C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]}} BC7{ vd v17} vd v1 v2 v3 v4 v5}


 S3657C1 ::~S3657C1(){ note_dtor("S3657C1", this);}
void  S3657C1 ::v1(){vfunc_called(this, "_ZN7S3657C12v1Ev");}
void  S3657C1 ::v2(){vfunc_called(this, "_ZN7S3657C12v2Ev");}
void  S3657C1 ::v3(){vfunc_called(this, "_ZN7S3657C12v3Ev");}
void  S3657C1 ::v4(){vfunc_called(this, "_ZN7S3657C12v4Ev");}
void  S3657C1 ::v5(){vfunc_called(this, "_ZN7S3657C12v5Ev");}
S3657C1 ::S3657C1(){ note_ctor("S3657C1", this);} // tgen

static void Test_S3657C1()
{
  extern Class_Descriptor cd_S3657C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S3657C1, buf);
    S3657C1 *dp, &lv = *(dp=new (buf) S3657C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S3657C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3657C1)");
    check_base_class_offset(lv, (S7368C49*)(S3657C2*), 0, "S3657C1");
    check_base_class_offset(lv, (S3657C2*), 0, "S3657C1");
    check_base_class_offset(lv, (S3657C7*), ABISELECT(96,64), "S3657C1");
    test_class_info(&lv, &cd_S3657C1);
    dp->~S3657C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3657C1(Test_S3657C1, "S3657C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S3657C1C1Ev();
extern void _ZN7S3657C1D1Ev();
Name_Map name_map_S3657C1[] = {
  NSPAIR(_ZN7S3657C1C1Ev),
  NSPAIR(_ZN7S3657C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3657C2;
extern VTBL_ENTRY _ZTI7S3657C2[];
extern  VTBL_ENTRY _ZTV7S3657C2[];
extern Class_Descriptor cd_S3657C7;
extern VTBL_ENTRY _ZTI7S3657C7[];
extern  VTBL_ENTRY _ZTV7S3657C7[];
static Base_Class bases_S3657C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3657C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3657C7,    ABISELECT(96,64), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3657C1[];
extern void _ZN7S3657C1D1Ev();
extern void _ZN7S3657C1D0Ev();
extern void _ZN7S3657C22v6Ev();
extern void _ZN7S3657C22v7Ev();
extern void _ZN7S3657C22v8Ev();
extern void _ZN7S3657C22v9Ev();
extern void _ZN7S3657C23v10Ev();
extern void _ZN7S3657C23v11Ev();
extern void _ZN7S3657C23v12Ev();
extern void _ZN7S3657C23v13Ev();
extern void _ZN7S3657C23v14Ev();
extern void _ZN7S3657C23v15Ev();
extern void _ZN7S3657C23v16Ev();
extern void _ZN7S3657C12v1Ev();
extern void _ZN7S3657C12v2Ev();
extern void _ZN7S3657C12v3Ev();
extern void _ZN7S3657C12v4Ev();
extern void _ZN7S3657C12v5Ev();
extern void ABISELECT(_ZThn96_N7S3657C1D1Ev,_ZThn64_N7S3657C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S3657C1D0Ev,_ZThn64_N7S3657C1D0Ev)();
extern void _ZN7S3657C73v17Ev();
static  VTBL_ENTRY vtc_S3657C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3657C1[0]),
  (VTBL_ENTRY)&_ZN7S3657C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3657C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3657C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3657C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3657C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3657C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3657C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3657C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3657C12v5Ev,
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI7S3657C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3657C1D1Ev,_ZThn64_N7S3657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S3657C1D0Ev,_ZThn64_N7S3657C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3657C73v17Ev,
};
extern VTBL_ENTRY _ZTI7S3657C1[];
extern  VTBL_ENTRY _ZTV7S3657C1[];
Class_Descriptor cd_S3657C1 = {  "S3657C1", // class name
  bases_S3657C1, 3,
  &(vtc_S3657C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S3657C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3657C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2152C4  {
  ::S7368C9_nt s2152c4f0;
  int s2152c4f1[2];
  char s2152c4f2;
  virtual  ~S2152C4(); // _ZN7S2152C4D1Ev
  virtual void  v3(); // _ZN7S2152C42v3Ev
  virtual void  v4(); // _ZN7S2152C42v4Ev
  virtual void  v5(); // _ZN7S2152C42v5Ev
  S2152C4(); // tgen
};
//SIG(-1 S2152C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2152C4 ::~S2152C4(){ note_dtor("S2152C4", this);}
void  S2152C4 ::v3(){vfunc_called(this, "_ZN7S2152C42v3Ev");}
void  S2152C4 ::v4(){vfunc_called(this, "_ZN7S2152C42v4Ev");}
void  S2152C4 ::v5(){vfunc_called(this, "_ZN7S2152C42v5Ev");}
S2152C4 ::S2152C4(){ note_ctor("S2152C4", this);} // tgen

static void Test_S2152C4()
{
  extern Class_Descriptor cd_S2152C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2152C4, buf);
    S2152C4 *dp, &lv = *(dp=new (buf) S2152C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2152C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2152C4)");
    check_field_offset(lv, s2152c4f0, ABISELECT(8,4), "S2152C4.s2152c4f0");
    check_field_offset(lv, s2152c4f1, ABISELECT(24,16), "S2152C4.s2152c4f1");
    check_field_offset(lv, s2152c4f2, ABISELECT(32,24), "S2152C4.s2152c4f2");
    test_class_info(&lv, &cd_S2152C4);
    dp->~S2152C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2152C4(Test_S2152C4, "S2152C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2152C4C1Ev();
extern void _ZN7S2152C4D1Ev();
Name_Map name_map_S2152C4[] = {
  NSPAIR(_ZN7S2152C4C1Ev),
  NSPAIR(_ZN7S2152C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2152C4[];
extern void _ZN7S2152C4D1Ev();
extern void _ZN7S2152C4D0Ev();
extern void _ZN7S2152C42v3Ev();
extern void _ZN7S2152C42v4Ev();
extern void _ZN7S2152C42v5Ev();
static  VTBL_ENTRY vtc_S2152C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2152C4[0]),
  (VTBL_ENTRY)&_ZN7S2152C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2152C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2152C4[];
extern  VTBL_ENTRY _ZTV7S2152C4[];
Class_Descriptor cd_S2152C4 = {  "S2152C4", // class name
  0,0,//no base classes
  &(vtc_S2152C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2152C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2152C4),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  S2152C3  : S2152C4 , S7368C49 {
  void *s2152c3f0;
  virtual  ~S2152C3(); // _ZN7S2152C3D1Ev
  S2152C3(); // tgen
};
//SIG(-1 S2152C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2152C3()
{
  extern Class_Descriptor cd_S2152C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2152C3, buf);
    S2152C3 *dp, &lv = *(dp=new (buf) S2152C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2152C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2152C3)");
    check_base_class_offset(lv, (S2152C4*), 0, "S2152C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2152C3");
    check_field_offset(lv, s2152c3f0, ABISELECT(72,48), "S2152C3.s2152c3f0");
    test_class_info(&lv, &cd_S2152C3);
    dp->~S2152C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2152C3(Test_S2152C3, "S2152C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2152C3C1Ev();
extern void _ZN7S2152C3D1Ev();
Name_Map name_map_S2152C3[] = {
  NSPAIR(_ZN7S2152C3C1Ev),
  NSPAIR(_ZN7S2152C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2152C4;
extern VTBL_ENTRY _ZTI7S2152C4[];
extern  VTBL_ENTRY _ZTV7S2152C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2152C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2152C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2152C3[];
extern void _ZN7S2152C3D1Ev();
extern void _ZN7S2152C3D0Ev();
extern void _ZN7S2152C42v3Ev();
extern void _ZN7S2152C42v4Ev();
extern void _ZN7S2152C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2152C3D1Ev,_ZThn28_N7S2152C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2152C3D0Ev,_ZThn28_N7S2152C3D0Ev)();
static  VTBL_ENTRY vtc_S2152C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2152C3[0]),
  (VTBL_ENTRY)&_ZN7S2152C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2152C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2152C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2152C3D1Ev,_ZThn28_N7S2152C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2152C3D0Ev,_ZThn28_N7S2152C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2152C3[];
extern  VTBL_ENTRY _ZTV7S2152C3[];
Class_Descriptor cd_S2152C3 = {  "S2152C3", // class name
  bases_S2152C3, 2,
  &(vtc_S2152C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2152C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2152C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2152C2  : S2152C3 {
  int s2152c2f0;
  virtual  ~S2152C2(); // _ZN7S2152C2D1Ev
  virtual void  v6(); // _ZN7S2152C22v6Ev
  S2152C2(); // tgen
};
//SIG(-1 S2152C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fi}


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

static void Test_S2152C2()
{
  extern Class_Descriptor cd_S2152C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2152C2, buf);
    S2152C2 *dp, &lv = *(dp=new (buf) S2152C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2152C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2152C2)");
    check_base_class_offset(lv, (S2152C4*)(S2152C3*), 0, "S2152C2");
    check_base_class_offset(lv, (S7368C49*)(S2152C3*), ABISELECT(40,28), "S2152C2");
    check_base_class_offset(lv, (S2152C3*), 0, "S2152C2");
    check_field_offset(lv, s2152c2f0, ABISELECT(80,52), "S2152C2.s2152c2f0");
    test_class_info(&lv, &cd_S2152C2);
    dp->~S2152C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2152C2(Test_S2152C2, "S2152C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2152C2C1Ev();
extern void _ZN7S2152C2D1Ev();
Name_Map name_map_S2152C2[] = {
  NSPAIR(_ZN7S2152C2C1Ev),
  NSPAIR(_ZN7S2152C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2152C4;
extern VTBL_ENTRY _ZTI7S2152C4[];
extern  VTBL_ENTRY _ZTV7S2152C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2152C3;
extern VTBL_ENTRY _ZTI7S2152C3[];
extern  VTBL_ENTRY _ZTV7S2152C3[];
static Base_Class bases_S2152C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2152C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2152C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2152C2[];
extern void _ZN7S2152C2D1Ev();
extern void _ZN7S2152C2D0Ev();
extern void _ZN7S2152C42v3Ev();
extern void _ZN7S2152C42v4Ev();
extern void _ZN7S2152C42v5Ev();
extern void _ZN7S2152C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2152C2D1Ev,_ZThn28_N7S2152C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2152C2D0Ev,_ZThn28_N7S2152C2D0Ev)();
static  VTBL_ENTRY vtc_S2152C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2152C2[0]),
  (VTBL_ENTRY)&_ZN7S2152C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2152C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2152C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2152C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2152C2D1Ev,_ZThn28_N7S2152C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2152C2D0Ev,_ZThn28_N7S2152C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2152C2[];
extern  VTBL_ENTRY _ZTV7S2152C2[];
Class_Descriptor cd_S2152C2 = {  "S2152C2", // class name
  bases_S2152C2, 3,
  &(vtc_S2152C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2152C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2152C2),12, //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  S2152C11_nt  {
  __tsi64 s2152c11f0;
};
//SIG(-1 S2152C11_nt) C1{ FL}



//skip512 S2152C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2152C10_nt  {
  __tsi64 s2152c10f0[3];
  int s2152c10f1[4];
  ::S2152C11_nt s2152c10f2;
};
//SIG(-1 S2152C10_nt) C1{ FL[3] Fi[4] FC2{ FL}}



//skip512 S2152C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2152C1  : S2152C2 {
  int s2152c1f0;
  ::S2152C10_nt s2152c1f1;
  int s2152c1f2;
  virtual  ~S2152C1(); // _ZN7S2152C1D1Ev
  virtual void  v1(); // _ZN7S2152C12v1Ev
  virtual void  v2(); // _ZN7S2152C12v2Ev
  S2152C1(); // tgen
};
//SIG(1 S2152C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fi} vd v1 v2 Fi FC10{ FL[3] Fi[4] FC11{ FL}} Fi}


 S2152C1 ::~S2152C1(){ note_dtor("S2152C1", this);}
void  S2152C1 ::v1(){vfunc_called(this, "_ZN7S2152C12v1Ev");}
void  S2152C1 ::v2(){vfunc_called(this, "_ZN7S2152C12v2Ev");}
S2152C1 ::S2152C1(){ note_ctor("S2152C1", this);} // tgen

static void Test_S2152C1()
{
  extern Class_Descriptor cd_S2152C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,29)];
    init_test(&cd_S2152C1, buf);
    S2152C1 *dp, &lv = *(dp=new (buf) S2152C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,112), "sizeof(S2152C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2152C1)");
    check_base_class_offset(lv, (S2152C4*)(S2152C3*)(S2152C2*), 0, "S2152C1");
    check_base_class_offset(lv, (S7368C49*)(S2152C3*)(S2152C2*), ABISELECT(40,28), "S2152C1");
    check_base_class_offset(lv, (S2152C3*)(S2152C2*), 0, "S2152C1");
    check_base_class_offset(lv, (S2152C2*), 0, "S2152C1");
    check_field_offset(lv, s2152c1f0, ABISELECT(84,56), "S2152C1.s2152c1f0");
    check_field_offset(lv, s2152c1f1, ABISELECT(88,60), "S2152C1.s2152c1f1");
    check_field_offset(lv, s2152c1f2, ABISELECT(136,108), "S2152C1.s2152c1f2");
    test_class_info(&lv, &cd_S2152C1);
    dp->~S2152C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2152C1(Test_S2152C1, "S2152C1", ABISELECT(144,112));

#else // __cplusplus

extern void _ZN7S2152C1C1Ev();
extern void _ZN7S2152C1D1Ev();
Name_Map name_map_S2152C1[] = {
  NSPAIR(_ZN7S2152C1C1Ev),
  NSPAIR(_ZN7S2152C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2152C4;
extern VTBL_ENTRY _ZTI7S2152C4[];
extern  VTBL_ENTRY _ZTV7S2152C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2152C3;
extern VTBL_ENTRY _ZTI7S2152C3[];
extern  VTBL_ENTRY _ZTV7S2152C3[];
extern Class_Descriptor cd_S2152C2;
extern VTBL_ENTRY _ZTI7S2152C2[];
extern  VTBL_ENTRY _ZTV7S2152C2[];
static Base_Class bases_S2152C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2152C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2152C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2152C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2152C1[];
extern void _ZN7S2152C1D1Ev();
extern void _ZN7S2152C1D0Ev();
extern void _ZN7S2152C42v3Ev();
extern void _ZN7S2152C42v4Ev();
extern void _ZN7S2152C42v5Ev();
extern void _ZN7S2152C22v6Ev();
extern void _ZN7S2152C12v1Ev();
extern void _ZN7S2152C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2152C1D1Ev,_ZThn28_N7S2152C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2152C1D0Ev,_ZThn28_N7S2152C1D0Ev)();
static  VTBL_ENTRY vtc_S2152C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2152C1[0]),
  (VTBL_ENTRY)&_ZN7S2152C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2152C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2152C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2152C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2152C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2152C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2152C1D1Ev,_ZThn28_N7S2152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2152C1D0Ev,_ZThn28_N7S2152C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2152C1[];
extern  VTBL_ENTRY _ZTV7S2152C1[];
Class_Descriptor cd_S2152C1 = {  "S2152C1", // class name
  bases_S2152C1, 4,
  &(vtc_S2152C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,112), // object size
  NSPAIRA(_ZTI7S2152C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2152C1),14, //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  S2151C4  {
  ::S7368C9_nt s2151c4f0;
  int s2151c4f1[2];
  char s2151c4f2;
  virtual  ~S2151C4(); // _ZN7S2151C4D1Ev
  virtual void  v3(); // _ZN7S2151C42v3Ev
  virtual void  v4(); // _ZN7S2151C42v4Ev
  virtual void  v5(); // _ZN7S2151C42v5Ev
  S2151C4(); // tgen
};
//SIG(-1 S2151C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2151C4 ::~S2151C4(){ note_dtor("S2151C4", this);}
void  S2151C4 ::v3(){vfunc_called(this, "_ZN7S2151C42v3Ev");}
void  S2151C4 ::v4(){vfunc_called(this, "_ZN7S2151C42v4Ev");}
void  S2151C4 ::v5(){vfunc_called(this, "_ZN7S2151C42v5Ev");}
S2151C4 ::S2151C4(){ note_ctor("S2151C4", this);} // tgen

static void Test_S2151C4()
{
  extern Class_Descriptor cd_S2151C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2151C4, buf);
    S2151C4 *dp, &lv = *(dp=new (buf) S2151C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2151C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2151C4)");
    check_field_offset(lv, s2151c4f0, ABISELECT(8,4), "S2151C4.s2151c4f0");
    check_field_offset(lv, s2151c4f1, ABISELECT(24,16), "S2151C4.s2151c4f1");
    check_field_offset(lv, s2151c4f2, ABISELECT(32,24), "S2151C4.s2151c4f2");
    test_class_info(&lv, &cd_S2151C4);
    dp->~S2151C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2151C4(Test_S2151C4, "S2151C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2151C4C1Ev();
extern void _ZN7S2151C4D1Ev();
Name_Map name_map_S2151C4[] = {
  NSPAIR(_ZN7S2151C4C1Ev),
  NSPAIR(_ZN7S2151C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2151C4[];
extern void _ZN7S2151C4D1Ev();
extern void _ZN7S2151C4D0Ev();
extern void _ZN7S2151C42v3Ev();
extern void _ZN7S2151C42v4Ev();
extern void _ZN7S2151C42v5Ev();
static  VTBL_ENTRY vtc_S2151C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2151C4[0]),
  (VTBL_ENTRY)&_ZN7S2151C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2151C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2151C4[];
extern  VTBL_ENTRY _ZTV7S2151C4[];
Class_Descriptor cd_S2151C4 = {  "S2151C4", // class name
  0,0,//no base classes
  &(vtc_S2151C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2151C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2151C4),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  S2151C3  : S2151C4 , S7368C49 {
  void *s2151c3f0;
  virtual  ~S2151C3(); // _ZN7S2151C3D1Ev
  S2151C3(); // tgen
};
//SIG(-1 S2151C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2151C3()
{
  extern Class_Descriptor cd_S2151C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2151C3, buf);
    S2151C3 *dp, &lv = *(dp=new (buf) S2151C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2151C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2151C3)");
    check_base_class_offset(lv, (S2151C4*), 0, "S2151C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2151C3");
    check_field_offset(lv, s2151c3f0, ABISELECT(72,48), "S2151C3.s2151c3f0");
    test_class_info(&lv, &cd_S2151C3);
    dp->~S2151C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2151C3(Test_S2151C3, "S2151C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2151C3C1Ev();
extern void _ZN7S2151C3D1Ev();
Name_Map name_map_S2151C3[] = {
  NSPAIR(_ZN7S2151C3C1Ev),
  NSPAIR(_ZN7S2151C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2151C4;
extern VTBL_ENTRY _ZTI7S2151C4[];
extern  VTBL_ENTRY _ZTV7S2151C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2151C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2151C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2151C3[];
extern void _ZN7S2151C3D1Ev();
extern void _ZN7S2151C3D0Ev();
extern void _ZN7S2151C42v3Ev();
extern void _ZN7S2151C42v4Ev();
extern void _ZN7S2151C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2151C3D1Ev,_ZThn28_N7S2151C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2151C3D0Ev,_ZThn28_N7S2151C3D0Ev)();
static  VTBL_ENTRY vtc_S2151C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2151C3[0]),
  (VTBL_ENTRY)&_ZN7S2151C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2151C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2151C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2151C3D1Ev,_ZThn28_N7S2151C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2151C3D0Ev,_ZThn28_N7S2151C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2151C3[];
extern  VTBL_ENTRY _ZTV7S2151C3[];
Class_Descriptor cd_S2151C3 = {  "S2151C3", // class name
  bases_S2151C3, 2,
  &(vtc_S2151C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2151C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2151C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2151C2  : S2151C3 {
  int s2151c2f0;
  virtual  ~S2151C2(); // _ZN7S2151C2D1Ev
  virtual void  v6(); // _ZN7S2151C22v6Ev
  S2151C2(); // tgen
};
//SIG(-1 S2151C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fi}


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

static void Test_S2151C2()
{
  extern Class_Descriptor cd_S2151C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2151C2, buf);
    S2151C2 *dp, &lv = *(dp=new (buf) S2151C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2151C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2151C2)");
    check_base_class_offset(lv, (S2151C4*)(S2151C3*), 0, "S2151C2");
    check_base_class_offset(lv, (S7368C49*)(S2151C3*), ABISELECT(40,28), "S2151C2");
    check_base_class_offset(lv, (S2151C3*), 0, "S2151C2");
    check_field_offset(lv, s2151c2f0, ABISELECT(80,52), "S2151C2.s2151c2f0");
    test_class_info(&lv, &cd_S2151C2);
    dp->~S2151C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2151C2(Test_S2151C2, "S2151C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2151C2C1Ev();
extern void _ZN7S2151C2D1Ev();
Name_Map name_map_S2151C2[] = {
  NSPAIR(_ZN7S2151C2C1Ev),
  NSPAIR(_ZN7S2151C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2151C4;
extern VTBL_ENTRY _ZTI7S2151C4[];
extern  VTBL_ENTRY _ZTV7S2151C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2151C3;
extern VTBL_ENTRY _ZTI7S2151C3[];
extern  VTBL_ENTRY _ZTV7S2151C3[];
static Base_Class bases_S2151C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2151C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2151C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2151C2[];
extern void _ZN7S2151C2D1Ev();
extern void _ZN7S2151C2D0Ev();
extern void _ZN7S2151C42v3Ev();
extern void _ZN7S2151C42v4Ev();
extern void _ZN7S2151C42v5Ev();
extern void _ZN7S2151C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2151C2D1Ev,_ZThn28_N7S2151C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2151C2D0Ev,_ZThn28_N7S2151C2D0Ev)();
static  VTBL_ENTRY vtc_S2151C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2151C2[0]),
  (VTBL_ENTRY)&_ZN7S2151C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2151C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2151C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2151C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2151C2D1Ev,_ZThn28_N7S2151C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2151C2D0Ev,_ZThn28_N7S2151C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2151C2[];
extern  VTBL_ENTRY _ZTV7S2151C2[];
Class_Descriptor cd_S2151C2 = {  "S2151C2", // class name
  bases_S2151C2, 3,
  &(vtc_S2151C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2151C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2151C2),12, //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  S2151C11_nt  {
  long s2151c11f0;
};
//SIG(-1 S2151C11_nt) C1{ Fl}



//skip512 S2151C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2151C10_nt  {
  __tsi64 s2151c10f0[3];
  int s2151c10f1[4];
  ::S2151C11_nt s2151c10f2;
};
//SIG(-1 S2151C10_nt) C1{ FL[3] Fi[4] FC2{ Fl}}



//skip512 S2151C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2151C1  : S2151C2 {
  int s2151c1f0;
  ::S2151C10_nt s2151c1f1;
  int s2151c1f2;
  virtual  ~S2151C1(); // _ZN7S2151C1D1Ev
  virtual void  v1(); // _ZN7S2151C12v1Ev
  virtual void  v2(); // _ZN7S2151C12v2Ev
  S2151C1(); // tgen
};
//SIG(1 S2151C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fi} vd v1 v2 Fi FC10{ FL[3] Fi[4] FC11{ Fl}} Fi}


 S2151C1 ::~S2151C1(){ note_dtor("S2151C1", this);}
void  S2151C1 ::v1(){vfunc_called(this, "_ZN7S2151C12v1Ev");}
void  S2151C1 ::v2(){vfunc_called(this, "_ZN7S2151C12v2Ev");}
S2151C1 ::S2151C1(){ note_ctor("S2151C1", this);} // tgen

static void Test_S2151C1()
{
  extern Class_Descriptor cd_S2151C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,28)];
    init_test(&cd_S2151C1, buf);
    S2151C1 *dp, &lv = *(dp=new (buf) S2151C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,108), "sizeof(S2151C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2151C1)");
    check_base_class_offset(lv, (S2151C4*)(S2151C3*)(S2151C2*), 0, "S2151C1");
    check_base_class_offset(lv, (S7368C49*)(S2151C3*)(S2151C2*), ABISELECT(40,28), "S2151C1");
    check_base_class_offset(lv, (S2151C3*)(S2151C2*), 0, "S2151C1");
    check_base_class_offset(lv, (S2151C2*), 0, "S2151C1");
    check_field_offset(lv, s2151c1f0, ABISELECT(84,56), "S2151C1.s2151c1f0");
    check_field_offset(lv, s2151c1f1, ABISELECT(88,60), "S2151C1.s2151c1f1");
    check_field_offset(lv, s2151c1f2, ABISELECT(136,104), "S2151C1.s2151c1f2");
    test_class_info(&lv, &cd_S2151C1);
    dp->~S2151C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2151C1(Test_S2151C1, "S2151C1", ABISELECT(144,108));

#else // __cplusplus

extern void _ZN7S2151C1C1Ev();
extern void _ZN7S2151C1D1Ev();
Name_Map name_map_S2151C1[] = {
  NSPAIR(_ZN7S2151C1C1Ev),
  NSPAIR(_ZN7S2151C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2151C4;
extern VTBL_ENTRY _ZTI7S2151C4[];
extern  VTBL_ENTRY _ZTV7S2151C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2151C3;
extern VTBL_ENTRY _ZTI7S2151C3[];
extern  VTBL_ENTRY _ZTV7S2151C3[];
extern Class_Descriptor cd_S2151C2;
extern VTBL_ENTRY _ZTI7S2151C2[];
extern  VTBL_ENTRY _ZTV7S2151C2[];
static Base_Class bases_S2151C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2151C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2151C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2151C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2151C1[];
extern void _ZN7S2151C1D1Ev();
extern void _ZN7S2151C1D0Ev();
extern void _ZN7S2151C42v3Ev();
extern void _ZN7S2151C42v4Ev();
extern void _ZN7S2151C42v5Ev();
extern void _ZN7S2151C22v6Ev();
extern void _ZN7S2151C12v1Ev();
extern void _ZN7S2151C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2151C1D1Ev,_ZThn28_N7S2151C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2151C1D0Ev,_ZThn28_N7S2151C1D0Ev)();
static  VTBL_ENTRY vtc_S2151C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2151C1[0]),
  (VTBL_ENTRY)&_ZN7S2151C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2151C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2151C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2151C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2151C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2151C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2151C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2151C1D1Ev,_ZThn28_N7S2151C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2151C1D0Ev,_ZThn28_N7S2151C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2151C1[];
extern  VTBL_ENTRY _ZTV7S2151C1[];
Class_Descriptor cd_S2151C1 = {  "S2151C1", // class name
  bases_S2151C1, 4,
  &(vtc_S2151C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,108), // object size
  NSPAIRA(_ZTI7S2151C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2151C1),14, //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  S4934C3  {
  void *s4934c3f0[3];
  ::S4933C4 s4934c3f1;
  void *s4934c3f2;
  ::S487C6_nt s4934c3f3;
  virtual  ~S4934C3(); // _ZN7S4934C3D1Ev
  virtual void  v3(); // _ZN7S4934C32v3Ev
  virtual void  v4(); // _ZN7S4934C32v4Ev
  virtual void  v5(); // _ZN7S4934C32v5Ev
  virtual void  v6(); // _ZN7S4934C32v6Ev
  virtual void  v7(); // _ZN7S4934C32v7Ev
  virtual void  v8(); // _ZN7S4934C32v8Ev
  virtual void  v9(); // _ZN7S4934C32v9Ev
  S4934C3(); // tgen
};
//SIG(-1 S4934C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[3] FC2{ FC3{ m Fp Fi FC4{ m}} Fp FC3} Fp FC5{ m FC3 Fi}}


 S4934C3 ::~S4934C3(){ note_dtor("S4934C3", this);}
void  S4934C3 ::v3(){vfunc_called(this, "_ZN7S4934C32v3Ev");}
void  S4934C3 ::v4(){vfunc_called(this, "_ZN7S4934C32v4Ev");}
void  S4934C3 ::v5(){vfunc_called(this, "_ZN7S4934C32v5Ev");}
void  S4934C3 ::v6(){vfunc_called(this, "_ZN7S4934C32v6Ev");}
void  S4934C3 ::v7(){vfunc_called(this, "_ZN7S4934C32v7Ev");}
void  S4934C3 ::v8(){vfunc_called(this, "_ZN7S4934C32v8Ev");}
void  S4934C3 ::v9(){vfunc_called(this, "_ZN7S4934C32v9Ev");}
S4934C3 ::S4934C3(){ note_ctor("S4934C3", this);} // tgen

static void Test_S4934C3()
{
  extern Class_Descriptor cd_S4934C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4934C3, buf);
    S4934C3 *dp, &lv = *(dp=new (buf) S4934C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4934C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4934C3)");
    check_field_offset(lv, s4934c3f0, ABISELECT(8,4), "S4934C3.s4934c3f0");
    check_field_offset(lv, s4934c3f1, ABISELECT(32,16), "S4934C3.s4934c3f1");
    check_field_offset(lv, s4934c3f2, ABISELECT(72,44), "S4934C3.s4934c3f2");
    check_field_offset(lv, s4934c3f3, ABISELECT(80,48), "S4934C3.s4934c3f3");
    test_class_info(&lv, &cd_S4934C3);
    dp->~S4934C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4934C3(Test_S4934C3, "S4934C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4934C3C1Ev();
extern void _ZN7S4934C3D1Ev();
Name_Map name_map_S4934C3[] = {
  NSPAIR(_ZN7S4934C3C1Ev),
  NSPAIR(_ZN7S4934C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4934C3[];
extern void _ZN7S4934C3D1Ev();
extern void _ZN7S4934C3D0Ev();
extern void _ZN7S4934C32v3Ev();
extern void _ZN7S4934C32v4Ev();
extern void _ZN7S4934C32v5Ev();
extern void _ZN7S4934C32v6Ev();
extern void _ZN7S4934C32v7Ev();
extern void _ZN7S4934C32v8Ev();
extern void _ZN7S4934C32v9Ev();
static  VTBL_ENTRY vtc_S4934C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4934C3[0]),
  (VTBL_ENTRY)&_ZN7S4934C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4934C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S4934C3[];
extern  VTBL_ENTRY _ZTV7S4934C3[];
Class_Descriptor cd_S4934C3 = {  "S4934C3", // class name
  0,0,//no base classes
  &(vtc_S4934C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4934C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4934C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4934C2  : S4934C3 {
  virtual  ~S4934C2(); // _ZN7S4934C2D1Ev
  virtual void  v10(); // _ZN7S4934C23v10Ev
  virtual void  v11(); // _ZN7S4934C23v11Ev
  virtual void  v12(); // _ZN7S4934C23v12Ev
  virtual void  v13(); // _ZN7S4934C23v13Ev
  virtual void  v14(); // _ZN7S4934C23v14Ev
  virtual void  v15(); // _ZN7S4934C23v15Ev
  virtual void  v16(); // _ZN7S4934C23v16Ev
  S4934C2(); // tgen
};
//SIG(-1 S4934C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fp[3] FC3{ FC4{ m Fp Fi FC5{ m}} Fp FC4} Fp FC6{ m FC4 Fi}} vd v1 v2 v3 v4 v5 v6 v7}


 S4934C2 ::~S4934C2(){ note_dtor("S4934C2", this);}
void  S4934C2 ::v10(){vfunc_called(this, "_ZN7S4934C23v10Ev");}
void  S4934C2 ::v11(){vfunc_called(this, "_ZN7S4934C23v11Ev");}
void  S4934C2 ::v12(){vfunc_called(this, "_ZN7S4934C23v12Ev");}
void  S4934C2 ::v13(){vfunc_called(this, "_ZN7S4934C23v13Ev");}
void  S4934C2 ::v14(){vfunc_called(this, "_ZN7S4934C23v14Ev");}
void  S4934C2 ::v15(){vfunc_called(this, "_ZN7S4934C23v15Ev");}
void  S4934C2 ::v16(){vfunc_called(this, "_ZN7S4934C23v16Ev");}
S4934C2 ::S4934C2(){ note_ctor("S4934C2", this);} // tgen

static void Test_S4934C2()
{
  extern Class_Descriptor cd_S4934C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4934C2, buf);
    S4934C2 *dp, &lv = *(dp=new (buf) S4934C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4934C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4934C2)");
    check_base_class_offset(lv, (S4934C3*), 0, "S4934C2");
    test_class_info(&lv, &cd_S4934C2);
    dp->~S4934C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4934C2(Test_S4934C2, "S4934C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4934C2C1Ev();
extern void _ZN7S4934C2D1Ev();
Name_Map name_map_S4934C2[] = {
  NSPAIR(_ZN7S4934C2C1Ev),
  NSPAIR(_ZN7S4934C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4934C3;
extern VTBL_ENTRY _ZTI7S4934C3[];
extern  VTBL_ENTRY _ZTV7S4934C3[];
static Base_Class bases_S4934C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4934C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4934C2[];
extern void _ZN7S4934C2D1Ev();
extern void _ZN7S4934C2D0Ev();
extern void _ZN7S4934C32v3Ev();
extern void _ZN7S4934C32v4Ev();
extern void _ZN7S4934C32v5Ev();
extern void _ZN7S4934C32v6Ev();
extern void _ZN7S4934C32v7Ev();
extern void _ZN7S4934C32v8Ev();
extern void _ZN7S4934C32v9Ev();
extern void _ZN7S4934C23v10Ev();
extern void _ZN7S4934C23v11Ev();
extern void _ZN7S4934C23v12Ev();
extern void _ZN7S4934C23v13Ev();
extern void _ZN7S4934C23v14Ev();
extern void _ZN7S4934C23v15Ev();
extern void _ZN7S4934C23v16Ev();
static  VTBL_ENTRY vtc_S4934C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4934C2[0]),
  (VTBL_ENTRY)&_ZN7S4934C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4934C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S4934C2[];
extern  VTBL_ENTRY _ZTV7S4934C2[];
Class_Descriptor cd_S4934C2 = {  "S4934C2", // class name
  bases_S4934C2, 1,
  &(vtc_S4934C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4934C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4934C2),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4934C8  {
  ::S7368C9_nt s4934c8f0;
  int s4934c8f1;
  char s4934c8f2;
};
//SIG(-1 S4934C8) C1{ FC2{ m Fp Fi FC3{ m}} Fi Fc}



static void Test_S4934C8()
{
  {
    init_simple_test("S4934C8");
    S4934C8 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S4934C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4934C8)");
    check_field_offset(lv, s4934c8f0, 0, "S4934C8.s4934c8f0");
    check_field_offset(lv, s4934c8f1, ABISELECT(16,12), "S4934C8.s4934c8f1");
    check_field_offset(lv, s4934c8f2, ABISELECT(20,16), "S4934C8.s4934c8f2");
  }
}
static Arrange_To_Call_Me vS4934C8(Test_S4934C8, "S4934C8", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4934C1  : S4934C2 {
  ::S4934C8 s4934c1f0;
  virtual  ~S4934C1(); // _ZN7S4934C1D1Ev
  virtual void  v1(); // _ZN7S4934C12v1Ev
  virtual void  v2(); // _ZN7S4934C12v2Ev
  S4934C1(); // tgen
};
//SIG(1 S4934C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 Fp[3] FC4{ FC5{ m Fp Fi FC6{ m}} Fp FC5} Fp FC7{ m FC5 Fi}} vd v10 v11 v12 v13 v14 v15 v16} vd v1 v2 FC8{ FC5 Fi Fc}}


 S4934C1 ::~S4934C1(){ note_dtor("S4934C1", this);}
void  S4934C1 ::v1(){vfunc_called(this, "_ZN7S4934C12v1Ev");}
void  S4934C1 ::v2(){vfunc_called(this, "_ZN7S4934C12v2Ev");}
S4934C1 ::S4934C1(){ note_ctor("S4934C1", this);} // tgen

static void Test_S4934C1()
{
  extern Class_Descriptor cd_S4934C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S4934C1, buf);
    S4934C1 *dp, &lv = *(dp=new (buf) S4934C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S4934C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4934C1)");
    check_base_class_offset(lv, (S4934C3*)(S4934C2*), 0, "S4934C1");
    check_base_class_offset(lv, (S4934C2*), 0, "S4934C1");
    check_field_offset(lv, s4934c1f0, ABISELECT(104,64), "S4934C1.s4934c1f0");
    test_class_info(&lv, &cd_S4934C1);
    dp->~S4934C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4934C1(Test_S4934C1, "S4934C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S4934C1C1Ev();
extern void _ZN7S4934C1D1Ev();
Name_Map name_map_S4934C1[] = {
  NSPAIR(_ZN7S4934C1C1Ev),
  NSPAIR(_ZN7S4934C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4934C3;
extern VTBL_ENTRY _ZTI7S4934C3[];
extern  VTBL_ENTRY _ZTV7S4934C3[];
extern Class_Descriptor cd_S4934C2;
extern VTBL_ENTRY _ZTI7S4934C2[];
extern  VTBL_ENTRY _ZTV7S4934C2[];
static Base_Class bases_S4934C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4934C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4934C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4934C1[];
extern void _ZN7S4934C1D1Ev();
extern void _ZN7S4934C1D0Ev();
extern void _ZN7S4934C32v3Ev();
extern void _ZN7S4934C32v4Ev();
extern void _ZN7S4934C32v5Ev();
extern void _ZN7S4934C32v6Ev();
extern void _ZN7S4934C32v7Ev();
extern void _ZN7S4934C32v8Ev();
extern void _ZN7S4934C32v9Ev();
extern void _ZN7S4934C23v10Ev();
extern void _ZN7S4934C23v11Ev();
extern void _ZN7S4934C23v12Ev();
extern void _ZN7S4934C23v13Ev();
extern void _ZN7S4934C23v14Ev();
extern void _ZN7S4934C23v15Ev();
extern void _ZN7S4934C23v16Ev();
extern void _ZN7S4934C12v1Ev();
extern void _ZN7S4934C12v2Ev();
static  VTBL_ENTRY vtc_S4934C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4934C1[0]),
  (VTBL_ENTRY)&_ZN7S4934C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4934C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4934C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4934C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4934C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4934C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4934C1[];
extern  VTBL_ENTRY _ZTV7S4934C1[];
Class_Descriptor cd_S4934C1 = {  "S4934C1", // class name
  bases_S4934C1, 2,
  &(vtc_S4934C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S4934C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4934C1),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  S4931C3  {
  void *s4931c3f0[3];
  ::S4933C4 s4931c3f1;
  void *s4931c3f2;
  ::S487C6_nt s4931c3f3;
  virtual  ~S4931C3(); // _ZN7S4931C3D1Ev
  virtual void  v3(); // _ZN7S4931C32v3Ev
  virtual void  v4(); // _ZN7S4931C32v4Ev
  virtual void  v5(); // _ZN7S4931C32v5Ev
  virtual void  v6(); // _ZN7S4931C32v6Ev
  virtual void  v7(); // _ZN7S4931C32v7Ev
  virtual void  v8(); // _ZN7S4931C32v8Ev
  virtual void  v9(); // _ZN7S4931C32v9Ev
  S4931C3(); // tgen
};
//SIG(-1 S4931C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[3] FC2{ FC3{ m Fp Fi FC4{ m}} Fp FC3} Fp FC5{ m FC3 Fi}}


 S4931C3 ::~S4931C3(){ note_dtor("S4931C3", this);}
void  S4931C3 ::v3(){vfunc_called(this, "_ZN7S4931C32v3Ev");}
void  S4931C3 ::v4(){vfunc_called(this, "_ZN7S4931C32v4Ev");}
void  S4931C3 ::v5(){vfunc_called(this, "_ZN7S4931C32v5Ev");}
void  S4931C3 ::v6(){vfunc_called(this, "_ZN7S4931C32v6Ev");}
void  S4931C3 ::v7(){vfunc_called(this, "_ZN7S4931C32v7Ev");}
void  S4931C3 ::v8(){vfunc_called(this, "_ZN7S4931C32v8Ev");}
void  S4931C3 ::v9(){vfunc_called(this, "_ZN7S4931C32v9Ev");}
S4931C3 ::S4931C3(){ note_ctor("S4931C3", this);} // tgen

static void Test_S4931C3()
{
  extern Class_Descriptor cd_S4931C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4931C3, buf);
    S4931C3 *dp, &lv = *(dp=new (buf) S4931C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4931C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4931C3)");
    check_field_offset(lv, s4931c3f0, ABISELECT(8,4), "S4931C3.s4931c3f0");
    check_field_offset(lv, s4931c3f1, ABISELECT(32,16), "S4931C3.s4931c3f1");
    check_field_offset(lv, s4931c3f2, ABISELECT(72,44), "S4931C3.s4931c3f2");
    check_field_offset(lv, s4931c3f3, ABISELECT(80,48), "S4931C3.s4931c3f3");
    test_class_info(&lv, &cd_S4931C3);
    dp->~S4931C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4931C3(Test_S4931C3, "S4931C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4931C3C1Ev();
extern void _ZN7S4931C3D1Ev();
Name_Map name_map_S4931C3[] = {
  NSPAIR(_ZN7S4931C3C1Ev),
  NSPAIR(_ZN7S4931C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4931C3[];
extern void _ZN7S4931C3D1Ev();
extern void _ZN7S4931C3D0Ev();
extern void _ZN7S4931C32v3Ev();
extern void _ZN7S4931C32v4Ev();
extern void _ZN7S4931C32v5Ev();
extern void _ZN7S4931C32v6Ev();
extern void _ZN7S4931C32v7Ev();
extern void _ZN7S4931C32v8Ev();
extern void _ZN7S4931C32v9Ev();
static  VTBL_ENTRY vtc_S4931C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4931C3[0]),
  (VTBL_ENTRY)&_ZN7S4931C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4931C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S4931C3[];
extern  VTBL_ENTRY _ZTV7S4931C3[];
Class_Descriptor cd_S4931C3 = {  "S4931C3", // class name
  0,0,//no base classes
  &(vtc_S4931C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4931C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4931C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4931C2  : S4931C3 {
  virtual  ~S4931C2(); // _ZN7S4931C2D1Ev
  virtual void  v10(); // _ZN7S4931C23v10Ev
  virtual void  v11(); // _ZN7S4931C23v11Ev
  virtual void  v12(); // _ZN7S4931C23v12Ev
  virtual void  v13(); // _ZN7S4931C23v13Ev
  virtual void  v14(); // _ZN7S4931C23v14Ev
  virtual void  v15(); // _ZN7S4931C23v15Ev
  virtual void  v16(); // _ZN7S4931C23v16Ev
  S4931C2(); // tgen
};
//SIG(-1 S4931C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fp[3] FC3{ FC4{ m Fp Fi FC5{ m}} Fp FC4} Fp FC6{ m FC4 Fi}} vd v1 v2 v3 v4 v5 v6 v7}


 S4931C2 ::~S4931C2(){ note_dtor("S4931C2", this);}
void  S4931C2 ::v10(){vfunc_called(this, "_ZN7S4931C23v10Ev");}
void  S4931C2 ::v11(){vfunc_called(this, "_ZN7S4931C23v11Ev");}
void  S4931C2 ::v12(){vfunc_called(this, "_ZN7S4931C23v12Ev");}
void  S4931C2 ::v13(){vfunc_called(this, "_ZN7S4931C23v13Ev");}
void  S4931C2 ::v14(){vfunc_called(this, "_ZN7S4931C23v14Ev");}
void  S4931C2 ::v15(){vfunc_called(this, "_ZN7S4931C23v15Ev");}
void  S4931C2 ::v16(){vfunc_called(this, "_ZN7S4931C23v16Ev");}
S4931C2 ::S4931C2(){ note_ctor("S4931C2", this);} // tgen

static void Test_S4931C2()
{
  extern Class_Descriptor cd_S4931C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4931C2, buf);
    S4931C2 *dp, &lv = *(dp=new (buf) S4931C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4931C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4931C2)");
    check_base_class_offset(lv, (S4931C3*), 0, "S4931C2");
    test_class_info(&lv, &cd_S4931C2);
    dp->~S4931C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4931C2(Test_S4931C2, "S4931C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4931C2C1Ev();
extern void _ZN7S4931C2D1Ev();
Name_Map name_map_S4931C2[] = {
  NSPAIR(_ZN7S4931C2C1Ev),
  NSPAIR(_ZN7S4931C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4931C3;
extern VTBL_ENTRY _ZTI7S4931C3[];
extern  VTBL_ENTRY _ZTV7S4931C3[];
static Base_Class bases_S4931C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4931C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4931C2[];
extern void _ZN7S4931C2D1Ev();
extern void _ZN7S4931C2D0Ev();
extern void _ZN7S4931C32v3Ev();
extern void _ZN7S4931C32v4Ev();
extern void _ZN7S4931C32v5Ev();
extern void _ZN7S4931C32v6Ev();
extern void _ZN7S4931C32v7Ev();
extern void _ZN7S4931C32v8Ev();
extern void _ZN7S4931C32v9Ev();
extern void _ZN7S4931C23v10Ev();
extern void _ZN7S4931C23v11Ev();
extern void _ZN7S4931C23v12Ev();
extern void _ZN7S4931C23v13Ev();
extern void _ZN7S4931C23v14Ev();
extern void _ZN7S4931C23v15Ev();
extern void _ZN7S4931C23v16Ev();
static  VTBL_ENTRY vtc_S4931C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4931C2[0]),
  (VTBL_ENTRY)&_ZN7S4931C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4931C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S4931C2[];
extern  VTBL_ENTRY _ZTV7S4931C2[];
Class_Descriptor cd_S4931C2 = {  "S4931C2", // class name
  bases_S4931C2, 1,
  &(vtc_S4931C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4931C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4931C2),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4931C8  {
  ::S7368C9_nt s4931c8f0;
  char s4931c8f1[2];
};
//SIG(-1 S4931C8) C1{ FC2{ m Fp Fi FC3{ m}} Fc[2]}



static void Test_S4931C8()
{
  {
    init_simple_test("S4931C8");
    S4931C8 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4931C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4931C8)");
    check_field_offset(lv, s4931c8f0, 0, "S4931C8.s4931c8f0");
    check_field_offset(lv, s4931c8f1, ABISELECT(16,12), "S4931C8.s4931c8f1");
  }
}
static Arrange_To_Call_Me vS4931C8(Test_S4931C8, "S4931C8", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4931C1  : S4931C2 {
  ::S4931C8 s4931c1f0;
  virtual  ~S4931C1(); // _ZN7S4931C1D1Ev
  virtual void  v1(); // _ZN7S4931C12v1Ev
  virtual void  v2(); // _ZN7S4931C12v2Ev
  S4931C1(); // tgen
};
//SIG(1 S4931C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 Fp[3] FC4{ FC5{ m Fp Fi FC6{ m}} Fp FC5} Fp FC7{ m FC5 Fi}} vd v10 v11 v12 v13 v14 v15 v16} vd v1 v2 FC8{ FC5 Fc[2]}}


 S4931C1 ::~S4931C1(){ note_dtor("S4931C1", this);}
void  S4931C1 ::v1(){vfunc_called(this, "_ZN7S4931C12v1Ev");}
void  S4931C1 ::v2(){vfunc_called(this, "_ZN7S4931C12v2Ev");}
S4931C1 ::S4931C1(){ note_ctor("S4931C1", this);} // tgen

static void Test_S4931C1()
{
  extern Class_Descriptor cd_S4931C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S4931C1, buf);
    S4931C1 *dp, &lv = *(dp=new (buf) S4931C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S4931C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4931C1)");
    check_base_class_offset(lv, (S4931C3*)(S4931C2*), 0, "S4931C1");
    check_base_class_offset(lv, (S4931C2*), 0, "S4931C1");
    check_field_offset(lv, s4931c1f0, ABISELECT(104,64), "S4931C1.s4931c1f0");
    test_class_info(&lv, &cd_S4931C1);
    dp->~S4931C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4931C1(Test_S4931C1, "S4931C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S4931C1C1Ev();
extern void _ZN7S4931C1D1Ev();
Name_Map name_map_S4931C1[] = {
  NSPAIR(_ZN7S4931C1C1Ev),
  NSPAIR(_ZN7S4931C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4931C3;
extern VTBL_ENTRY _ZTI7S4931C3[];
extern  VTBL_ENTRY _ZTV7S4931C3[];
extern Class_Descriptor cd_S4931C2;
extern VTBL_ENTRY _ZTI7S4931C2[];
extern  VTBL_ENTRY _ZTV7S4931C2[];
static Base_Class bases_S4931C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4931C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4931C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4931C1[];
extern void _ZN7S4931C1D1Ev();
extern void _ZN7S4931C1D0Ev();
extern void _ZN7S4931C32v3Ev();
extern void _ZN7S4931C32v4Ev();
extern void _ZN7S4931C32v5Ev();
extern void _ZN7S4931C32v6Ev();
extern void _ZN7S4931C32v7Ev();
extern void _ZN7S4931C32v8Ev();
extern void _ZN7S4931C32v9Ev();
extern void _ZN7S4931C23v10Ev();
extern void _ZN7S4931C23v11Ev();
extern void _ZN7S4931C23v12Ev();
extern void _ZN7S4931C23v13Ev();
extern void _ZN7S4931C23v14Ev();
extern void _ZN7S4931C23v15Ev();
extern void _ZN7S4931C23v16Ev();
extern void _ZN7S4931C12v1Ev();
extern void _ZN7S4931C12v2Ev();
static  VTBL_ENTRY vtc_S4931C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4931C1[0]),
  (VTBL_ENTRY)&_ZN7S4931C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4931C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4931C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4931C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4931C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4931C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4931C1[];
extern  VTBL_ENTRY _ZTV7S4931C1[];
Class_Descriptor cd_S4931C1 = {  "S4931C1", // class name
  bases_S4931C1, 2,
  &(vtc_S4931C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S4931C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4931C1),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  S3654C2  : S7368C49 {
  void *s3654c2f0;
  ::S487C6_nt s3654c2f1;
  void *s3654c2f2;
  char s3654c2f3;
  virtual  ~S3654C2(); // _ZN7S3654C2D1Ev
  virtual void  v4(); // _ZN7S3654C22v4Ev
  virtual void  v5(); // _ZN7S3654C22v5Ev
  virtual void  v6(); // _ZN7S3654C22v6Ev
  virtual void  v7(); // _ZN7S3654C22v7Ev
  virtual void  v8(); // _ZN7S3654C22v8Ev
  S3654C2(); // tgen
};
//SIG(-1 S3654C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp Fc}


 S3654C2 ::~S3654C2(){ note_dtor("S3654C2", this);}
void  S3654C2 ::v4(){vfunc_called(this, "_ZN7S3654C22v4Ev");}
void  S3654C2 ::v5(){vfunc_called(this, "_ZN7S3654C22v5Ev");}
void  S3654C2 ::v6(){vfunc_called(this, "_ZN7S3654C22v6Ev");}
void  S3654C2 ::v7(){vfunc_called(this, "_ZN7S3654C22v7Ev");}
void  S3654C2 ::v8(){vfunc_called(this, "_ZN7S3654C22v8Ev");}
S3654C2 ::S3654C2(){ note_ctor("S3654C2", this);} // tgen

static void Test_S3654C2()
{
  extern Class_Descriptor cd_S3654C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3654C2, buf);
    S3654C2 *dp, &lv = *(dp=new (buf) S3654C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3654C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3654C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3654C2");
    check_field_offset(lv, s3654c2f0, ABISELECT(32,20), "S3654C2.s3654c2f0");
    check_field_offset(lv, s3654c2f1, ABISELECT(40,24), "S3654C2.s3654c2f1");
    check_field_offset(lv, s3654c2f2, ABISELECT(64,40), "S3654C2.s3654c2f2");
    check_field_offset(lv, s3654c2f3, ABISELECT(72,44), "S3654C2.s3654c2f3");
    test_class_info(&lv, &cd_S3654C2);
    dp->~S3654C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3654C2(Test_S3654C2, "S3654C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3654C2C1Ev();
extern void _ZN7S3654C2D1Ev();
Name_Map name_map_S3654C2[] = {
  NSPAIR(_ZN7S3654C2C1Ev),
  NSPAIR(_ZN7S3654C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3654C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3654C2[];
extern void _ZN7S3654C2D1Ev();
extern void _ZN7S3654C2D0Ev();
extern void _ZN7S3654C22v4Ev();
extern void _ZN7S3654C22v5Ev();
extern void _ZN7S3654C22v6Ev();
extern void _ZN7S3654C22v7Ev();
extern void _ZN7S3654C22v8Ev();
static  VTBL_ENTRY vtc_S3654C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3654C2[0]),
  (VTBL_ENTRY)&_ZN7S3654C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3654C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S3654C2[];
extern  VTBL_ENTRY _ZTV7S3654C2[];
Class_Descriptor cd_S3654C2 = {  "S3654C2", // class name
  bases_S3654C2, 1,
  &(vtc_S3654C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3654C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3654C2),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  S3654C9  {
  virtual  ~S3654C9(); // _ZN7S3654C9D1Ev
  virtual void  v9(); // _ZN7S3654C92v9Ev
  S3654C9(); // tgen
};
//SIG(-1 S3654C9) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S3654C9C1Ev();
extern void _ZN7S3654C9D1Ev();
Name_Map name_map_S3654C9[] = {
  NSPAIR(_ZN7S3654C9C1Ev),
  NSPAIR(_ZN7S3654C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3654C9[];
extern void _ZN7S3654C9D1Ev();
extern void _ZN7S3654C9D0Ev();
extern void _ZN7S3654C92v9Ev();
static  VTBL_ENTRY vtc_S3654C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3654C9[0]),
  (VTBL_ENTRY)&_ZN7S3654C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3654C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3654C92v9Ev,
};
extern VTBL_ENTRY _ZTI7S3654C9[];
extern  VTBL_ENTRY _ZTV7S3654C9[];
Class_Descriptor cd_S3654C9 = {  "S3654C9", // class name
  0,0,//no base classes
  &(vtc_S3654C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3654C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3654C9),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  S3654C1  : S3654C2 , S3654C9 {
  ::S8541C9 s3654c1f0;
  void *s3654c1f1;
  virtual  ~S3654C1(); // _ZN7S3654C1D1Ev
  virtual void  v1(); // _ZN7S3654C12v1Ev
  virtual void  v2(); // _ZN7S3654C12v2Ev
  virtual void  v3(); // _ZN7S3654C12v3Ev
  S3654C1(); // tgen
};
//SIG(1 S3654C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v4 v5 v6 v7 v8 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp Fc} BC9{ vd v9} vd v1 v2 v3 FC10{ BC11{ vd m Fp} vd Fp} Fp}


 S3654C1 ::~S3654C1(){ note_dtor("S3654C1", this);}
void  S3654C1 ::v1(){vfunc_called(this, "_ZN7S3654C12v1Ev");}
void  S3654C1 ::v2(){vfunc_called(this, "_ZN7S3654C12v2Ev");}
void  S3654C1 ::v3(){vfunc_called(this, "_ZN7S3654C12v3Ev");}
S3654C1 ::S3654C1(){ note_ctor("S3654C1", this);} // tgen

static void Test_S3654C1()
{
  extern Class_Descriptor cd_S3654C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S3654C1, buf);
    S3654C1 *dp, &lv = *(dp=new (buf) S3654C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S3654C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3654C1)");
    check_base_class_offset(lv, (S7368C49*)(S3654C2*), 0, "S3654C1");
    check_base_class_offset(lv, (S3654C2*), 0, "S3654C1");
    check_base_class_offset(lv, (S3654C9*), ABISELECT(80,48), "S3654C1");
    check_field_offset(lv, s3654c1f0, ABISELECT(88,52), "S3654C1.s3654c1f0");
    check_field_offset(lv, s3654c1f1, ABISELECT(112,64), "S3654C1.s3654c1f1");
    test_class_info(&lv, &cd_S3654C1);
    dp->~S3654C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3654C1(Test_S3654C1, "S3654C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN7S3654C1C1Ev();
extern void _ZN7S3654C1D1Ev();
Name_Map name_map_S3654C1[] = {
  NSPAIR(_ZN7S3654C1C1Ev),
  NSPAIR(_ZN7S3654C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3654C2;
extern VTBL_ENTRY _ZTI7S3654C2[];
extern  VTBL_ENTRY _ZTV7S3654C2[];
extern Class_Descriptor cd_S3654C9;
extern VTBL_ENTRY _ZTI7S3654C9[];
extern  VTBL_ENTRY _ZTV7S3654C9[];
static Base_Class bases_S3654C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3654C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3654C9,    ABISELECT(80,48), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3654C1[];
extern void _ZN7S3654C1D1Ev();
extern void _ZN7S3654C1D0Ev();
extern void _ZN7S3654C22v4Ev();
extern void _ZN7S3654C22v5Ev();
extern void _ZN7S3654C22v6Ev();
extern void _ZN7S3654C22v7Ev();
extern void _ZN7S3654C22v8Ev();
extern void _ZN7S3654C12v1Ev();
extern void _ZN7S3654C12v2Ev();
extern void _ZN7S3654C12v3Ev();
extern void ABISELECT(_ZThn80_N7S3654C1D1Ev,_ZThn48_N7S3654C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S3654C1D0Ev,_ZThn48_N7S3654C1D0Ev)();
extern void _ZN7S3654C92v9Ev();
static  VTBL_ENTRY vtc_S3654C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3654C1[0]),
  (VTBL_ENTRY)&_ZN7S3654C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3654C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3654C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3654C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3654C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3654C12v3Ev,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S3654C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S3654C1D1Ev,_ZThn48_N7S3654C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S3654C1D0Ev,_ZThn48_N7S3654C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3654C92v9Ev,
};
extern VTBL_ENTRY _ZTI7S3654C1[];
extern  VTBL_ENTRY _ZTV7S3654C1[];
Class_Descriptor cd_S3654C1 = {  "S3654C1", // class name
  bases_S3654C1, 3,
  &(vtc_S3654C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI7S3654C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3654C1),17, //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  S12345C1  {
  int s12345c1f0;
  ::S7368C7 s12345c1f1;
};
//SIG(1 S12345C1) C1{ Fi FC2{ BC3{ vd m Fc} vd Fi FC4{ m Fp Fi FC5{ m}} FC6{ BC3 vd FL[2]} FC4 FC7{ BC3 vd FC4 FC4 FC4 FC8{ m Fp Fi[2] FC9{ m}} FC10{ m Fp Fi[2] FC5}}}}



static void Test_S12345C1()
{
  {
    init_simple_test("S12345C1");
    S12345C1 lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S12345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12345C1)");
    check_field_offset(lv, s12345c1f0, 0, "S12345C1.s12345c1f0");
    check_field_offset(lv, s12345c1f1, ABISELECT(8,4), "S12345C1.s12345c1f1");
  }
}
static Arrange_To_Call_Me vS12345C1(Test_S12345C1, "S12345C1", ABISELECT(200,140));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4935C3  {
  void *s4935c3f0[3];
  ::S4933C4 s4935c3f1;
  void *s4935c3f2;
  ::S487C6_nt s4935c3f3;
  virtual  ~S4935C3(); // _ZN7S4935C3D1Ev
  virtual void  v3(); // _ZN7S4935C32v3Ev
  virtual void  v4(); // _ZN7S4935C32v4Ev
  virtual void  v5(); // _ZN7S4935C32v5Ev
  virtual void  v6(); // _ZN7S4935C32v6Ev
  virtual void  v7(); // _ZN7S4935C32v7Ev
  virtual void  v8(); // _ZN7S4935C32v8Ev
  virtual void  v9(); // _ZN7S4935C32v9Ev
  S4935C3(); // tgen
};
//SIG(-1 S4935C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[3] FC2{ FC3{ m Fp Fi FC4{ m}} Fp FC3} Fp FC5{ m FC3 Fi}}


 S4935C3 ::~S4935C3(){ note_dtor("S4935C3", this);}
void  S4935C3 ::v3(){vfunc_called(this, "_ZN7S4935C32v3Ev");}
void  S4935C3 ::v4(){vfunc_called(this, "_ZN7S4935C32v4Ev");}
void  S4935C3 ::v5(){vfunc_called(this, "_ZN7S4935C32v5Ev");}
void  S4935C3 ::v6(){vfunc_called(this, "_ZN7S4935C32v6Ev");}
void  S4935C3 ::v7(){vfunc_called(this, "_ZN7S4935C32v7Ev");}
void  S4935C3 ::v8(){vfunc_called(this, "_ZN7S4935C32v8Ev");}
void  S4935C3 ::v9(){vfunc_called(this, "_ZN7S4935C32v9Ev");}
S4935C3 ::S4935C3(){ note_ctor("S4935C3", this);} // tgen

static void Test_S4935C3()
{
  extern Class_Descriptor cd_S4935C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4935C3, buf);
    S4935C3 *dp, &lv = *(dp=new (buf) S4935C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4935C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4935C3)");
    check_field_offset(lv, s4935c3f0, ABISELECT(8,4), "S4935C3.s4935c3f0");
    check_field_offset(lv, s4935c3f1, ABISELECT(32,16), "S4935C3.s4935c3f1");
    check_field_offset(lv, s4935c3f2, ABISELECT(72,44), "S4935C3.s4935c3f2");
    check_field_offset(lv, s4935c3f3, ABISELECT(80,48), "S4935C3.s4935c3f3");
    test_class_info(&lv, &cd_S4935C3);
    dp->~S4935C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4935C3(Test_S4935C3, "S4935C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4935C3C1Ev();
extern void _ZN7S4935C3D1Ev();
Name_Map name_map_S4935C3[] = {
  NSPAIR(_ZN7S4935C3C1Ev),
  NSPAIR(_ZN7S4935C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4935C3[];
extern void _ZN7S4935C3D1Ev();
extern void _ZN7S4935C3D0Ev();
extern void _ZN7S4935C32v3Ev();
extern void _ZN7S4935C32v4Ev();
extern void _ZN7S4935C32v5Ev();
extern void _ZN7S4935C32v6Ev();
extern void _ZN7S4935C32v7Ev();
extern void _ZN7S4935C32v8Ev();
extern void _ZN7S4935C32v9Ev();
static  VTBL_ENTRY vtc_S4935C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4935C3[0]),
  (VTBL_ENTRY)&_ZN7S4935C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4935C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S4935C3[];
extern  VTBL_ENTRY _ZTV7S4935C3[];
Class_Descriptor cd_S4935C3 = {  "S4935C3", // class name
  0,0,//no base classes
  &(vtc_S4935C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4935C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4935C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4935C2  : S4935C3 {
  virtual  ~S4935C2(); // _ZN7S4935C2D1Ev
  virtual void  v10(); // _ZN7S4935C23v10Ev
  virtual void  v11(); // _ZN7S4935C23v11Ev
  virtual void  v12(); // _ZN7S4935C23v12Ev
  virtual void  v13(); // _ZN7S4935C23v13Ev
  virtual void  v14(); // _ZN7S4935C23v14Ev
  virtual void  v15(); // _ZN7S4935C23v15Ev
  virtual void  v16(); // _ZN7S4935C23v16Ev
  S4935C2(); // tgen
};
//SIG(-1 S4935C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fp[3] FC3{ FC4{ m Fp Fi FC5{ m}} Fp FC4} Fp FC6{ m FC4 Fi}} vd v1 v2 v3 v4 v5 v6 v7}


 S4935C2 ::~S4935C2(){ note_dtor("S4935C2", this);}
void  S4935C2 ::v10(){vfunc_called(this, "_ZN7S4935C23v10Ev");}
void  S4935C2 ::v11(){vfunc_called(this, "_ZN7S4935C23v11Ev");}
void  S4935C2 ::v12(){vfunc_called(this, "_ZN7S4935C23v12Ev");}
void  S4935C2 ::v13(){vfunc_called(this, "_ZN7S4935C23v13Ev");}
void  S4935C2 ::v14(){vfunc_called(this, "_ZN7S4935C23v14Ev");}
void  S4935C2 ::v15(){vfunc_called(this, "_ZN7S4935C23v15Ev");}
void  S4935C2 ::v16(){vfunc_called(this, "_ZN7S4935C23v16Ev");}
S4935C2 ::S4935C2(){ note_ctor("S4935C2", this);} // tgen

static void Test_S4935C2()
{
  extern Class_Descriptor cd_S4935C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4935C2, buf);
    S4935C2 *dp, &lv = *(dp=new (buf) S4935C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4935C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4935C2)");
    check_base_class_offset(lv, (S4935C3*), 0, "S4935C2");
    test_class_info(&lv, &cd_S4935C2);
    dp->~S4935C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4935C2(Test_S4935C2, "S4935C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4935C2C1Ev();
extern void _ZN7S4935C2D1Ev();
Name_Map name_map_S4935C2[] = {
  NSPAIR(_ZN7S4935C2C1Ev),
  NSPAIR(_ZN7S4935C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4935C3;
extern VTBL_ENTRY _ZTI7S4935C3[];
extern  VTBL_ENTRY _ZTV7S4935C3[];
static Base_Class bases_S4935C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4935C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4935C2[];
extern void _ZN7S4935C2D1Ev();
extern void _ZN7S4935C2D0Ev();
extern void _ZN7S4935C32v3Ev();
extern void _ZN7S4935C32v4Ev();
extern void _ZN7S4935C32v5Ev();
extern void _ZN7S4935C32v6Ev();
extern void _ZN7S4935C32v7Ev();
extern void _ZN7S4935C32v8Ev();
extern void _ZN7S4935C32v9Ev();
extern void _ZN7S4935C23v10Ev();
extern void _ZN7S4935C23v11Ev();
extern void _ZN7S4935C23v12Ev();
extern void _ZN7S4935C23v13Ev();
extern void _ZN7S4935C23v14Ev();
extern void _ZN7S4935C23v15Ev();
extern void _ZN7S4935C23v16Ev();
static  VTBL_ENTRY vtc_S4935C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4935C2[0]),
  (VTBL_ENTRY)&_ZN7S4935C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4935C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S4935C2[];
extern  VTBL_ENTRY _ZTV7S4935C2[];
Class_Descriptor cd_S4935C2 = {  "S4935C2", // class name
  bases_S4935C2, 1,
  &(vtc_S4935C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4935C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4935C2),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4935C8_nt  {
  ::S7368C9_nt s4935c8f0;
  int s4935c8f1;
};
//SIG(-1 S4935C8_nt) C1{ FC2{ m Fp Fi FC3{ m}} Fi}



//skip512 S4935C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4935C1  : S4935C2 {
  ::S4935C8_nt s4935c1f0;
  virtual  ~S4935C1(); // _ZN7S4935C1D1Ev
  virtual void  v1(); // _ZN7S4935C12v1Ev
  virtual void  v2(); // _ZN7S4935C12v2Ev
  S4935C1(); // tgen
};
//SIG(1 S4935C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 Fp[3] FC4{ FC5{ m Fp Fi FC6{ m}} Fp FC5} Fp FC7{ m FC5 Fi}} vd v10 v11 v12 v13 v14 v15 v16} vd v1 v2 FC8{ FC5 Fi}}


 S4935C1 ::~S4935C1(){ note_dtor("S4935C1", this);}
void  S4935C1 ::v1(){vfunc_called(this, "_ZN7S4935C12v1Ev");}
void  S4935C1 ::v2(){vfunc_called(this, "_ZN7S4935C12v2Ev");}
S4935C1 ::S4935C1(){ note_ctor("S4935C1", this);} // tgen

static void Test_S4935C1()
{
  extern Class_Descriptor cd_S4935C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S4935C1, buf);
    S4935C1 *dp, &lv = *(dp=new (buf) S4935C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S4935C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4935C1)");
    check_base_class_offset(lv, (S4935C3*)(S4935C2*), 0, "S4935C1");
    check_base_class_offset(lv, (S4935C2*), 0, "S4935C1");
    check_field_offset(lv, s4935c1f0, ABISELECT(104,64), "S4935C1.s4935c1f0");
    test_class_info(&lv, &cd_S4935C1);
    dp->~S4935C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4935C1(Test_S4935C1, "S4935C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S4935C1C1Ev();
extern void _ZN7S4935C1D1Ev();
Name_Map name_map_S4935C1[] = {
  NSPAIR(_ZN7S4935C1C1Ev),
  NSPAIR(_ZN7S4935C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4935C3;
extern VTBL_ENTRY _ZTI7S4935C3[];
extern  VTBL_ENTRY _ZTV7S4935C3[];
extern Class_Descriptor cd_S4935C2;
extern VTBL_ENTRY _ZTI7S4935C2[];
extern  VTBL_ENTRY _ZTV7S4935C2[];
static Base_Class bases_S4935C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4935C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4935C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4935C1[];
extern void _ZN7S4935C1D1Ev();
extern void _ZN7S4935C1D0Ev();
extern void _ZN7S4935C32v3Ev();
extern void _ZN7S4935C32v4Ev();
extern void _ZN7S4935C32v5Ev();
extern void _ZN7S4935C32v6Ev();
extern void _ZN7S4935C32v7Ev();
extern void _ZN7S4935C32v8Ev();
extern void _ZN7S4935C32v9Ev();
extern void _ZN7S4935C23v10Ev();
extern void _ZN7S4935C23v11Ev();
extern void _ZN7S4935C23v12Ev();
extern void _ZN7S4935C23v13Ev();
extern void _ZN7S4935C23v14Ev();
extern void _ZN7S4935C23v15Ev();
extern void _ZN7S4935C23v16Ev();
extern void _ZN7S4935C12v1Ev();
extern void _ZN7S4935C12v2Ev();
static  VTBL_ENTRY vtc_S4935C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4935C1[0]),
  (VTBL_ENTRY)&_ZN7S4935C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4935C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4935C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4935C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4935C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4935C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4935C1[];
extern  VTBL_ENTRY _ZTV7S4935C1[];
Class_Descriptor cd_S4935C1 = {  "S4935C1", // class name
  bases_S4935C1, 2,
  &(vtc_S4935C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S4935C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4935C1),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  S4932C3  {
  void *s4932c3f0[3];
  ::S4933C4 s4932c3f1;
  void *s4932c3f2;
  ::S487C6_nt s4932c3f3;
  virtual  ~S4932C3(); // _ZN7S4932C3D1Ev
  virtual void  v3(); // _ZN7S4932C32v3Ev
  virtual void  v4(); // _ZN7S4932C32v4Ev
  virtual void  v5(); // _ZN7S4932C32v5Ev
  virtual void  v6(); // _ZN7S4932C32v6Ev
  virtual void  v7(); // _ZN7S4932C32v7Ev
  virtual void  v8(); // _ZN7S4932C32v8Ev
  virtual void  v9(); // _ZN7S4932C32v9Ev
  S4932C3(); // tgen
};
//SIG(-1 S4932C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[3] FC2{ FC3{ m Fp Fi FC4{ m}} Fp FC3} Fp FC5{ m FC3 Fi}}


 S4932C3 ::~S4932C3(){ note_dtor("S4932C3", this);}
void  S4932C3 ::v3(){vfunc_called(this, "_ZN7S4932C32v3Ev");}
void  S4932C3 ::v4(){vfunc_called(this, "_ZN7S4932C32v4Ev");}
void  S4932C3 ::v5(){vfunc_called(this, "_ZN7S4932C32v5Ev");}
void  S4932C3 ::v6(){vfunc_called(this, "_ZN7S4932C32v6Ev");}
void  S4932C3 ::v7(){vfunc_called(this, "_ZN7S4932C32v7Ev");}
void  S4932C3 ::v8(){vfunc_called(this, "_ZN7S4932C32v8Ev");}
void  S4932C3 ::v9(){vfunc_called(this, "_ZN7S4932C32v9Ev");}
S4932C3 ::S4932C3(){ note_ctor("S4932C3", this);} // tgen

static void Test_S4932C3()
{
  extern Class_Descriptor cd_S4932C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4932C3, buf);
    S4932C3 *dp, &lv = *(dp=new (buf) S4932C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4932C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4932C3)");
    check_field_offset(lv, s4932c3f0, ABISELECT(8,4), "S4932C3.s4932c3f0");
    check_field_offset(lv, s4932c3f1, ABISELECT(32,16), "S4932C3.s4932c3f1");
    check_field_offset(lv, s4932c3f2, ABISELECT(72,44), "S4932C3.s4932c3f2");
    check_field_offset(lv, s4932c3f3, ABISELECT(80,48), "S4932C3.s4932c3f3");
    test_class_info(&lv, &cd_S4932C3);
    dp->~S4932C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4932C3(Test_S4932C3, "S4932C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4932C3C1Ev();
extern void _ZN7S4932C3D1Ev();
Name_Map name_map_S4932C3[] = {
  NSPAIR(_ZN7S4932C3C1Ev),
  NSPAIR(_ZN7S4932C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4932C3[];
extern void _ZN7S4932C3D1Ev();
extern void _ZN7S4932C3D0Ev();
extern void _ZN7S4932C32v3Ev();
extern void _ZN7S4932C32v4Ev();
extern void _ZN7S4932C32v5Ev();
extern void _ZN7S4932C32v6Ev();
extern void _ZN7S4932C32v7Ev();
extern void _ZN7S4932C32v8Ev();
extern void _ZN7S4932C32v9Ev();
static  VTBL_ENTRY vtc_S4932C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4932C3[0]),
  (VTBL_ENTRY)&_ZN7S4932C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4932C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S4932C3[];
extern  VTBL_ENTRY _ZTV7S4932C3[];
Class_Descriptor cd_S4932C3 = {  "S4932C3", // class name
  0,0,//no base classes
  &(vtc_S4932C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4932C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4932C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4932C2  : S4932C3 {
  virtual  ~S4932C2(); // _ZN7S4932C2D1Ev
  virtual void  v10(); // _ZN7S4932C23v10Ev
  virtual void  v11(); // _ZN7S4932C23v11Ev
  virtual void  v12(); // _ZN7S4932C23v12Ev
  virtual void  v13(); // _ZN7S4932C23v13Ev
  virtual void  v14(); // _ZN7S4932C23v14Ev
  virtual void  v15(); // _ZN7S4932C23v15Ev
  virtual void  v16(); // _ZN7S4932C23v16Ev
  S4932C2(); // tgen
};
//SIG(-1 S4932C2) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fp[3] FC3{ FC4{ m Fp Fi FC5{ m}} Fp FC4} Fp FC6{ m FC4 Fi}} vd v1 v2 v3 v4 v5 v6 v7}


 S4932C2 ::~S4932C2(){ note_dtor("S4932C2", this);}
void  S4932C2 ::v10(){vfunc_called(this, "_ZN7S4932C23v10Ev");}
void  S4932C2 ::v11(){vfunc_called(this, "_ZN7S4932C23v11Ev");}
void  S4932C2 ::v12(){vfunc_called(this, "_ZN7S4932C23v12Ev");}
void  S4932C2 ::v13(){vfunc_called(this, "_ZN7S4932C23v13Ev");}
void  S4932C2 ::v14(){vfunc_called(this, "_ZN7S4932C23v14Ev");}
void  S4932C2 ::v15(){vfunc_called(this, "_ZN7S4932C23v15Ev");}
void  S4932C2 ::v16(){vfunc_called(this, "_ZN7S4932C23v16Ev");}
S4932C2 ::S4932C2(){ note_ctor("S4932C2", this);} // tgen

static void Test_S4932C2()
{
  extern Class_Descriptor cd_S4932C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4932C2, buf);
    S4932C2 *dp, &lv = *(dp=new (buf) S4932C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4932C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4932C2)");
    check_base_class_offset(lv, (S4932C3*), 0, "S4932C2");
    test_class_info(&lv, &cd_S4932C2);
    dp->~S4932C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4932C2(Test_S4932C2, "S4932C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4932C2C1Ev();
extern void _ZN7S4932C2D1Ev();
Name_Map name_map_S4932C2[] = {
  NSPAIR(_ZN7S4932C2C1Ev),
  NSPAIR(_ZN7S4932C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4932C3;
extern VTBL_ENTRY _ZTI7S4932C3[];
extern  VTBL_ENTRY _ZTV7S4932C3[];
static Base_Class bases_S4932C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4932C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4932C2[];
extern void _ZN7S4932C2D1Ev();
extern void _ZN7S4932C2D0Ev();
extern void _ZN7S4932C32v3Ev();
extern void _ZN7S4932C32v4Ev();
extern void _ZN7S4932C32v5Ev();
extern void _ZN7S4932C32v6Ev();
extern void _ZN7S4932C32v7Ev();
extern void _ZN7S4932C32v8Ev();
extern void _ZN7S4932C32v9Ev();
extern void _ZN7S4932C23v10Ev();
extern void _ZN7S4932C23v11Ev();
extern void _ZN7S4932C23v12Ev();
extern void _ZN7S4932C23v13Ev();
extern void _ZN7S4932C23v14Ev();
extern void _ZN7S4932C23v15Ev();
extern void _ZN7S4932C23v16Ev();
static  VTBL_ENTRY vtc_S4932C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4932C2[0]),
  (VTBL_ENTRY)&_ZN7S4932C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4932C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v16Ev,
};
extern VTBL_ENTRY _ZTI7S4932C2[];
extern  VTBL_ENTRY _ZTV7S4932C2[];
Class_Descriptor cd_S4932C2 = {  "S4932C2", // class name
  bases_S4932C2, 1,
  &(vtc_S4932C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4932C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4932C2),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4932C8  {
  ::S7368C9_nt s4932c8f0;
  char s4932c8f1;
};
//SIG(-1 S4932C8) C1{ FC2{ m Fp Fi FC3{ m}} Fc}



static void Test_S4932C8()
{
  {
    init_simple_test("S4932C8");
    S4932C8 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4932C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4932C8)");
    check_field_offset(lv, s4932c8f0, 0, "S4932C8.s4932c8f0");
    check_field_offset(lv, s4932c8f1, ABISELECT(16,12), "S4932C8.s4932c8f1");
  }
}
static Arrange_To_Call_Me vS4932C8(Test_S4932C8, "S4932C8", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4932C1  : S4932C2 {
  ::S4932C8 s4932c1f0;
  virtual  ~S4932C1(); // _ZN7S4932C1D1Ev
  virtual void  v1(); // _ZN7S4932C12v1Ev
  virtual void  v2(); // _ZN7S4932C12v2Ev
  S4932C1(); // tgen
};
//SIG(1 S4932C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 Fp[3] FC4{ FC5{ m Fp Fi FC6{ m}} Fp FC5} Fp FC7{ m FC5 Fi}} vd v10 v11 v12 v13 v14 v15 v16} vd v1 v2 FC8{ FC5 Fc}}


 S4932C1 ::~S4932C1(){ note_dtor("S4932C1", this);}
void  S4932C1 ::v1(){vfunc_called(this, "_ZN7S4932C12v1Ev");}
void  S4932C1 ::v2(){vfunc_called(this, "_ZN7S4932C12v2Ev");}
S4932C1 ::S4932C1(){ note_ctor("S4932C1", this);} // tgen

static void Test_S4932C1()
{
  extern Class_Descriptor cd_S4932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S4932C1, buf);
    S4932C1 *dp, &lv = *(dp=new (buf) S4932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S4932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4932C1)");
    check_base_class_offset(lv, (S4932C3*)(S4932C2*), 0, "S4932C1");
    check_base_class_offset(lv, (S4932C2*), 0, "S4932C1");
    check_field_offset(lv, s4932c1f0, ABISELECT(104,64), "S4932C1.s4932c1f0");
    test_class_info(&lv, &cd_S4932C1);
    dp->~S4932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4932C1(Test_S4932C1, "S4932C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S4932C1C1Ev();
extern void _ZN7S4932C1D1Ev();
Name_Map name_map_S4932C1[] = {
  NSPAIR(_ZN7S4932C1C1Ev),
  NSPAIR(_ZN7S4932C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4932C3;
extern VTBL_ENTRY _ZTI7S4932C3[];
extern  VTBL_ENTRY _ZTV7S4932C3[];
extern Class_Descriptor cd_S4932C2;
extern VTBL_ENTRY _ZTI7S4932C2[];
extern  VTBL_ENTRY _ZTV7S4932C2[];
static Base_Class bases_S4932C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4932C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4932C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4932C1[];
extern void _ZN7S4932C1D1Ev();
extern void _ZN7S4932C1D0Ev();
extern void _ZN7S4932C32v3Ev();
extern void _ZN7S4932C32v4Ev();
extern void _ZN7S4932C32v5Ev();
extern void _ZN7S4932C32v6Ev();
extern void _ZN7S4932C32v7Ev();
extern void _ZN7S4932C32v8Ev();
extern void _ZN7S4932C32v9Ev();
extern void _ZN7S4932C23v10Ev();
extern void _ZN7S4932C23v11Ev();
extern void _ZN7S4932C23v12Ev();
extern void _ZN7S4932C23v13Ev();
extern void _ZN7S4932C23v14Ev();
extern void _ZN7S4932C23v15Ev();
extern void _ZN7S4932C23v16Ev();
extern void _ZN7S4932C12v1Ev();
extern void _ZN7S4932C12v2Ev();
static  VTBL_ENTRY vtc_S4932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4932C1[0]),
  (VTBL_ENTRY)&_ZN7S4932C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4932C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v6Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v7Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v8Ev,
  (VTBL_ENTRY)&_ZN7S4932C32v9Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v11Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v14Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v15Ev,
  (VTBL_ENTRY)&_ZN7S4932C23v16Ev,
  (VTBL_ENTRY)&_ZN7S4932C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4932C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4932C1[];
extern  VTBL_ENTRY _ZTV7S4932C1[];
Class_Descriptor cd_S4932C1 = {  "S4932C1", // class name
  bases_S4932C1, 2,
  &(vtc_S4932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S4932C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4932C1),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  S17911C6  {
  int s17911c6f0;
  ::S487C6_nt s17911c6f1;
  ::S10256C11 s17911c6f2;
  void *s17911c6f3[16];
  void  mf17911c6(); // _ZN8S17911C69mf17911c6Ev
};
//SIG(-1 S17911C6) C1{ m Fi FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m FC6{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC7{ Fi} Fi Fc Fi Fc} Fp[16]}


void  S17911C6 ::mf17911c6(){}

static void Test_S17911C6()
{
  {
    init_simple_test("S17911C6");
    S17911C6 lv;
    check2(sizeof(lv), ABISELECT(280,180), "sizeof(S17911C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17911C6)");
    check_field_offset(lv, s17911c6f0, 0, "S17911C6.s17911c6f0");
    check_field_offset(lv, s17911c6f1, ABISELECT(8,4), "S17911C6.s17911c6f1");
    check_field_offset(lv, s17911c6f2, ABISELECT(32,20), "S17911C6.s17911c6f2");
    check_field_offset(lv, s17911c6f3, ABISELECT(152,116), "S17911C6.s17911c6f3");
  }
}
static Arrange_To_Call_Me vS17911C6(Test_S17911C6, "S17911C6", ABISELECT(280,180));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17911C2  {
  int s17911c2f0;
  ::S487C6_nt s17911c2f1;
  ::S17911C6 s17911c2f2;
};
//SIG(-1 S17911C2) C1{ Fi FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC5{ m Fi FC2 FC6{ m FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC8{ Fi} Fi Fc Fi Fc} Fp[16]}}



static void Test_S17911C2()
{
  {
    init_simple_test("S17911C2");
    S17911C2 lv;
    check2(sizeof(lv), ABISELECT(312,200), "sizeof(S17911C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17911C2)");
    check_field_offset(lv, s17911c2f0, 0, "S17911C2.s17911c2f0");
    check_field_offset(lv, s17911c2f1, ABISELECT(8,4), "S17911C2.s17911c2f1");
    check_field_offset(lv, s17911c2f2, ABISELECT(32,20), "S17911C2.s17911c2f2");
  }
}
static Arrange_To_Call_Me vS17911C2(Test_S17911C2, "S17911C2", ABISELECT(312,200));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17911C1  {
  void *s17911c1f0[2];
  ::S17911C2 s17911c1f1;
  void  mf17911c1(); // _ZN8S17911C19mf17911c1Ev
};
//SIG(1 S17911C1) C1{ m Fp[2] FC2{ Fi FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m Fi FC3 FC7{ m FC8{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC9{ Fi} Fi Fc Fi Fc} Fp[16]}}}


void  S17911C1 ::mf17911c1(){}

static void Test_S17911C1()
{
  {
    init_simple_test("S17911C1");
    S17911C1 lv;
    check2(sizeof(lv), ABISELECT(328,208), "sizeof(S17911C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17911C1)");
    check_field_offset(lv, s17911c1f0, 0, "S17911C1.s17911c1f0");
    check_field_offset(lv, s17911c1f1, ABISELECT(16,8), "S17911C1.s17911c1f1");
  }
}
static Arrange_To_Call_Me vS17911C1(Test_S17911C1, "S17911C1", ABISELECT(328,208));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3655C2  : S7368C49 {
  void *s3655c2f0;
  ::S487C6_nt s3655c2f1;
  void *s3655c2f2;
  char s3655c2f3;
  virtual  ~S3655C2(); // _ZN7S3655C2D1Ev
  virtual void  v4(); // _ZN7S3655C22v4Ev
  virtual void  v5(); // _ZN7S3655C22v5Ev
  virtual void  v6(); // _ZN7S3655C22v6Ev
  virtual void  v7(); // _ZN7S3655C22v7Ev
  virtual void  v8(); // _ZN7S3655C22v8Ev
  S3655C2(); // tgen
};
//SIG(-1 S3655C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp Fc}


 S3655C2 ::~S3655C2(){ note_dtor("S3655C2", this);}
void  S3655C2 ::v4(){vfunc_called(this, "_ZN7S3655C22v4Ev");}
void  S3655C2 ::v5(){vfunc_called(this, "_ZN7S3655C22v5Ev");}
void  S3655C2 ::v6(){vfunc_called(this, "_ZN7S3655C22v6Ev");}
void  S3655C2 ::v7(){vfunc_called(this, "_ZN7S3655C22v7Ev");}
void  S3655C2 ::v8(){vfunc_called(this, "_ZN7S3655C22v8Ev");}
S3655C2 ::S3655C2(){ note_ctor("S3655C2", this);} // tgen

static void Test_S3655C2()
{
  extern Class_Descriptor cd_S3655C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3655C2, buf);
    S3655C2 *dp, &lv = *(dp=new (buf) S3655C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3655C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3655C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3655C2");
    check_field_offset(lv, s3655c2f0, ABISELECT(32,20), "S3655C2.s3655c2f0");
    check_field_offset(lv, s3655c2f1, ABISELECT(40,24), "S3655C2.s3655c2f1");
    check_field_offset(lv, s3655c2f2, ABISELECT(64,40), "S3655C2.s3655c2f2");
    check_field_offset(lv, s3655c2f3, ABISELECT(72,44), "S3655C2.s3655c2f3");
    test_class_info(&lv, &cd_S3655C2);
    dp->~S3655C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3655C2(Test_S3655C2, "S3655C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3655C2C1Ev();
extern void _ZN7S3655C2D1Ev();
Name_Map name_map_S3655C2[] = {
  NSPAIR(_ZN7S3655C2C1Ev),
  NSPAIR(_ZN7S3655C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3655C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3655C2[];
extern void _ZN7S3655C2D1Ev();
extern void _ZN7S3655C2D0Ev();
extern void _ZN7S3655C22v4Ev();
extern void _ZN7S3655C22v5Ev();
extern void _ZN7S3655C22v6Ev();
extern void _ZN7S3655C22v7Ev();
extern void _ZN7S3655C22v8Ev();
static  VTBL_ENTRY vtc_S3655C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3655C2[0]),
  (VTBL_ENTRY)&_ZN7S3655C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3655C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S3655C2[];
extern  VTBL_ENTRY _ZTV7S3655C2[];
Class_Descriptor cd_S3655C2 = {  "S3655C2", // class name
  bases_S3655C2, 1,
  &(vtc_S3655C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3655C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3655C2),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  S3655C1  : S3655C2 {
  ::S3653C10 s3655c1f0;
  void *s3655c1f1;
  virtual  ~S3655C1(); // _ZN7S3655C1D1Ev
  virtual void  v1(); // _ZN7S3655C12v1Ev
  virtual void  v2(); // _ZN7S3655C12v2Ev
  virtual void  v3(); // _ZN7S3655C12v3Ev
  S3655C1(); // tgen
};
//SIG(1 S3655C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v4 v5 v6 v7 v8 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp Fc} vd v1 v2 v3 FC9{ BC10{ vd m Fp} vd Fp[2]} Fp}


 S3655C1 ::~S3655C1(){ note_dtor("S3655C1", this);}
void  S3655C1 ::v1(){vfunc_called(this, "_ZN7S3655C12v1Ev");}
void  S3655C1 ::v2(){vfunc_called(this, "_ZN7S3655C12v2Ev");}
void  S3655C1 ::v3(){vfunc_called(this, "_ZN7S3655C12v3Ev");}
S3655C1 ::S3655C1(){ note_ctor("S3655C1", this);} // tgen

static void Test_S3655C1()
{
  extern Class_Descriptor cd_S3655C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S3655C1, buf);
    S3655C1 *dp, &lv = *(dp=new (buf) S3655C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S3655C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3655C1)");
    check_base_class_offset(lv, (S7368C49*)(S3655C2*), 0, "S3655C1");
    check_base_class_offset(lv, (S3655C2*), 0, "S3655C1");
    check_field_offset(lv, s3655c1f0, ABISELECT(80,48), "S3655C1.s3655c1f0");
    check_field_offset(lv, s3655c1f1, ABISELECT(112,64), "S3655C1.s3655c1f1");
    test_class_info(&lv, &cd_S3655C1);
    dp->~S3655C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3655C1(Test_S3655C1, "S3655C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN7S3655C1C1Ev();
extern void _ZN7S3655C1D1Ev();
Name_Map name_map_S3655C1[] = {
  NSPAIR(_ZN7S3655C1C1Ev),
  NSPAIR(_ZN7S3655C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3655C2;
extern VTBL_ENTRY _ZTI7S3655C2[];
extern  VTBL_ENTRY _ZTV7S3655C2[];
static Base_Class bases_S3655C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3655C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3655C1[];
extern void _ZN7S3655C1D1Ev();
extern void _ZN7S3655C1D0Ev();
extern void _ZN7S3655C22v4Ev();
extern void _ZN7S3655C22v5Ev();
extern void _ZN7S3655C22v6Ev();
extern void _ZN7S3655C22v7Ev();
extern void _ZN7S3655C22v8Ev();
extern void _ZN7S3655C12v1Ev();
extern void _ZN7S3655C12v2Ev();
extern void _ZN7S3655C12v3Ev();
static  VTBL_ENTRY vtc_S3655C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3655C1[0]),
  (VTBL_ENTRY)&_ZN7S3655C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3655C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3655C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3655C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3655C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3655C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3655C1[];
extern  VTBL_ENTRY _ZTV7S3655C1[];
Class_Descriptor cd_S3655C1 = {  "S3655C1", // class name
  bases_S3655C1, 2,
  &(vtc_S3655C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI7S3655C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3655C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2061C4  {
  ::S7368C9_nt s2061c4f0;
  int s2061c4f1[2];
  char s2061c4f2;
  virtual  ~S2061C4(); // _ZN7S2061C4D1Ev
  virtual void  v2(); // _ZN7S2061C42v2Ev
  virtual void  v3(); // _ZN7S2061C42v3Ev
  virtual void  v4(); // _ZN7S2061C42v4Ev
  S2061C4(); // tgen
};
//SIG(-1 S2061C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2061C4 ::~S2061C4(){ note_dtor("S2061C4", this);}
void  S2061C4 ::v2(){vfunc_called(this, "_ZN7S2061C42v2Ev");}
void  S2061C4 ::v3(){vfunc_called(this, "_ZN7S2061C42v3Ev");}
void  S2061C4 ::v4(){vfunc_called(this, "_ZN7S2061C42v4Ev");}
S2061C4 ::S2061C4(){ note_ctor("S2061C4", this);} // tgen

static void Test_S2061C4()
{
  extern Class_Descriptor cd_S2061C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2061C4, buf);
    S2061C4 *dp, &lv = *(dp=new (buf) S2061C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2061C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2061C4)");
    check_field_offset(lv, s2061c4f0, ABISELECT(8,4), "S2061C4.s2061c4f0");
    check_field_offset(lv, s2061c4f1, ABISELECT(24,16), "S2061C4.s2061c4f1");
    check_field_offset(lv, s2061c4f2, ABISELECT(32,24), "S2061C4.s2061c4f2");
    test_class_info(&lv, &cd_S2061C4);
    dp->~S2061C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2061C4(Test_S2061C4, "S2061C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2061C4C1Ev();
extern void _ZN7S2061C4D1Ev();
Name_Map name_map_S2061C4[] = {
  NSPAIR(_ZN7S2061C4C1Ev),
  NSPAIR(_ZN7S2061C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2061C4[];
extern void _ZN7S2061C4D1Ev();
extern void _ZN7S2061C4D0Ev();
extern void _ZN7S2061C42v2Ev();
extern void _ZN7S2061C42v3Ev();
extern void _ZN7S2061C42v4Ev();
static  VTBL_ENTRY vtc_S2061C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2061C4[0]),
  (VTBL_ENTRY)&_ZN7S2061C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2061C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2061C4[];
extern  VTBL_ENTRY _ZTV7S2061C4[];
Class_Descriptor cd_S2061C4 = {  "S2061C4", // class name
  0,0,//no base classes
  &(vtc_S2061C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2061C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2061C4),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  S2061C3  : S2061C4 , S7368C49 {
  void *s2061c3f0;
  virtual  ~S2061C3(); // _ZN7S2061C3D1Ev
  S2061C3(); // tgen
};
//SIG(-1 S2061C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2061C3()
{
  extern Class_Descriptor cd_S2061C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2061C3, buf);
    S2061C3 *dp, &lv = *(dp=new (buf) S2061C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2061C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2061C3)");
    check_base_class_offset(lv, (S2061C4*), 0, "S2061C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2061C3");
    check_field_offset(lv, s2061c3f0, ABISELECT(72,48), "S2061C3.s2061c3f0");
    test_class_info(&lv, &cd_S2061C3);
    dp->~S2061C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2061C3(Test_S2061C3, "S2061C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2061C3C1Ev();
extern void _ZN7S2061C3D1Ev();
Name_Map name_map_S2061C3[] = {
  NSPAIR(_ZN7S2061C3C1Ev),
  NSPAIR(_ZN7S2061C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2061C4;
extern VTBL_ENTRY _ZTI7S2061C4[];
extern  VTBL_ENTRY _ZTV7S2061C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2061C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2061C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2061C3[];
extern void _ZN7S2061C3D1Ev();
extern void _ZN7S2061C3D0Ev();
extern void _ZN7S2061C42v2Ev();
extern void _ZN7S2061C42v3Ev();
extern void _ZN7S2061C42v4Ev();
extern void ABISELECT(_ZThn40_N7S2061C3D1Ev,_ZThn28_N7S2061C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2061C3D0Ev,_ZThn28_N7S2061C3D0Ev)();
static  VTBL_ENTRY vtc_S2061C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2061C3[0]),
  (VTBL_ENTRY)&_ZN7S2061C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2061C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2061C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2061C3D1Ev,_ZThn28_N7S2061C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2061C3D0Ev,_ZThn28_N7S2061C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2061C3[];
extern  VTBL_ENTRY _ZTV7S2061C3[];
Class_Descriptor cd_S2061C3 = {  "S2061C3", // class name
  bases_S2061C3, 2,
  &(vtc_S2061C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2061C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2061C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2061C2  : S2061C3 {
  void *s2061c2f0;
  int s2061c2f1;
  virtual  ~S2061C2(); // _ZN7S2061C2D1Ev
  virtual void  v5(); // _ZN7S2061C22v5Ev
  S2061C2(); // tgen
};
//SIG(-1 S2061C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2061C2()
{
  extern Class_Descriptor cd_S2061C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2061C2, buf);
    S2061C2 *dp, &lv = *(dp=new (buf) S2061C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2061C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2061C2)");
    check_base_class_offset(lv, (S2061C4*)(S2061C3*), 0, "S2061C2");
    check_base_class_offset(lv, (S7368C49*)(S2061C3*), ABISELECT(40,28), "S2061C2");
    check_base_class_offset(lv, (S2061C3*), 0, "S2061C2");
    check_field_offset(lv, s2061c2f0, ABISELECT(80,52), "S2061C2.s2061c2f0");
    check_field_offset(lv, s2061c2f1, ABISELECT(88,56), "S2061C2.s2061c2f1");
    test_class_info(&lv, &cd_S2061C2);
    dp->~S2061C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2061C2(Test_S2061C2, "S2061C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2061C2C1Ev();
extern void _ZN7S2061C2D1Ev();
Name_Map name_map_S2061C2[] = {
  NSPAIR(_ZN7S2061C2C1Ev),
  NSPAIR(_ZN7S2061C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2061C4;
extern VTBL_ENTRY _ZTI7S2061C4[];
extern  VTBL_ENTRY _ZTV7S2061C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2061C3;
extern VTBL_ENTRY _ZTI7S2061C3[];
extern  VTBL_ENTRY _ZTV7S2061C3[];
static Base_Class bases_S2061C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2061C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2061C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2061C2[];
extern void _ZN7S2061C2D1Ev();
extern void _ZN7S2061C2D0Ev();
extern void _ZN7S2061C42v2Ev();
extern void _ZN7S2061C42v3Ev();
extern void _ZN7S2061C42v4Ev();
extern void _ZN7S2061C22v5Ev();
extern void ABISELECT(_ZThn40_N7S2061C2D1Ev,_ZThn28_N7S2061C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2061C2D0Ev,_ZThn28_N7S2061C2D0Ev)();
static  VTBL_ENTRY vtc_S2061C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2061C2[0]),
  (VTBL_ENTRY)&_ZN7S2061C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2061C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2061C22v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2061C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2061C2D1Ev,_ZThn28_N7S2061C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2061C2D0Ev,_ZThn28_N7S2061C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2061C2[];
extern  VTBL_ENTRY _ZTV7S2061C2[];
Class_Descriptor cd_S2061C2 = {  "S2061C2", // class name
  bases_S2061C2, 3,
  &(vtc_S2061C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2061C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2061C2),12, //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  S2061C1  : S2061C2 , S2060C10_nt {
  ::S7368C9_nt s2061c1f0;
  virtual  ~S2061C1(); // _ZN7S2061C1D1Ev
  virtual void  v1(); // _ZN7S2061C12v1Ev
  S2061C1(); // tgen
};
//SIG(1 S2061C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v5 Fp Fi} BC10{ vd m Fp[2]} vd v1 FC5}


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

static void Test_S2061C1()
{
  extern Class_Descriptor cd_S2061C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S2061C1, buf);
    S2061C1 *dp, &lv = *(dp=new (buf) S2061C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S2061C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2061C1)");
    check_base_class_offset(lv, (S2061C4*)(S2061C3*)(S2061C2*), 0, "S2061C1");
    check_base_class_offset(lv, (S7368C49*)(S2061C3*)(S2061C2*), ABISELECT(40,28), "S2061C1");
    check_base_class_offset(lv, (S2061C3*)(S2061C2*), 0, "S2061C1");
    check_base_class_offset(lv, (S2061C2*), 0, "S2061C1");
    check_base_class_offset(lv, (S2060C10_nt*), ABISELECT(96,60), "S2061C1");
    check_field_offset(lv, s2061c1f0, ABISELECT(120,72), "S2061C1.s2061c1f0");
    test_class_info(&lv, &cd_S2061C1);
    dp->~S2061C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2061C1(Test_S2061C1, "S2061C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S2061C1C1Ev();
extern void _ZN7S2061C1D1Ev();
Name_Map name_map_S2061C1[] = {
  NSPAIR(_ZN7S2061C1C1Ev),
  NSPAIR(_ZN7S2061C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2061C4;
extern VTBL_ENTRY _ZTI7S2061C4[];
extern  VTBL_ENTRY _ZTV7S2061C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2061C3;
extern VTBL_ENTRY _ZTI7S2061C3[];
extern  VTBL_ENTRY _ZTV7S2061C3[];
extern Class_Descriptor cd_S2061C2;
extern VTBL_ENTRY _ZTI7S2061C2[];
extern  VTBL_ENTRY _ZTV7S2061C2[];
extern Class_Descriptor cd_S2060C10_nt;
extern VTBL_ENTRY _ZTI11S2060C10_nt[];
extern  VTBL_ENTRY _ZTV11S2060C10_nt[];
static Base_Class bases_S2061C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2061C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2061C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2061C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2060C10_nt,    ABISELECT(96,60), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2061C1[];
extern void _ZN7S2061C1D1Ev();
extern void _ZN7S2061C1D0Ev();
extern void _ZN7S2061C42v2Ev();
extern void _ZN7S2061C42v3Ev();
extern void _ZN7S2061C42v4Ev();
extern void _ZN7S2061C22v5Ev();
extern void _ZN7S2061C12v1Ev();
extern void ABISELECT(_ZThn40_N7S2061C1D1Ev,_ZThn28_N7S2061C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2061C1D0Ev,_ZThn28_N7S2061C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S2061C1D1Ev,_ZThn60_N7S2061C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S2061C1D0Ev,_ZThn60_N7S2061C1D0Ev)();
static  VTBL_ENTRY vtc_S2061C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2061C1[0]),
  (VTBL_ENTRY)&_ZN7S2061C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2061C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2061C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2061C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2061C12v1Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2061C1D1Ev,_ZThn28_N7S2061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2061C1D0Ev,_ZThn28_N7S2061C1D0Ev),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S2061C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2061C1D1Ev,_ZThn60_N7S2061C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S2061C1D0Ev,_ZThn60_N7S2061C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2061C1[];
extern  VTBL_ENTRY _ZTV7S2061C1[];
Class_Descriptor cd_S2061C1 = {  "S2061C1", // class name
  bases_S2061C1, 5,
  &(vtc_S2061C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S2061C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2061C1),17, //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  S3656C2  : S7368C49 {
  void *s3656c2f0;
  ::S487C6_nt s3656c2f1;
  void *s3656c2f2;
  char s3656c2f3;
  virtual  ~S3656C2(); // _ZN7S3656C2D1Ev
  virtual void  v4(); // _ZN7S3656C22v4Ev
  virtual void  v5(); // _ZN7S3656C22v5Ev
  virtual void  v6(); // _ZN7S3656C22v6Ev
  virtual void  v7(); // _ZN7S3656C22v7Ev
  virtual void  v8(); // _ZN7S3656C22v8Ev
  S3656C2(); // tgen
};
//SIG(-1 S3656C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp Fc}


 S3656C2 ::~S3656C2(){ note_dtor("S3656C2", this);}
void  S3656C2 ::v4(){vfunc_called(this, "_ZN7S3656C22v4Ev");}
void  S3656C2 ::v5(){vfunc_called(this, "_ZN7S3656C22v5Ev");}
void  S3656C2 ::v6(){vfunc_called(this, "_ZN7S3656C22v6Ev");}
void  S3656C2 ::v7(){vfunc_called(this, "_ZN7S3656C22v7Ev");}
void  S3656C2 ::v8(){vfunc_called(this, "_ZN7S3656C22v8Ev");}
S3656C2 ::S3656C2(){ note_ctor("S3656C2", this);} // tgen

static void Test_S3656C2()
{
  extern Class_Descriptor cd_S3656C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3656C2, buf);
    S3656C2 *dp, &lv = *(dp=new (buf) S3656C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3656C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3656C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3656C2");
    check_field_offset(lv, s3656c2f0, ABISELECT(32,20), "S3656C2.s3656c2f0");
    check_field_offset(lv, s3656c2f1, ABISELECT(40,24), "S3656C2.s3656c2f1");
    check_field_offset(lv, s3656c2f2, ABISELECT(64,40), "S3656C2.s3656c2f2");
    check_field_offset(lv, s3656c2f3, ABISELECT(72,44), "S3656C2.s3656c2f3");
    test_class_info(&lv, &cd_S3656C2);
    dp->~S3656C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3656C2(Test_S3656C2, "S3656C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3656C2C1Ev();
extern void _ZN7S3656C2D1Ev();
Name_Map name_map_S3656C2[] = {
  NSPAIR(_ZN7S3656C2C1Ev),
  NSPAIR(_ZN7S3656C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3656C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3656C2[];
extern void _ZN7S3656C2D1Ev();
extern void _ZN7S3656C2D0Ev();
extern void _ZN7S3656C22v4Ev();
extern void _ZN7S3656C22v5Ev();
extern void _ZN7S3656C22v6Ev();
extern void _ZN7S3656C22v7Ev();
extern void _ZN7S3656C22v8Ev();
static  VTBL_ENTRY vtc_S3656C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3656C2[0]),
  (VTBL_ENTRY)&_ZN7S3656C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3656C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S3656C2[];
extern  VTBL_ENTRY _ZTV7S3656C2[];
Class_Descriptor cd_S3656C2 = {  "S3656C2", // class name
  bases_S3656C2, 1,
  &(vtc_S3656C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3656C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3656C2),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  S3656C1  : S3656C2 {
  ::S8541C9 s3656c1f0;
  virtual  ~S3656C1(); // _ZN7S3656C1D1Ev
  virtual void  v1(); // _ZN7S3656C12v1Ev
  virtual void  v2(); // _ZN7S3656C12v2Ev
  virtual void  v3(); // _ZN7S3656C12v3Ev
  S3656C1(); // tgen
};
//SIG(1 S3656C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v4 v5 v6 v7 v8 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp Fc} vd v1 v2 v3 FC9{ BC10{ vd m Fp} vd Fp}}


 S3656C1 ::~S3656C1(){ note_dtor("S3656C1", this);}
void  S3656C1 ::v1(){vfunc_called(this, "_ZN7S3656C12v1Ev");}
void  S3656C1 ::v2(){vfunc_called(this, "_ZN7S3656C12v2Ev");}
void  S3656C1 ::v3(){vfunc_called(this, "_ZN7S3656C12v3Ev");}
S3656C1 ::S3656C1(){ note_ctor("S3656C1", this);} // tgen

static void Test_S3656C1()
{
  extern Class_Descriptor cd_S3656C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S3656C1, buf);
    S3656C1 *dp, &lv = *(dp=new (buf) S3656C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S3656C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3656C1)");
    check_base_class_offset(lv, (S7368C49*)(S3656C2*), 0, "S3656C1");
    check_base_class_offset(lv, (S3656C2*), 0, "S3656C1");
    check_field_offset(lv, s3656c1f0, ABISELECT(80,48), "S3656C1.s3656c1f0");
    test_class_info(&lv, &cd_S3656C1);
    dp->~S3656C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3656C1(Test_S3656C1, "S3656C1", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S3656C1C1Ev();
extern void _ZN7S3656C1D1Ev();
Name_Map name_map_S3656C1[] = {
  NSPAIR(_ZN7S3656C1C1Ev),
  NSPAIR(_ZN7S3656C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3656C2;
extern VTBL_ENTRY _ZTI7S3656C2[];
extern  VTBL_ENTRY _ZTV7S3656C2[];
static Base_Class bases_S3656C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3656C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3656C1[];
extern void _ZN7S3656C1D1Ev();
extern void _ZN7S3656C1D0Ev();
extern void _ZN7S3656C22v4Ev();
extern void _ZN7S3656C22v5Ev();
extern void _ZN7S3656C22v6Ev();
extern void _ZN7S3656C22v7Ev();
extern void _ZN7S3656C22v8Ev();
extern void _ZN7S3656C12v1Ev();
extern void _ZN7S3656C12v2Ev();
extern void _ZN7S3656C12v3Ev();
static  VTBL_ENTRY vtc_S3656C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3656C1[0]),
  (VTBL_ENTRY)&_ZN7S3656C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3656C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3656C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3656C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3656C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3656C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3656C1[];
extern  VTBL_ENTRY _ZTV7S3656C1[];
Class_Descriptor cd_S3656C1 = {  "S3656C1", // class name
  bases_S3656C1, 2,
  &(vtc_S3656C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S3656C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3656C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3650C2  : S7368C49 {
  void *s3650c2f0;
  ::S487C6_nt s3650c2f1;
  void *s3650c2f2;
  char s3650c2f3;
  virtual  ~S3650C2(); // _ZN7S3650C2D1Ev
  virtual void  v2(); // _ZN7S3650C22v2Ev
  virtual void  v3(); // _ZN7S3650C22v3Ev
  virtual void  v4(); // _ZN7S3650C22v4Ev
  virtual void  v5(); // _ZN7S3650C22v5Ev
  virtual void  v6(); // _ZN7S3650C22v6Ev
  S3650C2(); // tgen
};
//SIG(-1 S3650C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp Fc}


 S3650C2 ::~S3650C2(){ note_dtor("S3650C2", this);}
void  S3650C2 ::v2(){vfunc_called(this, "_ZN7S3650C22v2Ev");}
void  S3650C2 ::v3(){vfunc_called(this, "_ZN7S3650C22v3Ev");}
void  S3650C2 ::v4(){vfunc_called(this, "_ZN7S3650C22v4Ev");}
void  S3650C2 ::v5(){vfunc_called(this, "_ZN7S3650C22v5Ev");}
void  S3650C2 ::v6(){vfunc_called(this, "_ZN7S3650C22v6Ev");}
S3650C2 ::S3650C2(){ note_ctor("S3650C2", this);} // tgen

static void Test_S3650C2()
{
  extern Class_Descriptor cd_S3650C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3650C2, buf);
    S3650C2 *dp, &lv = *(dp=new (buf) S3650C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3650C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3650C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3650C2");
    check_field_offset(lv, s3650c2f0, ABISELECT(32,20), "S3650C2.s3650c2f0");
    check_field_offset(lv, s3650c2f1, ABISELECT(40,24), "S3650C2.s3650c2f1");
    check_field_offset(lv, s3650c2f2, ABISELECT(64,40), "S3650C2.s3650c2f2");
    check_field_offset(lv, s3650c2f3, ABISELECT(72,44), "S3650C2.s3650c2f3");
    test_class_info(&lv, &cd_S3650C2);
    dp->~S3650C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3650C2(Test_S3650C2, "S3650C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3650C2C1Ev();
extern void _ZN7S3650C2D1Ev();
Name_Map name_map_S3650C2[] = {
  NSPAIR(_ZN7S3650C2C1Ev),
  NSPAIR(_ZN7S3650C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3650C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3650C2[];
extern void _ZN7S3650C2D1Ev();
extern void _ZN7S3650C2D0Ev();
extern void _ZN7S3650C22v2Ev();
extern void _ZN7S3650C22v3Ev();
extern void _ZN7S3650C22v4Ev();
extern void _ZN7S3650C22v5Ev();
extern void _ZN7S3650C22v6Ev();
static  VTBL_ENTRY vtc_S3650C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3650C2[0]),
  (VTBL_ENTRY)&_ZN7S3650C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3650C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S3650C2[];
extern  VTBL_ENTRY _ZTV7S3650C2[];
Class_Descriptor cd_S3650C2 = {  "S3650C2", // class name
  bases_S3650C2, 1,
  &(vtc_S3650C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3650C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3650C2),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  S3650C1  : S3650C2 {
  ::S3653C10 s3650c1f0;
  void *s3650c1f1;
  virtual  ~S3650C1(); // _ZN7S3650C1D1Ev
  virtual void  v1(); // _ZN7S3650C12v1Ev
  S3650C1(); // tgen
};
//SIG(1 S3650C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v2 v3 v4 v5 v6 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp Fc} vd v1 FC9{ BC10{ vd m Fp} vd Fp[2]} Fp}


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

static void Test_S3650C1()
{
  extern Class_Descriptor cd_S3650C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S3650C1, buf);
    S3650C1 *dp, &lv = *(dp=new (buf) S3650C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S3650C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3650C1)");
    check_base_class_offset(lv, (S7368C49*)(S3650C2*), 0, "S3650C1");
    check_base_class_offset(lv, (S3650C2*), 0, "S3650C1");
    check_field_offset(lv, s3650c1f0, ABISELECT(80,48), "S3650C1.s3650c1f0");
    check_field_offset(lv, s3650c1f1, ABISELECT(112,64), "S3650C1.s3650c1f1");
    test_class_info(&lv, &cd_S3650C1);
    dp->~S3650C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3650C1(Test_S3650C1, "S3650C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN7S3650C1C1Ev();
extern void _ZN7S3650C1D1Ev();
Name_Map name_map_S3650C1[] = {
  NSPAIR(_ZN7S3650C1C1Ev),
  NSPAIR(_ZN7S3650C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3650C2;
extern VTBL_ENTRY _ZTI7S3650C2[];
extern  VTBL_ENTRY _ZTV7S3650C2[];
static Base_Class bases_S3650C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3650C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3650C1[];
extern void _ZN7S3650C1D1Ev();
extern void _ZN7S3650C1D0Ev();
extern void _ZN7S3650C22v2Ev();
extern void _ZN7S3650C22v3Ev();
extern void _ZN7S3650C22v4Ev();
extern void _ZN7S3650C22v5Ev();
extern void _ZN7S3650C22v6Ev();
extern void _ZN7S3650C12v1Ev();
static  VTBL_ENTRY vtc_S3650C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3650C1[0]),
  (VTBL_ENTRY)&_ZN7S3650C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3650C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3650C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3650C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3650C1[];
extern  VTBL_ENTRY _ZTV7S3650C1[];
Class_Descriptor cd_S3650C1 = {  "S3650C1", // class name
  bases_S3650C1, 2,
  &(vtc_S3650C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI7S3650C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3650C1),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  S2155C4  {
  ::S7368C9_nt s2155c4f0;
  int s2155c4f1[2];
  char s2155c4f2;
  virtual  ~S2155C4(); // _ZN7S2155C4D1Ev
  virtual void  v3(); // _ZN7S2155C42v3Ev
  virtual void  v4(); // _ZN7S2155C42v4Ev
  virtual void  v5(); // _ZN7S2155C42v5Ev
  S2155C4(); // tgen
};
//SIG(-1 S2155C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2155C4 ::~S2155C4(){ note_dtor("S2155C4", this);}
void  S2155C4 ::v3(){vfunc_called(this, "_ZN7S2155C42v3Ev");}
void  S2155C4 ::v4(){vfunc_called(this, "_ZN7S2155C42v4Ev");}
void  S2155C4 ::v5(){vfunc_called(this, "_ZN7S2155C42v5Ev");}
S2155C4 ::S2155C4(){ note_ctor("S2155C4", this);} // tgen

static void Test_S2155C4()
{
  extern Class_Descriptor cd_S2155C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2155C4, buf);
    S2155C4 *dp, &lv = *(dp=new (buf) S2155C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2155C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2155C4)");
    check_field_offset(lv, s2155c4f0, ABISELECT(8,4), "S2155C4.s2155c4f0");
    check_field_offset(lv, s2155c4f1, ABISELECT(24,16), "S2155C4.s2155c4f1");
    check_field_offset(lv, s2155c4f2, ABISELECT(32,24), "S2155C4.s2155c4f2");
    test_class_info(&lv, &cd_S2155C4);
    dp->~S2155C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2155C4(Test_S2155C4, "S2155C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2155C4C1Ev();
extern void _ZN7S2155C4D1Ev();
Name_Map name_map_S2155C4[] = {
  NSPAIR(_ZN7S2155C4C1Ev),
  NSPAIR(_ZN7S2155C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2155C4[];
extern void _ZN7S2155C4D1Ev();
extern void _ZN7S2155C4D0Ev();
extern void _ZN7S2155C42v3Ev();
extern void _ZN7S2155C42v4Ev();
extern void _ZN7S2155C42v5Ev();
static  VTBL_ENTRY vtc_S2155C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2155C4[0]),
  (VTBL_ENTRY)&_ZN7S2155C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2155C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2155C4[];
extern  VTBL_ENTRY _ZTV7S2155C4[];
Class_Descriptor cd_S2155C4 = {  "S2155C4", // class name
  0,0,//no base classes
  &(vtc_S2155C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2155C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2155C4),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  S2155C3  : S2155C4 , S7368C49 {
  void *s2155c3f0;
  virtual  ~S2155C3(); // _ZN7S2155C3D1Ev
  S2155C3(); // tgen
};
//SIG(-1 S2155C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2155C3()
{
  extern Class_Descriptor cd_S2155C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2155C3, buf);
    S2155C3 *dp, &lv = *(dp=new (buf) S2155C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2155C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2155C3)");
    check_base_class_offset(lv, (S2155C4*), 0, "S2155C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2155C3");
    check_field_offset(lv, s2155c3f0, ABISELECT(72,48), "S2155C3.s2155c3f0");
    test_class_info(&lv, &cd_S2155C3);
    dp->~S2155C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2155C3(Test_S2155C3, "S2155C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2155C3C1Ev();
extern void _ZN7S2155C3D1Ev();
Name_Map name_map_S2155C3[] = {
  NSPAIR(_ZN7S2155C3C1Ev),
  NSPAIR(_ZN7S2155C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2155C4;
extern VTBL_ENTRY _ZTI7S2155C4[];
extern  VTBL_ENTRY _ZTV7S2155C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2155C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2155C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2155C3[];
extern void _ZN7S2155C3D1Ev();
extern void _ZN7S2155C3D0Ev();
extern void _ZN7S2155C42v3Ev();
extern void _ZN7S2155C42v4Ev();
extern void _ZN7S2155C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2155C3D1Ev,_ZThn28_N7S2155C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2155C3D0Ev,_ZThn28_N7S2155C3D0Ev)();
static  VTBL_ENTRY vtc_S2155C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2155C3[0]),
  (VTBL_ENTRY)&_ZN7S2155C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2155C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2155C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2155C3D1Ev,_ZThn28_N7S2155C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2155C3D0Ev,_ZThn28_N7S2155C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2155C3[];
extern  VTBL_ENTRY _ZTV7S2155C3[];
Class_Descriptor cd_S2155C3 = {  "S2155C3", // class name
  bases_S2155C3, 2,
  &(vtc_S2155C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2155C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2155C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2155C2  : S2155C3 {
  int s2155c2f0;
  virtual  ~S2155C2(); // _ZN7S2155C2D1Ev
  virtual void  v6(); // _ZN7S2155C22v6Ev
  S2155C2(); // tgen
};
//SIG(-1 S2155C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fi}


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

static void Test_S2155C2()
{
  extern Class_Descriptor cd_S2155C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2155C2, buf);
    S2155C2 *dp, &lv = *(dp=new (buf) S2155C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2155C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2155C2)");
    check_base_class_offset(lv, (S2155C4*)(S2155C3*), 0, "S2155C2");
    check_base_class_offset(lv, (S7368C49*)(S2155C3*), ABISELECT(40,28), "S2155C2");
    check_base_class_offset(lv, (S2155C3*), 0, "S2155C2");
    check_field_offset(lv, s2155c2f0, ABISELECT(80,52), "S2155C2.s2155c2f0");
    test_class_info(&lv, &cd_S2155C2);
    dp->~S2155C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2155C2(Test_S2155C2, "S2155C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2155C2C1Ev();
extern void _ZN7S2155C2D1Ev();
Name_Map name_map_S2155C2[] = {
  NSPAIR(_ZN7S2155C2C1Ev),
  NSPAIR(_ZN7S2155C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2155C4;
extern VTBL_ENTRY _ZTI7S2155C4[];
extern  VTBL_ENTRY _ZTV7S2155C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2155C3;
extern VTBL_ENTRY _ZTI7S2155C3[];
extern  VTBL_ENTRY _ZTV7S2155C3[];
static Base_Class bases_S2155C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2155C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2155C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2155C2[];
extern void _ZN7S2155C2D1Ev();
extern void _ZN7S2155C2D0Ev();
extern void _ZN7S2155C42v3Ev();
extern void _ZN7S2155C42v4Ev();
extern void _ZN7S2155C42v5Ev();
extern void _ZN7S2155C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2155C2D1Ev,_ZThn28_N7S2155C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2155C2D0Ev,_ZThn28_N7S2155C2D0Ev)();
static  VTBL_ENTRY vtc_S2155C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2155C2[0]),
  (VTBL_ENTRY)&_ZN7S2155C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2155C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2155C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2155C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2155C2D1Ev,_ZThn28_N7S2155C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2155C2D0Ev,_ZThn28_N7S2155C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2155C2[];
extern  VTBL_ENTRY _ZTV7S2155C2[];
Class_Descriptor cd_S2155C2 = {  "S2155C2", // class name
  bases_S2155C2, 3,
  &(vtc_S2155C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2155C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2155C2),12, //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  S2155C1  : S2155C2 {
  int s2155c1f0[2];
  void *s2155c1f1;
  int s2155c1f2[2];
  virtual  ~S2155C1(); // _ZN7S2155C1D1Ev
  virtual void  v1(); // _ZN7S2155C12v1Ev
  virtual void  v2(); // _ZN7S2155C12v2Ev
  S2155C1(); // tgen
};
//SIG(1 S2155C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fi} vd v1 v2 Fi[2] Fp Fi[2]}


 S2155C1 ::~S2155C1(){ note_dtor("S2155C1", this);}
void  S2155C1 ::v1(){vfunc_called(this, "_ZN7S2155C12v1Ev");}
void  S2155C1 ::v2(){vfunc_called(this, "_ZN7S2155C12v2Ev");}
S2155C1 ::S2155C1(){ note_ctor("S2155C1", this);} // tgen

static void Test_S2155C1()
{
  extern Class_Descriptor cd_S2155C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S2155C1, buf);
    S2155C1 *dp, &lv = *(dp=new (buf) S2155C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S2155C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2155C1)");
    check_base_class_offset(lv, (S2155C4*)(S2155C3*)(S2155C2*), 0, "S2155C1");
    check_base_class_offset(lv, (S7368C49*)(S2155C3*)(S2155C2*), ABISELECT(40,28), "S2155C1");
    check_base_class_offset(lv, (S2155C3*)(S2155C2*), 0, "S2155C1");
    check_base_class_offset(lv, (S2155C2*), 0, "S2155C1");
    check_field_offset(lv, s2155c1f0, ABISELECT(84,56), "S2155C1.s2155c1f0");
    check_field_offset(lv, s2155c1f1, ABISELECT(96,64), "S2155C1.s2155c1f1");
    check_field_offset(lv, s2155c1f2, ABISELECT(104,68), "S2155C1.s2155c1f2");
    test_class_info(&lv, &cd_S2155C1);
    dp->~S2155C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2155C1(Test_S2155C1, "S2155C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S2155C1C1Ev();
extern void _ZN7S2155C1D1Ev();
Name_Map name_map_S2155C1[] = {
  NSPAIR(_ZN7S2155C1C1Ev),
  NSPAIR(_ZN7S2155C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2155C4;
extern VTBL_ENTRY _ZTI7S2155C4[];
extern  VTBL_ENTRY _ZTV7S2155C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2155C3;
extern VTBL_ENTRY _ZTI7S2155C3[];
extern  VTBL_ENTRY _ZTV7S2155C3[];
extern Class_Descriptor cd_S2155C2;
extern VTBL_ENTRY _ZTI7S2155C2[];
extern  VTBL_ENTRY _ZTV7S2155C2[];
static Base_Class bases_S2155C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2155C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2155C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2155C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2155C1[];
extern void _ZN7S2155C1D1Ev();
extern void _ZN7S2155C1D0Ev();
extern void _ZN7S2155C42v3Ev();
extern void _ZN7S2155C42v4Ev();
extern void _ZN7S2155C42v5Ev();
extern void _ZN7S2155C22v6Ev();
extern void _ZN7S2155C12v1Ev();
extern void _ZN7S2155C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2155C1D1Ev,_ZThn28_N7S2155C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2155C1D0Ev,_ZThn28_N7S2155C1D0Ev)();
static  VTBL_ENTRY vtc_S2155C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2155C1[0]),
  (VTBL_ENTRY)&_ZN7S2155C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2155C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2155C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2155C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2155C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2155C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2155C1D1Ev,_ZThn28_N7S2155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2155C1D0Ev,_ZThn28_N7S2155C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2155C1[];
extern  VTBL_ENTRY _ZTV7S2155C1[];
Class_Descriptor cd_S2155C1 = {  "S2155C1", // class name
  bases_S2155C1, 4,
  &(vtc_S2155C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S2155C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2155C1),14, //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  S2063C4  {
  ::S7368C9_nt s2063c4f0;
  int s2063c4f1[2];
  char s2063c4f2;
  virtual  ~S2063C4(); // _ZN7S2063C4D1Ev
  virtual void  v2(); // _ZN7S2063C42v2Ev
  virtual void  v3(); // _ZN7S2063C42v3Ev
  virtual void  v4(); // _ZN7S2063C42v4Ev
  S2063C4(); // tgen
};
//SIG(-1 S2063C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2063C4 ::~S2063C4(){ note_dtor("S2063C4", this);}
void  S2063C4 ::v2(){vfunc_called(this, "_ZN7S2063C42v2Ev");}
void  S2063C4 ::v3(){vfunc_called(this, "_ZN7S2063C42v3Ev");}
void  S2063C4 ::v4(){vfunc_called(this, "_ZN7S2063C42v4Ev");}
S2063C4 ::S2063C4(){ note_ctor("S2063C4", this);} // tgen

static void Test_S2063C4()
{
  extern Class_Descriptor cd_S2063C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2063C4, buf);
    S2063C4 *dp, &lv = *(dp=new (buf) S2063C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2063C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2063C4)");
    check_field_offset(lv, s2063c4f0, ABISELECT(8,4), "S2063C4.s2063c4f0");
    check_field_offset(lv, s2063c4f1, ABISELECT(24,16), "S2063C4.s2063c4f1");
    check_field_offset(lv, s2063c4f2, ABISELECT(32,24), "S2063C4.s2063c4f2");
    test_class_info(&lv, &cd_S2063C4);
    dp->~S2063C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2063C4(Test_S2063C4, "S2063C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2063C4C1Ev();
extern void _ZN7S2063C4D1Ev();
Name_Map name_map_S2063C4[] = {
  NSPAIR(_ZN7S2063C4C1Ev),
  NSPAIR(_ZN7S2063C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2063C4[];
extern void _ZN7S2063C4D1Ev();
extern void _ZN7S2063C4D0Ev();
extern void _ZN7S2063C42v2Ev();
extern void _ZN7S2063C42v3Ev();
extern void _ZN7S2063C42v4Ev();
static  VTBL_ENTRY vtc_S2063C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2063C4[0]),
  (VTBL_ENTRY)&_ZN7S2063C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2063C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2063C4[];
extern  VTBL_ENTRY _ZTV7S2063C4[];
Class_Descriptor cd_S2063C4 = {  "S2063C4", // class name
  0,0,//no base classes
  &(vtc_S2063C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2063C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2063C4),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  S2063C3  : S2063C4 , S7368C49 {
  void *s2063c3f0;
  virtual  ~S2063C3(); // _ZN7S2063C3D1Ev
  S2063C3(); // tgen
};
//SIG(-1 S2063C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2063C3()
{
  extern Class_Descriptor cd_S2063C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2063C3, buf);
    S2063C3 *dp, &lv = *(dp=new (buf) S2063C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2063C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2063C3)");
    check_base_class_offset(lv, (S2063C4*), 0, "S2063C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2063C3");
    check_field_offset(lv, s2063c3f0, ABISELECT(72,48), "S2063C3.s2063c3f0");
    test_class_info(&lv, &cd_S2063C3);
    dp->~S2063C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2063C3(Test_S2063C3, "S2063C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2063C3C1Ev();
extern void _ZN7S2063C3D1Ev();
Name_Map name_map_S2063C3[] = {
  NSPAIR(_ZN7S2063C3C1Ev),
  NSPAIR(_ZN7S2063C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2063C4;
extern VTBL_ENTRY _ZTI7S2063C4[];
extern  VTBL_ENTRY _ZTV7S2063C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2063C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2063C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2063C3[];
extern void _ZN7S2063C3D1Ev();
extern void _ZN7S2063C3D0Ev();
extern void _ZN7S2063C42v2Ev();
extern void _ZN7S2063C42v3Ev();
extern void _ZN7S2063C42v4Ev();
extern void ABISELECT(_ZThn40_N7S2063C3D1Ev,_ZThn28_N7S2063C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2063C3D0Ev,_ZThn28_N7S2063C3D0Ev)();
static  VTBL_ENTRY vtc_S2063C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2063C3[0]),
  (VTBL_ENTRY)&_ZN7S2063C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2063C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2063C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2063C3D1Ev,_ZThn28_N7S2063C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2063C3D0Ev,_ZThn28_N7S2063C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2063C3[];
extern  VTBL_ENTRY _ZTV7S2063C3[];
Class_Descriptor cd_S2063C3 = {  "S2063C3", // class name
  bases_S2063C3, 2,
  &(vtc_S2063C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2063C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2063C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2063C2  : S2063C3 {
  void *s2063c2f0;
  int s2063c2f1;
  virtual  ~S2063C2(); // _ZN7S2063C2D1Ev
  virtual void  v5(); // _ZN7S2063C22v5Ev
  S2063C2(); // tgen
};
//SIG(-1 S2063C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2063C2()
{
  extern Class_Descriptor cd_S2063C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2063C2, buf);
    S2063C2 *dp, &lv = *(dp=new (buf) S2063C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2063C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2063C2)");
    check_base_class_offset(lv, (S2063C4*)(S2063C3*), 0, "S2063C2");
    check_base_class_offset(lv, (S7368C49*)(S2063C3*), ABISELECT(40,28), "S2063C2");
    check_base_class_offset(lv, (S2063C3*), 0, "S2063C2");
    check_field_offset(lv, s2063c2f0, ABISELECT(80,52), "S2063C2.s2063c2f0");
    check_field_offset(lv, s2063c2f1, ABISELECT(88,56), "S2063C2.s2063c2f1");
    test_class_info(&lv, &cd_S2063C2);
    dp->~S2063C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2063C2(Test_S2063C2, "S2063C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2063C2C1Ev();
extern void _ZN7S2063C2D1Ev();
Name_Map name_map_S2063C2[] = {
  NSPAIR(_ZN7S2063C2C1Ev),
  NSPAIR(_ZN7S2063C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2063C4;
extern VTBL_ENTRY _ZTI7S2063C4[];
extern  VTBL_ENTRY _ZTV7S2063C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2063C3;
extern VTBL_ENTRY _ZTI7S2063C3[];
extern  VTBL_ENTRY _ZTV7S2063C3[];
static Base_Class bases_S2063C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2063C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2063C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2063C2[];
extern void _ZN7S2063C2D1Ev();
extern void _ZN7S2063C2D0Ev();
extern void _ZN7S2063C42v2Ev();
extern void _ZN7S2063C42v3Ev();
extern void _ZN7S2063C42v4Ev();
extern void _ZN7S2063C22v5Ev();
extern void ABISELECT(_ZThn40_N7S2063C2D1Ev,_ZThn28_N7S2063C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2063C2D0Ev,_ZThn28_N7S2063C2D0Ev)();
static  VTBL_ENTRY vtc_S2063C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2063C2[0]),
  (VTBL_ENTRY)&_ZN7S2063C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2063C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2063C22v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2063C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2063C2D1Ev,_ZThn28_N7S2063C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2063C2D0Ev,_ZThn28_N7S2063C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2063C2[];
extern  VTBL_ENTRY _ZTV7S2063C2[];
Class_Descriptor cd_S2063C2 = {  "S2063C2", // class name
  bases_S2063C2, 3,
  &(vtc_S2063C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2063C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2063C2),12, //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  S2063C1  : S2063C2 {
  ::S7368C9_nt s2063c1f0;
  void *s2063c1f1;
  int s2063c1f2[2];
  virtual  ~S2063C1(); // _ZN7S2063C1D1Ev
  virtual void  v1(); // _ZN7S2063C12v1Ev
  S2063C1(); // tgen
};
//SIG(1 S2063C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v5 Fp Fi} vd v1 FC5 Fp Fi[2]}


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

static void Test_S2063C1()
{
  extern Class_Descriptor cd_S2063C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S2063C1, buf);
    S2063C1 *dp, &lv = *(dp=new (buf) S2063C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S2063C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2063C1)");
    check_base_class_offset(lv, (S2063C4*)(S2063C3*)(S2063C2*), 0, "S2063C1");
    check_base_class_offset(lv, (S7368C49*)(S2063C3*)(S2063C2*), ABISELECT(40,28), "S2063C1");
    check_base_class_offset(lv, (S2063C3*)(S2063C2*), 0, "S2063C1");
    check_base_class_offset(lv, (S2063C2*), 0, "S2063C1");
    check_field_offset(lv, s2063c1f0, ABISELECT(96,60), "S2063C1.s2063c1f0");
    check_field_offset(lv, s2063c1f1, ABISELECT(112,72), "S2063C1.s2063c1f1");
    check_field_offset(lv, s2063c1f2, ABISELECT(120,76), "S2063C1.s2063c1f2");
    test_class_info(&lv, &cd_S2063C1);
    dp->~S2063C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2063C1(Test_S2063C1, "S2063C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S2063C1C1Ev();
extern void _ZN7S2063C1D1Ev();
Name_Map name_map_S2063C1[] = {
  NSPAIR(_ZN7S2063C1C1Ev),
  NSPAIR(_ZN7S2063C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2063C4;
extern VTBL_ENTRY _ZTI7S2063C4[];
extern  VTBL_ENTRY _ZTV7S2063C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2063C3;
extern VTBL_ENTRY _ZTI7S2063C3[];
extern  VTBL_ENTRY _ZTV7S2063C3[];
extern Class_Descriptor cd_S2063C2;
extern VTBL_ENTRY _ZTI7S2063C2[];
extern  VTBL_ENTRY _ZTV7S2063C2[];
static Base_Class bases_S2063C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2063C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2063C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2063C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2063C1[];
extern void _ZN7S2063C1D1Ev();
extern void _ZN7S2063C1D0Ev();
extern void _ZN7S2063C42v2Ev();
extern void _ZN7S2063C42v3Ev();
extern void _ZN7S2063C42v4Ev();
extern void _ZN7S2063C22v5Ev();
extern void _ZN7S2063C12v1Ev();
extern void ABISELECT(_ZThn40_N7S2063C1D1Ev,_ZThn28_N7S2063C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2063C1D0Ev,_ZThn28_N7S2063C1D0Ev)();
static  VTBL_ENTRY vtc_S2063C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2063C1[0]),
  (VTBL_ENTRY)&_ZN7S2063C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2063C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2063C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2063C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2063C12v1Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2063C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2063C1D1Ev,_ZThn28_N7S2063C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2063C1D0Ev,_ZThn28_N7S2063C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2063C1[];
extern  VTBL_ENTRY _ZTV7S2063C1[];
Class_Descriptor cd_S2063C1 = {  "S2063C1", // class name
  bases_S2063C1, 4,
  &(vtc_S2063C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S2063C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2063C1),13, //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  S17987C1  {
  void *s17987c1f0[2];
  ::S17911C6 s17987c1f1;
  void  mf17987c1(); // _ZN8S17987C19mf17987c1Ev
};
//SIG(1 S17987C1) C1{ m Fp[2] FC2{ m Fi FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} FC6{ m FC7{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC8{ Fi} Fi Fc Fi Fc} Fp[16]}}


void  S17987C1 ::mf17987c1(){}

static void Test_S17987C1()
{
  {
    init_simple_test("S17987C1");
    S17987C1 lv;
    check2(sizeof(lv), ABISELECT(296,188), "sizeof(S17987C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17987C1)");
    check_field_offset(lv, s17987c1f0, 0, "S17987C1.s17987c1f0");
    check_field_offset(lv, s17987c1f1, ABISELECT(16,8), "S17987C1.s17987c1f1");
  }
}
static Arrange_To_Call_Me vS17987C1(Test_S17987C1, "S17987C1", ABISELECT(296,188));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2064C4  {
  ::S7368C9_nt s2064c4f0;
  int s2064c4f1[2];
  char s2064c4f2;
  virtual  ~S2064C4(); // _ZN7S2064C4D1Ev
  virtual void  v2(); // _ZN7S2064C42v2Ev
  virtual void  v3(); // _ZN7S2064C42v3Ev
  virtual void  v4(); // _ZN7S2064C42v4Ev
  S2064C4(); // tgen
};
//SIG(-1 S2064C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2064C4 ::~S2064C4(){ note_dtor("S2064C4", this);}
void  S2064C4 ::v2(){vfunc_called(this, "_ZN7S2064C42v2Ev");}
void  S2064C4 ::v3(){vfunc_called(this, "_ZN7S2064C42v3Ev");}
void  S2064C4 ::v4(){vfunc_called(this, "_ZN7S2064C42v4Ev");}
S2064C4 ::S2064C4(){ note_ctor("S2064C4", this);} // tgen

static void Test_S2064C4()
{
  extern Class_Descriptor cd_S2064C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2064C4, buf);
    S2064C4 *dp, &lv = *(dp=new (buf) S2064C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2064C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2064C4)");
    check_field_offset(lv, s2064c4f0, ABISELECT(8,4), "S2064C4.s2064c4f0");
    check_field_offset(lv, s2064c4f1, ABISELECT(24,16), "S2064C4.s2064c4f1");
    check_field_offset(lv, s2064c4f2, ABISELECT(32,24), "S2064C4.s2064c4f2");
    test_class_info(&lv, &cd_S2064C4);
    dp->~S2064C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2064C4(Test_S2064C4, "S2064C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2064C4C1Ev();
extern void _ZN7S2064C4D1Ev();
Name_Map name_map_S2064C4[] = {
  NSPAIR(_ZN7S2064C4C1Ev),
  NSPAIR(_ZN7S2064C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2064C4[];
extern void _ZN7S2064C4D1Ev();
extern void _ZN7S2064C4D0Ev();
extern void _ZN7S2064C42v2Ev();
extern void _ZN7S2064C42v3Ev();
extern void _ZN7S2064C42v4Ev();
static  VTBL_ENTRY vtc_S2064C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2064C4[0]),
  (VTBL_ENTRY)&_ZN7S2064C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2064C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2064C4[];
extern  VTBL_ENTRY _ZTV7S2064C4[];
Class_Descriptor cd_S2064C4 = {  "S2064C4", // class name
  0,0,//no base classes
  &(vtc_S2064C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2064C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2064C4),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  S2064C3  : S2064C4 , S7368C49 {
  void *s2064c3f0;
  virtual  ~S2064C3(); // _ZN7S2064C3D1Ev
  S2064C3(); // tgen
};
//SIG(-1 S2064C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2064C3()
{
  extern Class_Descriptor cd_S2064C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2064C3, buf);
    S2064C3 *dp, &lv = *(dp=new (buf) S2064C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2064C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2064C3)");
    check_base_class_offset(lv, (S2064C4*), 0, "S2064C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2064C3");
    check_field_offset(lv, s2064c3f0, ABISELECT(72,48), "S2064C3.s2064c3f0");
    test_class_info(&lv, &cd_S2064C3);
    dp->~S2064C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2064C3(Test_S2064C3, "S2064C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2064C3C1Ev();
extern void _ZN7S2064C3D1Ev();
Name_Map name_map_S2064C3[] = {
  NSPAIR(_ZN7S2064C3C1Ev),
  NSPAIR(_ZN7S2064C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2064C4;
extern VTBL_ENTRY _ZTI7S2064C4[];
extern  VTBL_ENTRY _ZTV7S2064C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2064C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2064C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2064C3[];
extern void _ZN7S2064C3D1Ev();
extern void _ZN7S2064C3D0Ev();
extern void _ZN7S2064C42v2Ev();
extern void _ZN7S2064C42v3Ev();
extern void _ZN7S2064C42v4Ev();
extern void ABISELECT(_ZThn40_N7S2064C3D1Ev,_ZThn28_N7S2064C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2064C3D0Ev,_ZThn28_N7S2064C3D0Ev)();
static  VTBL_ENTRY vtc_S2064C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2064C3[0]),
  (VTBL_ENTRY)&_ZN7S2064C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2064C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2064C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2064C3D1Ev,_ZThn28_N7S2064C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2064C3D0Ev,_ZThn28_N7S2064C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2064C3[];
extern  VTBL_ENTRY _ZTV7S2064C3[];
Class_Descriptor cd_S2064C3 = {  "S2064C3", // class name
  bases_S2064C3, 2,
  &(vtc_S2064C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2064C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2064C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2064C2  : S2064C3 {
  void *s2064c2f0;
  int s2064c2f1;
  virtual  ~S2064C2(); // _ZN7S2064C2D1Ev
  virtual void  v5(); // _ZN7S2064C22v5Ev
  S2064C2(); // tgen
};
//SIG(-1 S2064C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2064C2()
{
  extern Class_Descriptor cd_S2064C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2064C2, buf);
    S2064C2 *dp, &lv = *(dp=new (buf) S2064C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2064C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2064C2)");
    check_base_class_offset(lv, (S2064C4*)(S2064C3*), 0, "S2064C2");
    check_base_class_offset(lv, (S7368C49*)(S2064C3*), ABISELECT(40,28), "S2064C2");
    check_base_class_offset(lv, (S2064C3*), 0, "S2064C2");
    check_field_offset(lv, s2064c2f0, ABISELECT(80,52), "S2064C2.s2064c2f0");
    check_field_offset(lv, s2064c2f1, ABISELECT(88,56), "S2064C2.s2064c2f1");
    test_class_info(&lv, &cd_S2064C2);
    dp->~S2064C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2064C2(Test_S2064C2, "S2064C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2064C2C1Ev();
extern void _ZN7S2064C2D1Ev();
Name_Map name_map_S2064C2[] = {
  NSPAIR(_ZN7S2064C2C1Ev),
  NSPAIR(_ZN7S2064C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2064C4;
extern VTBL_ENTRY _ZTI7S2064C4[];
extern  VTBL_ENTRY _ZTV7S2064C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2064C3;
extern VTBL_ENTRY _ZTI7S2064C3[];
extern  VTBL_ENTRY _ZTV7S2064C3[];
static Base_Class bases_S2064C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2064C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2064C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2064C2[];
extern void _ZN7S2064C2D1Ev();
extern void _ZN7S2064C2D0Ev();
extern void _ZN7S2064C42v2Ev();
extern void _ZN7S2064C42v3Ev();
extern void _ZN7S2064C42v4Ev();
extern void _ZN7S2064C22v5Ev();
extern void ABISELECT(_ZThn40_N7S2064C2D1Ev,_ZThn28_N7S2064C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2064C2D0Ev,_ZThn28_N7S2064C2D0Ev)();
static  VTBL_ENTRY vtc_S2064C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2064C2[0]),
  (VTBL_ENTRY)&_ZN7S2064C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2064C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2064C22v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2064C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2064C2D1Ev,_ZThn28_N7S2064C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2064C2D0Ev,_ZThn28_N7S2064C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2064C2[];
extern  VTBL_ENTRY _ZTV7S2064C2[];
Class_Descriptor cd_S2064C2 = {  "S2064C2", // class name
  bases_S2064C2, 3,
  &(vtc_S2064C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2064C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2064C2),12, //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  S2064C1  : S2064C2 {
  ::S7368C9_nt s2064c1f0;
  void *s2064c1f1;
  int s2064c1f2;
  virtual  ~S2064C1(); // _ZN7S2064C1D1Ev
  virtual void  v1(); // _ZN7S2064C12v1Ev
  S2064C1(); // tgen
};
//SIG(1 S2064C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v5 Fp Fi} vd v1 FC5 Fp Fi}


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

static void Test_S2064C1()
{
  extern Class_Descriptor cd_S2064C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S2064C1, buf);
    S2064C1 *dp, &lv = *(dp=new (buf) S2064C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S2064C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2064C1)");
    check_base_class_offset(lv, (S2064C4*)(S2064C3*)(S2064C2*), 0, "S2064C1");
    check_base_class_offset(lv, (S7368C49*)(S2064C3*)(S2064C2*), ABISELECT(40,28), "S2064C1");
    check_base_class_offset(lv, (S2064C3*)(S2064C2*), 0, "S2064C1");
    check_base_class_offset(lv, (S2064C2*), 0, "S2064C1");
    check_field_offset(lv, s2064c1f0, ABISELECT(96,60), "S2064C1.s2064c1f0");
    check_field_offset(lv, s2064c1f1, ABISELECT(112,72), "S2064C1.s2064c1f1");
    check_field_offset(lv, s2064c1f2, ABISELECT(120,76), "S2064C1.s2064c1f2");
    test_class_info(&lv, &cd_S2064C1);
    dp->~S2064C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2064C1(Test_S2064C1, "S2064C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S2064C1C1Ev();
extern void _ZN7S2064C1D1Ev();
Name_Map name_map_S2064C1[] = {
  NSPAIR(_ZN7S2064C1C1Ev),
  NSPAIR(_ZN7S2064C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2064C4;
extern VTBL_ENTRY _ZTI7S2064C4[];
extern  VTBL_ENTRY _ZTV7S2064C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2064C3;
extern VTBL_ENTRY _ZTI7S2064C3[];
extern  VTBL_ENTRY _ZTV7S2064C3[];
extern Class_Descriptor cd_S2064C2;
extern VTBL_ENTRY _ZTI7S2064C2[];
extern  VTBL_ENTRY _ZTV7S2064C2[];
static Base_Class bases_S2064C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2064C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2064C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2064C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2064C1[];
extern void _ZN7S2064C1D1Ev();
extern void _ZN7S2064C1D0Ev();
extern void _ZN7S2064C42v2Ev();
extern void _ZN7S2064C42v3Ev();
extern void _ZN7S2064C42v4Ev();
extern void _ZN7S2064C22v5Ev();
extern void _ZN7S2064C12v1Ev();
extern void ABISELECT(_ZThn40_N7S2064C1D1Ev,_ZThn28_N7S2064C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2064C1D0Ev,_ZThn28_N7S2064C1D0Ev)();
static  VTBL_ENTRY vtc_S2064C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2064C1[0]),
  (VTBL_ENTRY)&_ZN7S2064C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2064C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2064C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2064C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2064C12v1Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2064C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2064C1D1Ev,_ZThn28_N7S2064C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2064C1D0Ev,_ZThn28_N7S2064C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2064C1[];
extern  VTBL_ENTRY _ZTV7S2064C1[];
Class_Descriptor cd_S2064C1 = {  "S2064C1", // class name
  bases_S2064C1, 4,
  &(vtc_S2064C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S2064C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2064C1),13, //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  S2159C4  {
  ::S7368C9_nt s2159c4f0;
  int s2159c4f1[2];
  char s2159c4f2;
  virtual  ~S2159C4(); // _ZN7S2159C4D1Ev
  virtual void  v3(); // _ZN7S2159C42v3Ev
  virtual void  v4(); // _ZN7S2159C42v4Ev
  virtual void  v5(); // _ZN7S2159C42v5Ev
  S2159C4(); // tgen
};
//SIG(-1 S2159C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2159C4 ::~S2159C4(){ note_dtor("S2159C4", this);}
void  S2159C4 ::v3(){vfunc_called(this, "_ZN7S2159C42v3Ev");}
void  S2159C4 ::v4(){vfunc_called(this, "_ZN7S2159C42v4Ev");}
void  S2159C4 ::v5(){vfunc_called(this, "_ZN7S2159C42v5Ev");}
S2159C4 ::S2159C4(){ note_ctor("S2159C4", this);} // tgen

static void Test_S2159C4()
{
  extern Class_Descriptor cd_S2159C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2159C4, buf);
    S2159C4 *dp, &lv = *(dp=new (buf) S2159C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2159C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2159C4)");
    check_field_offset(lv, s2159c4f0, ABISELECT(8,4), "S2159C4.s2159c4f0");
    check_field_offset(lv, s2159c4f1, ABISELECT(24,16), "S2159C4.s2159c4f1");
    check_field_offset(lv, s2159c4f2, ABISELECT(32,24), "S2159C4.s2159c4f2");
    test_class_info(&lv, &cd_S2159C4);
    dp->~S2159C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2159C4(Test_S2159C4, "S2159C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2159C4C1Ev();
extern void _ZN7S2159C4D1Ev();
Name_Map name_map_S2159C4[] = {
  NSPAIR(_ZN7S2159C4C1Ev),
  NSPAIR(_ZN7S2159C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2159C4[];
extern void _ZN7S2159C4D1Ev();
extern void _ZN7S2159C4D0Ev();
extern void _ZN7S2159C42v3Ev();
extern void _ZN7S2159C42v4Ev();
extern void _ZN7S2159C42v5Ev();
static  VTBL_ENTRY vtc_S2159C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2159C4[0]),
  (VTBL_ENTRY)&_ZN7S2159C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2159C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2159C4[];
extern  VTBL_ENTRY _ZTV7S2159C4[];
Class_Descriptor cd_S2159C4 = {  "S2159C4", // class name
  0,0,//no base classes
  &(vtc_S2159C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2159C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2159C4),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  S2159C3  : S2159C4 , S7368C49 {
  void *s2159c3f0;
  virtual  ~S2159C3(); // _ZN7S2159C3D1Ev
  S2159C3(); // tgen
};
//SIG(-1 S2159C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2159C3()
{
  extern Class_Descriptor cd_S2159C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2159C3, buf);
    S2159C3 *dp, &lv = *(dp=new (buf) S2159C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2159C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2159C3)");
    check_base_class_offset(lv, (S2159C4*), 0, "S2159C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2159C3");
    check_field_offset(lv, s2159c3f0, ABISELECT(72,48), "S2159C3.s2159c3f0");
    test_class_info(&lv, &cd_S2159C3);
    dp->~S2159C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2159C3(Test_S2159C3, "S2159C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2159C3C1Ev();
extern void _ZN7S2159C3D1Ev();
Name_Map name_map_S2159C3[] = {
  NSPAIR(_ZN7S2159C3C1Ev),
  NSPAIR(_ZN7S2159C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2159C4;
extern VTBL_ENTRY _ZTI7S2159C4[];
extern  VTBL_ENTRY _ZTV7S2159C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2159C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2159C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2159C3[];
extern void _ZN7S2159C3D1Ev();
extern void _ZN7S2159C3D0Ev();
extern void _ZN7S2159C42v3Ev();
extern void _ZN7S2159C42v4Ev();
extern void _ZN7S2159C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2159C3D1Ev,_ZThn28_N7S2159C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2159C3D0Ev,_ZThn28_N7S2159C3D0Ev)();
static  VTBL_ENTRY vtc_S2159C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2159C3[0]),
  (VTBL_ENTRY)&_ZN7S2159C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2159C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2159C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2159C3D1Ev,_ZThn28_N7S2159C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2159C3D0Ev,_ZThn28_N7S2159C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2159C3[];
extern  VTBL_ENTRY _ZTV7S2159C3[];
Class_Descriptor cd_S2159C3 = {  "S2159C3", // class name
  bases_S2159C3, 2,
  &(vtc_S2159C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2159C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2159C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2159C2  : S2159C3 {
  void *s2159c2f0;
  int s2159c2f1;
  virtual  ~S2159C2(); // _ZN7S2159C2D1Ev
  virtual void  v6(); // _ZN7S2159C22v6Ev
  S2159C2(); // tgen
};
//SIG(-1 S2159C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2159C2()
{
  extern Class_Descriptor cd_S2159C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2159C2, buf);
    S2159C2 *dp, &lv = *(dp=new (buf) S2159C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2159C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2159C2)");
    check_base_class_offset(lv, (S2159C4*)(S2159C3*), 0, "S2159C2");
    check_base_class_offset(lv, (S7368C49*)(S2159C3*), ABISELECT(40,28), "S2159C2");
    check_base_class_offset(lv, (S2159C3*), 0, "S2159C2");
    check_field_offset(lv, s2159c2f0, ABISELECT(80,52), "S2159C2.s2159c2f0");
    check_field_offset(lv, s2159c2f1, ABISELECT(88,56), "S2159C2.s2159c2f1");
    test_class_info(&lv, &cd_S2159C2);
    dp->~S2159C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2159C2(Test_S2159C2, "S2159C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2159C2C1Ev();
extern void _ZN7S2159C2D1Ev();
Name_Map name_map_S2159C2[] = {
  NSPAIR(_ZN7S2159C2C1Ev),
  NSPAIR(_ZN7S2159C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2159C4;
extern VTBL_ENTRY _ZTI7S2159C4[];
extern  VTBL_ENTRY _ZTV7S2159C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2159C3;
extern VTBL_ENTRY _ZTI7S2159C3[];
extern  VTBL_ENTRY _ZTV7S2159C3[];
static Base_Class bases_S2159C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2159C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2159C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2159C2[];
extern void _ZN7S2159C2D1Ev();
extern void _ZN7S2159C2D0Ev();
extern void _ZN7S2159C42v3Ev();
extern void _ZN7S2159C42v4Ev();
extern void _ZN7S2159C42v5Ev();
extern void _ZN7S2159C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2159C2D1Ev,_ZThn28_N7S2159C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2159C2D0Ev,_ZThn28_N7S2159C2D0Ev)();
static  VTBL_ENTRY vtc_S2159C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2159C2[0]),
  (VTBL_ENTRY)&_ZN7S2159C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2159C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2159C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2159C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2159C2D1Ev,_ZThn28_N7S2159C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2159C2D0Ev,_ZThn28_N7S2159C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2159C2[];
extern  VTBL_ENTRY _ZTV7S2159C2[];
Class_Descriptor cd_S2159C2 = {  "S2159C2", // class name
  bases_S2159C2, 3,
  &(vtc_S2159C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2159C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2159C2),12, //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  S2159C1  : S2159C2 {
  void *s2159c1f0;
  char s2159c1f1;
  virtual  ~S2159C1(); // _ZN7S2159C1D1Ev
  virtual void  v1(); // _ZN7S2159C12v1Ev
  virtual void  v2(); // _ZN7S2159C12v2Ev
  S2159C1(); // tgen
};
//SIG(1 S2159C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fp Fi} vd v1 v2 Fp Fc}


 S2159C1 ::~S2159C1(){ note_dtor("S2159C1", this);}
void  S2159C1 ::v1(){vfunc_called(this, "_ZN7S2159C12v1Ev");}
void  S2159C1 ::v2(){vfunc_called(this, "_ZN7S2159C12v2Ev");}
S2159C1 ::S2159C1(){ note_ctor("S2159C1", this);} // tgen

static void Test_S2159C1()
{
  extern Class_Descriptor cd_S2159C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S2159C1, buf);
    S2159C1 *dp, &lv = *(dp=new (buf) S2159C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S2159C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2159C1)");
    check_base_class_offset(lv, (S2159C4*)(S2159C3*)(S2159C2*), 0, "S2159C1");
    check_base_class_offset(lv, (S7368C49*)(S2159C3*)(S2159C2*), ABISELECT(40,28), "S2159C1");
    check_base_class_offset(lv, (S2159C3*)(S2159C2*), 0, "S2159C1");
    check_base_class_offset(lv, (S2159C2*), 0, "S2159C1");
    check_field_offset(lv, s2159c1f0, ABISELECT(96,60), "S2159C1.s2159c1f0");
    check_field_offset(lv, s2159c1f1, ABISELECT(104,64), "S2159C1.s2159c1f1");
    test_class_info(&lv, &cd_S2159C1);
    dp->~S2159C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2159C1(Test_S2159C1, "S2159C1", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S2159C1C1Ev();
extern void _ZN7S2159C1D1Ev();
Name_Map name_map_S2159C1[] = {
  NSPAIR(_ZN7S2159C1C1Ev),
  NSPAIR(_ZN7S2159C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2159C4;
extern VTBL_ENTRY _ZTI7S2159C4[];
extern  VTBL_ENTRY _ZTV7S2159C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2159C3;
extern VTBL_ENTRY _ZTI7S2159C3[];
extern  VTBL_ENTRY _ZTV7S2159C3[];
extern Class_Descriptor cd_S2159C2;
extern VTBL_ENTRY _ZTI7S2159C2[];
extern  VTBL_ENTRY _ZTV7S2159C2[];
static Base_Class bases_S2159C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2159C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2159C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2159C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2159C1[];
extern void _ZN7S2159C1D1Ev();
extern void _ZN7S2159C1D0Ev();
extern void _ZN7S2159C42v3Ev();
extern void _ZN7S2159C42v4Ev();
extern void _ZN7S2159C42v5Ev();
extern void _ZN7S2159C22v6Ev();
extern void _ZN7S2159C12v1Ev();
extern void _ZN7S2159C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2159C1D1Ev,_ZThn28_N7S2159C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2159C1D0Ev,_ZThn28_N7S2159C1D0Ev)();
static  VTBL_ENTRY vtc_S2159C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2159C1[0]),
  (VTBL_ENTRY)&_ZN7S2159C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2159C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2159C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2159C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2159C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2159C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2159C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2159C1D1Ev,_ZThn28_N7S2159C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2159C1D0Ev,_ZThn28_N7S2159C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2159C1[];
extern  VTBL_ENTRY _ZTV7S2159C1[];
Class_Descriptor cd_S2159C1 = {  "S2159C1", // class name
  bases_S2159C1, 4,
  &(vtc_S2159C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S2159C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2159C1),14, //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  S2153C4  {
  ::S7368C9_nt s2153c4f0;
  int s2153c4f1[2];
  char s2153c4f2;
  virtual  ~S2153C4(); // _ZN7S2153C4D1Ev
  virtual void  v3(); // _ZN7S2153C42v3Ev
  virtual void  v4(); // _ZN7S2153C42v4Ev
  virtual void  v5(); // _ZN7S2153C42v5Ev
  S2153C4(); // tgen
};
//SIG(-1 S2153C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2153C4 ::~S2153C4(){ note_dtor("S2153C4", this);}
void  S2153C4 ::v3(){vfunc_called(this, "_ZN7S2153C42v3Ev");}
void  S2153C4 ::v4(){vfunc_called(this, "_ZN7S2153C42v4Ev");}
void  S2153C4 ::v5(){vfunc_called(this, "_ZN7S2153C42v5Ev");}
S2153C4 ::S2153C4(){ note_ctor("S2153C4", this);} // tgen

static void Test_S2153C4()
{
  extern Class_Descriptor cd_S2153C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2153C4, buf);
    S2153C4 *dp, &lv = *(dp=new (buf) S2153C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2153C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2153C4)");
    check_field_offset(lv, s2153c4f0, ABISELECT(8,4), "S2153C4.s2153c4f0");
    check_field_offset(lv, s2153c4f1, ABISELECT(24,16), "S2153C4.s2153c4f1");
    check_field_offset(lv, s2153c4f2, ABISELECT(32,24), "S2153C4.s2153c4f2");
    test_class_info(&lv, &cd_S2153C4);
    dp->~S2153C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2153C4(Test_S2153C4, "S2153C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2153C4C1Ev();
extern void _ZN7S2153C4D1Ev();
Name_Map name_map_S2153C4[] = {
  NSPAIR(_ZN7S2153C4C1Ev),
  NSPAIR(_ZN7S2153C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2153C4[];
extern void _ZN7S2153C4D1Ev();
extern void _ZN7S2153C4D0Ev();
extern void _ZN7S2153C42v3Ev();
extern void _ZN7S2153C42v4Ev();
extern void _ZN7S2153C42v5Ev();
static  VTBL_ENTRY vtc_S2153C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2153C4[0]),
  (VTBL_ENTRY)&_ZN7S2153C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2153C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2153C4[];
extern  VTBL_ENTRY _ZTV7S2153C4[];
Class_Descriptor cd_S2153C4 = {  "S2153C4", // class name
  0,0,//no base classes
  &(vtc_S2153C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2153C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2153C4),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  S2153C3  : S2153C4 , S7368C49 {
  void *s2153c3f0;
  virtual  ~S2153C3(); // _ZN7S2153C3D1Ev
  S2153C3(); // tgen
};
//SIG(-1 S2153C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2153C3()
{
  extern Class_Descriptor cd_S2153C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2153C3, buf);
    S2153C3 *dp, &lv = *(dp=new (buf) S2153C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2153C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2153C3)");
    check_base_class_offset(lv, (S2153C4*), 0, "S2153C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2153C3");
    check_field_offset(lv, s2153c3f0, ABISELECT(72,48), "S2153C3.s2153c3f0");
    test_class_info(&lv, &cd_S2153C3);
    dp->~S2153C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2153C3(Test_S2153C3, "S2153C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2153C3C1Ev();
extern void _ZN7S2153C3D1Ev();
Name_Map name_map_S2153C3[] = {
  NSPAIR(_ZN7S2153C3C1Ev),
  NSPAIR(_ZN7S2153C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2153C4;
extern VTBL_ENTRY _ZTI7S2153C4[];
extern  VTBL_ENTRY _ZTV7S2153C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2153C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2153C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2153C3[];
extern void _ZN7S2153C3D1Ev();
extern void _ZN7S2153C3D0Ev();
extern void _ZN7S2153C42v3Ev();
extern void _ZN7S2153C42v4Ev();
extern void _ZN7S2153C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2153C3D1Ev,_ZThn28_N7S2153C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2153C3D0Ev,_ZThn28_N7S2153C3D0Ev)();
static  VTBL_ENTRY vtc_S2153C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2153C3[0]),
  (VTBL_ENTRY)&_ZN7S2153C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2153C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2153C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2153C3D1Ev,_ZThn28_N7S2153C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2153C3D0Ev,_ZThn28_N7S2153C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2153C3[];
extern  VTBL_ENTRY _ZTV7S2153C3[];
Class_Descriptor cd_S2153C3 = {  "S2153C3", // class name
  bases_S2153C3, 2,
  &(vtc_S2153C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2153C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2153C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2153C2  : S2153C3 {
  int s2153c2f0;
  virtual  ~S2153C2(); // _ZN7S2153C2D1Ev
  virtual void  v6(); // _ZN7S2153C22v6Ev
  S2153C2(); // tgen
};
//SIG(-1 S2153C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fi}


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

static void Test_S2153C2()
{
  extern Class_Descriptor cd_S2153C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2153C2, buf);
    S2153C2 *dp, &lv = *(dp=new (buf) S2153C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2153C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2153C2)");
    check_base_class_offset(lv, (S2153C4*)(S2153C3*), 0, "S2153C2");
    check_base_class_offset(lv, (S7368C49*)(S2153C3*), ABISELECT(40,28), "S2153C2");
    check_base_class_offset(lv, (S2153C3*), 0, "S2153C2");
    check_field_offset(lv, s2153c2f0, ABISELECT(80,52), "S2153C2.s2153c2f0");
    test_class_info(&lv, &cd_S2153C2);
    dp->~S2153C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2153C2(Test_S2153C2, "S2153C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2153C2C1Ev();
extern void _ZN7S2153C2D1Ev();
Name_Map name_map_S2153C2[] = {
  NSPAIR(_ZN7S2153C2C1Ev),
  NSPAIR(_ZN7S2153C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2153C4;
extern VTBL_ENTRY _ZTI7S2153C4[];
extern  VTBL_ENTRY _ZTV7S2153C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2153C3;
extern VTBL_ENTRY _ZTI7S2153C3[];
extern  VTBL_ENTRY _ZTV7S2153C3[];
static Base_Class bases_S2153C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2153C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2153C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2153C2[];
extern void _ZN7S2153C2D1Ev();
extern void _ZN7S2153C2D0Ev();
extern void _ZN7S2153C42v3Ev();
extern void _ZN7S2153C42v4Ev();
extern void _ZN7S2153C42v5Ev();
extern void _ZN7S2153C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2153C2D1Ev,_ZThn28_N7S2153C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2153C2D0Ev,_ZThn28_N7S2153C2D0Ev)();
static  VTBL_ENTRY vtc_S2153C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2153C2[0]),
  (VTBL_ENTRY)&_ZN7S2153C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2153C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2153C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2153C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2153C2D1Ev,_ZThn28_N7S2153C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2153C2D0Ev,_ZThn28_N7S2153C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2153C2[];
extern  VTBL_ENTRY _ZTV7S2153C2[];
Class_Descriptor cd_S2153C2 = {  "S2153C2", // class name
  bases_S2153C2, 3,
  &(vtc_S2153C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2153C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2153C2),12, //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  S2153C1  : S2153C2 {
  int s2153c1f0;
  void *s2153c1f1[3];
  virtual  ~S2153C1(); // _ZN7S2153C1D1Ev
  virtual void  v1(); // _ZN7S2153C12v1Ev
  virtual void  v2(); // _ZN7S2153C12v2Ev
  S2153C1(); // tgen
};
//SIG(1 S2153C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fi} vd v1 v2 Fi Fp[3]}


 S2153C1 ::~S2153C1(){ note_dtor("S2153C1", this);}
void  S2153C1 ::v1(){vfunc_called(this, "_ZN7S2153C12v1Ev");}
void  S2153C1 ::v2(){vfunc_called(this, "_ZN7S2153C12v2Ev");}
S2153C1 ::S2153C1(){ note_ctor("S2153C1", this);} // tgen

static void Test_S2153C1()
{
  extern Class_Descriptor cd_S2153C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S2153C1, buf);
    S2153C1 *dp, &lv = *(dp=new (buf) S2153C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S2153C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2153C1)");
    check_base_class_offset(lv, (S2153C4*)(S2153C3*)(S2153C2*), 0, "S2153C1");
    check_base_class_offset(lv, (S7368C49*)(S2153C3*)(S2153C2*), ABISELECT(40,28), "S2153C1");
    check_base_class_offset(lv, (S2153C3*)(S2153C2*), 0, "S2153C1");
    check_base_class_offset(lv, (S2153C2*), 0, "S2153C1");
    check_field_offset(lv, s2153c1f0, ABISELECT(84,56), "S2153C1.s2153c1f0");
    check_field_offset(lv, s2153c1f1, ABISELECT(88,60), "S2153C1.s2153c1f1");
    test_class_info(&lv, &cd_S2153C1);
    dp->~S2153C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2153C1(Test_S2153C1, "S2153C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S2153C1C1Ev();
extern void _ZN7S2153C1D1Ev();
Name_Map name_map_S2153C1[] = {
  NSPAIR(_ZN7S2153C1C1Ev),
  NSPAIR(_ZN7S2153C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2153C4;
extern VTBL_ENTRY _ZTI7S2153C4[];
extern  VTBL_ENTRY _ZTV7S2153C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2153C3;
extern VTBL_ENTRY _ZTI7S2153C3[];
extern  VTBL_ENTRY _ZTV7S2153C3[];
extern Class_Descriptor cd_S2153C2;
extern VTBL_ENTRY _ZTI7S2153C2[];
extern  VTBL_ENTRY _ZTV7S2153C2[];
static Base_Class bases_S2153C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2153C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2153C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2153C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2153C1[];
extern void _ZN7S2153C1D1Ev();
extern void _ZN7S2153C1D0Ev();
extern void _ZN7S2153C42v3Ev();
extern void _ZN7S2153C42v4Ev();
extern void _ZN7S2153C42v5Ev();
extern void _ZN7S2153C22v6Ev();
extern void _ZN7S2153C12v1Ev();
extern void _ZN7S2153C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2153C1D1Ev,_ZThn28_N7S2153C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2153C1D0Ev,_ZThn28_N7S2153C1D0Ev)();
static  VTBL_ENTRY vtc_S2153C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2153C1[0]),
  (VTBL_ENTRY)&_ZN7S2153C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2153C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2153C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2153C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2153C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2153C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2153C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2153C1D1Ev,_ZThn28_N7S2153C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2153C1D0Ev,_ZThn28_N7S2153C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2153C1[];
extern  VTBL_ENTRY _ZTV7S2153C1[];
Class_Descriptor cd_S2153C1 = {  "S2153C1", // class name
  bases_S2153C1, 4,
  &(vtc_S2153C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S2153C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2153C1),14, //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  S2154C4  {
  ::S7368C9_nt s2154c4f0;
  int s2154c4f1[2];
  char s2154c4f2;
  virtual  ~S2154C4(); // _ZN7S2154C4D1Ev
  virtual void  v3(); // _ZN7S2154C42v3Ev
  virtual void  v4(); // _ZN7S2154C42v4Ev
  virtual void  v5(); // _ZN7S2154C42v5Ev
  S2154C4(); // tgen
};
//SIG(-1 S2154C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2154C4 ::~S2154C4(){ note_dtor("S2154C4", this);}
void  S2154C4 ::v3(){vfunc_called(this, "_ZN7S2154C42v3Ev");}
void  S2154C4 ::v4(){vfunc_called(this, "_ZN7S2154C42v4Ev");}
void  S2154C4 ::v5(){vfunc_called(this, "_ZN7S2154C42v5Ev");}
S2154C4 ::S2154C4(){ note_ctor("S2154C4", this);} // tgen

static void Test_S2154C4()
{
  extern Class_Descriptor cd_S2154C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2154C4, buf);
    S2154C4 *dp, &lv = *(dp=new (buf) S2154C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2154C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2154C4)");
    check_field_offset(lv, s2154c4f0, ABISELECT(8,4), "S2154C4.s2154c4f0");
    check_field_offset(lv, s2154c4f1, ABISELECT(24,16), "S2154C4.s2154c4f1");
    check_field_offset(lv, s2154c4f2, ABISELECT(32,24), "S2154C4.s2154c4f2");
    test_class_info(&lv, &cd_S2154C4);
    dp->~S2154C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2154C4(Test_S2154C4, "S2154C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2154C4C1Ev();
extern void _ZN7S2154C4D1Ev();
Name_Map name_map_S2154C4[] = {
  NSPAIR(_ZN7S2154C4C1Ev),
  NSPAIR(_ZN7S2154C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2154C4[];
extern void _ZN7S2154C4D1Ev();
extern void _ZN7S2154C4D0Ev();
extern void _ZN7S2154C42v3Ev();
extern void _ZN7S2154C42v4Ev();
extern void _ZN7S2154C42v5Ev();
static  VTBL_ENTRY vtc_S2154C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2154C4[0]),
  (VTBL_ENTRY)&_ZN7S2154C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2154C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2154C4[];
extern  VTBL_ENTRY _ZTV7S2154C4[];
Class_Descriptor cd_S2154C4 = {  "S2154C4", // class name
  0,0,//no base classes
  &(vtc_S2154C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2154C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2154C4),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  S2154C3  : S2154C4 , S7368C49 {
  void *s2154c3f0;
  virtual  ~S2154C3(); // _ZN7S2154C3D1Ev
  S2154C3(); // tgen
};
//SIG(-1 S2154C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2154C3()
{
  extern Class_Descriptor cd_S2154C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2154C3, buf);
    S2154C3 *dp, &lv = *(dp=new (buf) S2154C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2154C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2154C3)");
    check_base_class_offset(lv, (S2154C4*), 0, "S2154C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2154C3");
    check_field_offset(lv, s2154c3f0, ABISELECT(72,48), "S2154C3.s2154c3f0");
    test_class_info(&lv, &cd_S2154C3);
    dp->~S2154C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2154C3(Test_S2154C3, "S2154C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2154C3C1Ev();
extern void _ZN7S2154C3D1Ev();
Name_Map name_map_S2154C3[] = {
  NSPAIR(_ZN7S2154C3C1Ev),
  NSPAIR(_ZN7S2154C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2154C4;
extern VTBL_ENTRY _ZTI7S2154C4[];
extern  VTBL_ENTRY _ZTV7S2154C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2154C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2154C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2154C3[];
extern void _ZN7S2154C3D1Ev();
extern void _ZN7S2154C3D0Ev();
extern void _ZN7S2154C42v3Ev();
extern void _ZN7S2154C42v4Ev();
extern void _ZN7S2154C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2154C3D1Ev,_ZThn28_N7S2154C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2154C3D0Ev,_ZThn28_N7S2154C3D0Ev)();
static  VTBL_ENTRY vtc_S2154C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2154C3[0]),
  (VTBL_ENTRY)&_ZN7S2154C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2154C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2154C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2154C3D1Ev,_ZThn28_N7S2154C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2154C3D0Ev,_ZThn28_N7S2154C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2154C3[];
extern  VTBL_ENTRY _ZTV7S2154C3[];
Class_Descriptor cd_S2154C3 = {  "S2154C3", // class name
  bases_S2154C3, 2,
  &(vtc_S2154C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2154C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2154C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2154C2  : S2154C3 {
  int s2154c2f0;
  virtual  ~S2154C2(); // _ZN7S2154C2D1Ev
  virtual void  v6(); // _ZN7S2154C22v6Ev
  S2154C2(); // tgen
};
//SIG(-1 S2154C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fi}


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

static void Test_S2154C2()
{
  extern Class_Descriptor cd_S2154C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2154C2, buf);
    S2154C2 *dp, &lv = *(dp=new (buf) S2154C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2154C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2154C2)");
    check_base_class_offset(lv, (S2154C4*)(S2154C3*), 0, "S2154C2");
    check_base_class_offset(lv, (S7368C49*)(S2154C3*), ABISELECT(40,28), "S2154C2");
    check_base_class_offset(lv, (S2154C3*), 0, "S2154C2");
    check_field_offset(lv, s2154c2f0, ABISELECT(80,52), "S2154C2.s2154c2f0");
    test_class_info(&lv, &cd_S2154C2);
    dp->~S2154C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2154C2(Test_S2154C2, "S2154C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2154C2C1Ev();
extern void _ZN7S2154C2D1Ev();
Name_Map name_map_S2154C2[] = {
  NSPAIR(_ZN7S2154C2C1Ev),
  NSPAIR(_ZN7S2154C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2154C4;
extern VTBL_ENTRY _ZTI7S2154C4[];
extern  VTBL_ENTRY _ZTV7S2154C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2154C3;
extern VTBL_ENTRY _ZTI7S2154C3[];
extern  VTBL_ENTRY _ZTV7S2154C3[];
static Base_Class bases_S2154C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2154C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2154C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2154C2[];
extern void _ZN7S2154C2D1Ev();
extern void _ZN7S2154C2D0Ev();
extern void _ZN7S2154C42v3Ev();
extern void _ZN7S2154C42v4Ev();
extern void _ZN7S2154C42v5Ev();
extern void _ZN7S2154C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2154C2D1Ev,_ZThn28_N7S2154C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2154C2D0Ev,_ZThn28_N7S2154C2D0Ev)();
static  VTBL_ENTRY vtc_S2154C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2154C2[0]),
  (VTBL_ENTRY)&_ZN7S2154C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2154C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2154C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2154C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2154C2D1Ev,_ZThn28_N7S2154C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2154C2D0Ev,_ZThn28_N7S2154C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2154C2[];
extern  VTBL_ENTRY _ZTV7S2154C2[];
Class_Descriptor cd_S2154C2 = {  "S2154C2", // class name
  bases_S2154C2, 3,
  &(vtc_S2154C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2154C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2154C2),12, //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  S2154C1  : S2154C2 {
  int s2154c1f0;
  void *s2154c1f1;
  virtual  ~S2154C1(); // _ZN7S2154C1D1Ev
  virtual void  v1(); // _ZN7S2154C12v1Ev
  virtual void  v2(); // _ZN7S2154C12v2Ev
  S2154C1(); // tgen
};
//SIG(1 S2154C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fi} vd v1 v2 Fi Fp}


 S2154C1 ::~S2154C1(){ note_dtor("S2154C1", this);}
void  S2154C1 ::v1(){vfunc_called(this, "_ZN7S2154C12v1Ev");}
void  S2154C1 ::v2(){vfunc_called(this, "_ZN7S2154C12v2Ev");}
S2154C1 ::S2154C1(){ note_ctor("S2154C1", this);} // tgen

static void Test_S2154C1()
{
  extern Class_Descriptor cd_S2154C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S2154C1, buf);
    S2154C1 *dp, &lv = *(dp=new (buf) S2154C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S2154C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2154C1)");
    check_base_class_offset(lv, (S2154C4*)(S2154C3*)(S2154C2*), 0, "S2154C1");
    check_base_class_offset(lv, (S7368C49*)(S2154C3*)(S2154C2*), ABISELECT(40,28), "S2154C1");
    check_base_class_offset(lv, (S2154C3*)(S2154C2*), 0, "S2154C1");
    check_base_class_offset(lv, (S2154C2*), 0, "S2154C1");
    check_field_offset(lv, s2154c1f0, ABISELECT(84,56), "S2154C1.s2154c1f0");
    check_field_offset(lv, s2154c1f1, ABISELECT(88,60), "S2154C1.s2154c1f1");
    test_class_info(&lv, &cd_S2154C1);
    dp->~S2154C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2154C1(Test_S2154C1, "S2154C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S2154C1C1Ev();
extern void _ZN7S2154C1D1Ev();
Name_Map name_map_S2154C1[] = {
  NSPAIR(_ZN7S2154C1C1Ev),
  NSPAIR(_ZN7S2154C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2154C4;
extern VTBL_ENTRY _ZTI7S2154C4[];
extern  VTBL_ENTRY _ZTV7S2154C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2154C3;
extern VTBL_ENTRY _ZTI7S2154C3[];
extern  VTBL_ENTRY _ZTV7S2154C3[];
extern Class_Descriptor cd_S2154C2;
extern VTBL_ENTRY _ZTI7S2154C2[];
extern  VTBL_ENTRY _ZTV7S2154C2[];
static Base_Class bases_S2154C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2154C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2154C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2154C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2154C1[];
extern void _ZN7S2154C1D1Ev();
extern void _ZN7S2154C1D0Ev();
extern void _ZN7S2154C42v3Ev();
extern void _ZN7S2154C42v4Ev();
extern void _ZN7S2154C42v5Ev();
extern void _ZN7S2154C22v6Ev();
extern void _ZN7S2154C12v1Ev();
extern void _ZN7S2154C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2154C1D1Ev,_ZThn28_N7S2154C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2154C1D0Ev,_ZThn28_N7S2154C1D0Ev)();
static  VTBL_ENTRY vtc_S2154C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2154C1[0]),
  (VTBL_ENTRY)&_ZN7S2154C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2154C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2154C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2154C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2154C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2154C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2154C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2154C1D1Ev,_ZThn28_N7S2154C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2154C1D0Ev,_ZThn28_N7S2154C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2154C1[];
extern  VTBL_ENTRY _ZTV7S2154C1[];
Class_Descriptor cd_S2154C1 = {  "S2154C1", // class name
  bases_S2154C1, 4,
  &(vtc_S2154C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S2154C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2154C1),14, //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  S2065C4  {
  ::S7368C9_nt s2065c4f0;
  int s2065c4f1[2];
  char s2065c4f2;
  virtual  ~S2065C4(); // _ZN7S2065C4D1Ev
  virtual void  v2(); // _ZN7S2065C42v2Ev
  virtual void  v3(); // _ZN7S2065C42v3Ev
  virtual void  v4(); // _ZN7S2065C42v4Ev
  S2065C4(); // tgen
};
//SIG(-1 S2065C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2065C4 ::~S2065C4(){ note_dtor("S2065C4", this);}
void  S2065C4 ::v2(){vfunc_called(this, "_ZN7S2065C42v2Ev");}
void  S2065C4 ::v3(){vfunc_called(this, "_ZN7S2065C42v3Ev");}
void  S2065C4 ::v4(){vfunc_called(this, "_ZN7S2065C42v4Ev");}
S2065C4 ::S2065C4(){ note_ctor("S2065C4", this);} // tgen

static void Test_S2065C4()
{
  extern Class_Descriptor cd_S2065C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2065C4, buf);
    S2065C4 *dp, &lv = *(dp=new (buf) S2065C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2065C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2065C4)");
    check_field_offset(lv, s2065c4f0, ABISELECT(8,4), "S2065C4.s2065c4f0");
    check_field_offset(lv, s2065c4f1, ABISELECT(24,16), "S2065C4.s2065c4f1");
    check_field_offset(lv, s2065c4f2, ABISELECT(32,24), "S2065C4.s2065c4f2");
    test_class_info(&lv, &cd_S2065C4);
    dp->~S2065C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2065C4(Test_S2065C4, "S2065C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2065C4C1Ev();
extern void _ZN7S2065C4D1Ev();
Name_Map name_map_S2065C4[] = {
  NSPAIR(_ZN7S2065C4C1Ev),
  NSPAIR(_ZN7S2065C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2065C4[];
extern void _ZN7S2065C4D1Ev();
extern void _ZN7S2065C4D0Ev();
extern void _ZN7S2065C42v2Ev();
extern void _ZN7S2065C42v3Ev();
extern void _ZN7S2065C42v4Ev();
static  VTBL_ENTRY vtc_S2065C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2065C4[0]),
  (VTBL_ENTRY)&_ZN7S2065C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2065C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2065C4[];
extern  VTBL_ENTRY _ZTV7S2065C4[];
Class_Descriptor cd_S2065C4 = {  "S2065C4", // class name
  0,0,//no base classes
  &(vtc_S2065C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2065C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2065C4),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  S2065C3  : S2065C4 , S7368C49 {
  void *s2065c3f0;
  virtual  ~S2065C3(); // _ZN7S2065C3D1Ev
  S2065C3(); // tgen
};
//SIG(-1 S2065C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2065C3()
{
  extern Class_Descriptor cd_S2065C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2065C3, buf);
    S2065C3 *dp, &lv = *(dp=new (buf) S2065C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2065C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2065C3)");
    check_base_class_offset(lv, (S2065C4*), 0, "S2065C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2065C3");
    check_field_offset(lv, s2065c3f0, ABISELECT(72,48), "S2065C3.s2065c3f0");
    test_class_info(&lv, &cd_S2065C3);
    dp->~S2065C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2065C3(Test_S2065C3, "S2065C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2065C3C1Ev();
extern void _ZN7S2065C3D1Ev();
Name_Map name_map_S2065C3[] = {
  NSPAIR(_ZN7S2065C3C1Ev),
  NSPAIR(_ZN7S2065C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2065C4;
extern VTBL_ENTRY _ZTI7S2065C4[];
extern  VTBL_ENTRY _ZTV7S2065C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2065C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2065C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2065C3[];
extern void _ZN7S2065C3D1Ev();
extern void _ZN7S2065C3D0Ev();
extern void _ZN7S2065C42v2Ev();
extern void _ZN7S2065C42v3Ev();
extern void _ZN7S2065C42v4Ev();
extern void ABISELECT(_ZThn40_N7S2065C3D1Ev,_ZThn28_N7S2065C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2065C3D0Ev,_ZThn28_N7S2065C3D0Ev)();
static  VTBL_ENTRY vtc_S2065C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2065C3[0]),
  (VTBL_ENTRY)&_ZN7S2065C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2065C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2065C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2065C3D1Ev,_ZThn28_N7S2065C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2065C3D0Ev,_ZThn28_N7S2065C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2065C3[];
extern  VTBL_ENTRY _ZTV7S2065C3[];
Class_Descriptor cd_S2065C3 = {  "S2065C3", // class name
  bases_S2065C3, 2,
  &(vtc_S2065C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2065C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2065C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2065C2  : S2065C3 {
  void *s2065c2f0;
  int s2065c2f1;
  virtual  ~S2065C2(); // _ZN7S2065C2D1Ev
  virtual void  v5(); // _ZN7S2065C22v5Ev
  S2065C2(); // tgen
};
//SIG(-1 S2065C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fp Fi}


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

static void Test_S2065C2()
{
  extern Class_Descriptor cd_S2065C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S2065C2, buf);
    S2065C2 *dp, &lv = *(dp=new (buf) S2065C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S2065C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2065C2)");
    check_base_class_offset(lv, (S2065C4*)(S2065C3*), 0, "S2065C2");
    check_base_class_offset(lv, (S7368C49*)(S2065C3*), ABISELECT(40,28), "S2065C2");
    check_base_class_offset(lv, (S2065C3*), 0, "S2065C2");
    check_field_offset(lv, s2065c2f0, ABISELECT(80,52), "S2065C2.s2065c2f0");
    check_field_offset(lv, s2065c2f1, ABISELECT(88,56), "S2065C2.s2065c2f1");
    test_class_info(&lv, &cd_S2065C2);
    dp->~S2065C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2065C2(Test_S2065C2, "S2065C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S2065C2C1Ev();
extern void _ZN7S2065C2D1Ev();
Name_Map name_map_S2065C2[] = {
  NSPAIR(_ZN7S2065C2C1Ev),
  NSPAIR(_ZN7S2065C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2065C4;
extern VTBL_ENTRY _ZTI7S2065C4[];
extern  VTBL_ENTRY _ZTV7S2065C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2065C3;
extern VTBL_ENTRY _ZTI7S2065C3[];
extern  VTBL_ENTRY _ZTV7S2065C3[];
static Base_Class bases_S2065C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2065C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2065C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2065C2[];
extern void _ZN7S2065C2D1Ev();
extern void _ZN7S2065C2D0Ev();
extern void _ZN7S2065C42v2Ev();
extern void _ZN7S2065C42v3Ev();
extern void _ZN7S2065C42v4Ev();
extern void _ZN7S2065C22v5Ev();
extern void ABISELECT(_ZThn40_N7S2065C2D1Ev,_ZThn28_N7S2065C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2065C2D0Ev,_ZThn28_N7S2065C2D0Ev)();
static  VTBL_ENTRY vtc_S2065C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2065C2[0]),
  (VTBL_ENTRY)&_ZN7S2065C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2065C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2065C22v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2065C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2065C2D1Ev,_ZThn28_N7S2065C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2065C2D0Ev,_ZThn28_N7S2065C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2065C2[];
extern  VTBL_ENTRY _ZTV7S2065C2[];
Class_Descriptor cd_S2065C2 = {  "S2065C2", // class name
  bases_S2065C2, 3,
  &(vtc_S2065C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S2065C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2065C2),12, //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  S2065C1  : S2065C2 {
  ::S7368C9_nt s2065c1f0;
  virtual  ~S2065C1(); // _ZN7S2065C1D1Ev
  virtual void  v1(); // _ZN7S2065C12v1Ev
  S2065C1(); // tgen
};
//SIG(1 S2065C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v5 Fp Fi} vd v1 FC5}


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

static void Test_S2065C1()
{
  extern Class_Descriptor cd_S2065C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S2065C1, buf);
    S2065C1 *dp, &lv = *(dp=new (buf) S2065C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S2065C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2065C1)");
    check_base_class_offset(lv, (S2065C4*)(S2065C3*)(S2065C2*), 0, "S2065C1");
    check_base_class_offset(lv, (S7368C49*)(S2065C3*)(S2065C2*), ABISELECT(40,28), "S2065C1");
    check_base_class_offset(lv, (S2065C3*)(S2065C2*), 0, "S2065C1");
    check_base_class_offset(lv, (S2065C2*), 0, "S2065C1");
    check_field_offset(lv, s2065c1f0, ABISELECT(96,60), "S2065C1.s2065c1f0");
    test_class_info(&lv, &cd_S2065C1);
    dp->~S2065C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2065C1(Test_S2065C1, "S2065C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S2065C1C1Ev();
extern void _ZN7S2065C1D1Ev();
Name_Map name_map_S2065C1[] = {
  NSPAIR(_ZN7S2065C1C1Ev),
  NSPAIR(_ZN7S2065C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2065C4;
extern VTBL_ENTRY _ZTI7S2065C4[];
extern  VTBL_ENTRY _ZTV7S2065C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2065C3;
extern VTBL_ENTRY _ZTI7S2065C3[];
extern  VTBL_ENTRY _ZTV7S2065C3[];
extern Class_Descriptor cd_S2065C2;
extern VTBL_ENTRY _ZTI7S2065C2[];
extern  VTBL_ENTRY _ZTV7S2065C2[];
static Base_Class bases_S2065C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2065C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2065C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2065C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2065C1[];
extern void _ZN7S2065C1D1Ev();
extern void _ZN7S2065C1D0Ev();
extern void _ZN7S2065C42v2Ev();
extern void _ZN7S2065C42v3Ev();
extern void _ZN7S2065C42v4Ev();
extern void _ZN7S2065C22v5Ev();
extern void _ZN7S2065C12v1Ev();
extern void ABISELECT(_ZThn40_N7S2065C1D1Ev,_ZThn28_N7S2065C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2065C1D0Ev,_ZThn28_N7S2065C1D0Ev)();
static  VTBL_ENTRY vtc_S2065C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2065C1[0]),
  (VTBL_ENTRY)&_ZN7S2065C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2065C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2065C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2065C22v5Ev,
  (VTBL_ENTRY)&_ZN7S2065C12v1Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2065C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2065C1D1Ev,_ZThn28_N7S2065C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2065C1D0Ev,_ZThn28_N7S2065C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2065C1[];
extern  VTBL_ENTRY _ZTV7S2065C1[];
Class_Descriptor cd_S2065C1 = {  "S2065C1", // class name
  bases_S2065C1, 4,
  &(vtc_S2065C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S2065C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2065C1),13, //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  S2156C4  {
  ::S7368C9_nt s2156c4f0;
  int s2156c4f1[2];
  char s2156c4f2;
  virtual  ~S2156C4(); // _ZN7S2156C4D1Ev
  virtual void  v3(); // _ZN7S2156C42v3Ev
  virtual void  v4(); // _ZN7S2156C42v4Ev
  virtual void  v5(); // _ZN7S2156C42v5Ev
  S2156C4(); // tgen
};
//SIG(-1 S2156C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2156C4 ::~S2156C4(){ note_dtor("S2156C4", this);}
void  S2156C4 ::v3(){vfunc_called(this, "_ZN7S2156C42v3Ev");}
void  S2156C4 ::v4(){vfunc_called(this, "_ZN7S2156C42v4Ev");}
void  S2156C4 ::v5(){vfunc_called(this, "_ZN7S2156C42v5Ev");}
S2156C4 ::S2156C4(){ note_ctor("S2156C4", this);} // tgen

static void Test_S2156C4()
{
  extern Class_Descriptor cd_S2156C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2156C4, buf);
    S2156C4 *dp, &lv = *(dp=new (buf) S2156C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2156C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2156C4)");
    check_field_offset(lv, s2156c4f0, ABISELECT(8,4), "S2156C4.s2156c4f0");
    check_field_offset(lv, s2156c4f1, ABISELECT(24,16), "S2156C4.s2156c4f1");
    check_field_offset(lv, s2156c4f2, ABISELECT(32,24), "S2156C4.s2156c4f2");
    test_class_info(&lv, &cd_S2156C4);
    dp->~S2156C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2156C4(Test_S2156C4, "S2156C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2156C4C1Ev();
extern void _ZN7S2156C4D1Ev();
Name_Map name_map_S2156C4[] = {
  NSPAIR(_ZN7S2156C4C1Ev),
  NSPAIR(_ZN7S2156C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2156C4[];
extern void _ZN7S2156C4D1Ev();
extern void _ZN7S2156C4D0Ev();
extern void _ZN7S2156C42v3Ev();
extern void _ZN7S2156C42v4Ev();
extern void _ZN7S2156C42v5Ev();
static  VTBL_ENTRY vtc_S2156C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2156C4[0]),
  (VTBL_ENTRY)&_ZN7S2156C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2156C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2156C4[];
extern  VTBL_ENTRY _ZTV7S2156C4[];
Class_Descriptor cd_S2156C4 = {  "S2156C4", // class name
  0,0,//no base classes
  &(vtc_S2156C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2156C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2156C4),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  S2156C3  : S2156C4 , S7368C49 {
  void *s2156c3f0;
  virtual  ~S2156C3(); // _ZN7S2156C3D1Ev
  S2156C3(); // tgen
};
//SIG(-1 S2156C3) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S2156C3()
{
  extern Class_Descriptor cd_S2156C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S2156C3, buf);
    S2156C3 *dp, &lv = *(dp=new (buf) S2156C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S2156C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2156C3)");
    check_base_class_offset(lv, (S2156C4*), 0, "S2156C3");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S2156C3");
    check_field_offset(lv, s2156c3f0, ABISELECT(72,48), "S2156C3.s2156c3f0");
    test_class_info(&lv, &cd_S2156C3);
    dp->~S2156C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2156C3(Test_S2156C3, "S2156C3", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S2156C3C1Ev();
extern void _ZN7S2156C3D1Ev();
Name_Map name_map_S2156C3[] = {
  NSPAIR(_ZN7S2156C3C1Ev),
  NSPAIR(_ZN7S2156C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2156C4;
extern VTBL_ENTRY _ZTI7S2156C4[];
extern  VTBL_ENTRY _ZTV7S2156C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S2156C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2156C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2156C3[];
extern void _ZN7S2156C3D1Ev();
extern void _ZN7S2156C3D0Ev();
extern void _ZN7S2156C42v3Ev();
extern void _ZN7S2156C42v4Ev();
extern void _ZN7S2156C42v5Ev();
extern void ABISELECT(_ZThn40_N7S2156C3D1Ev,_ZThn28_N7S2156C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2156C3D0Ev,_ZThn28_N7S2156C3D0Ev)();
static  VTBL_ENTRY vtc_S2156C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2156C3[0]),
  (VTBL_ENTRY)&_ZN7S2156C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2156C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2156C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2156C3D1Ev,_ZThn28_N7S2156C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2156C3D0Ev,_ZThn28_N7S2156C3D0Ev),
};
extern VTBL_ENTRY _ZTI7S2156C3[];
extern  VTBL_ENTRY _ZTV7S2156C3[];
Class_Descriptor cd_S2156C3 = {  "S2156C3", // class name
  bases_S2156C3, 2,
  &(vtc_S2156C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S2156C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2156C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2156C2  : S2156C3 {
  int s2156c2f0;
  virtual  ~S2156C2(); // _ZN7S2156C2D1Ev
  virtual void  v6(); // _ZN7S2156C22v6Ev
  S2156C2(); // tgen
};
//SIG(-1 S2156C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 Fi}


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

static void Test_S2156C2()
{
  extern Class_Descriptor cd_S2156C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2156C2, buf);
    S2156C2 *dp, &lv = *(dp=new (buf) S2156C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2156C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2156C2)");
    check_base_class_offset(lv, (S2156C4*)(S2156C3*), 0, "S2156C2");
    check_base_class_offset(lv, (S7368C49*)(S2156C3*), ABISELECT(40,28), "S2156C2");
    check_base_class_offset(lv, (S2156C3*), 0, "S2156C2");
    check_field_offset(lv, s2156c2f0, ABISELECT(80,52), "S2156C2.s2156c2f0");
    test_class_info(&lv, &cd_S2156C2);
    dp->~S2156C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2156C2(Test_S2156C2, "S2156C2", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2156C2C1Ev();
extern void _ZN7S2156C2D1Ev();
Name_Map name_map_S2156C2[] = {
  NSPAIR(_ZN7S2156C2C1Ev),
  NSPAIR(_ZN7S2156C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2156C4;
extern VTBL_ENTRY _ZTI7S2156C4[];
extern  VTBL_ENTRY _ZTV7S2156C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2156C3;
extern VTBL_ENTRY _ZTI7S2156C3[];
extern  VTBL_ENTRY _ZTV7S2156C3[];
static Base_Class bases_S2156C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2156C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2156C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2156C2[];
extern void _ZN7S2156C2D1Ev();
extern void _ZN7S2156C2D0Ev();
extern void _ZN7S2156C42v3Ev();
extern void _ZN7S2156C42v4Ev();
extern void _ZN7S2156C42v5Ev();
extern void _ZN7S2156C22v6Ev();
extern void ABISELECT(_ZThn40_N7S2156C2D1Ev,_ZThn28_N7S2156C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2156C2D0Ev,_ZThn28_N7S2156C2D0Ev)();
static  VTBL_ENTRY vtc_S2156C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2156C2[0]),
  (VTBL_ENTRY)&_ZN7S2156C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2156C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2156C22v6Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2156C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2156C2D1Ev,_ZThn28_N7S2156C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2156C2D0Ev,_ZThn28_N7S2156C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S2156C2[];
extern  VTBL_ENTRY _ZTV7S2156C2[];
Class_Descriptor cd_S2156C2 = {  "S2156C2", // class name
  bases_S2156C2, 3,
  &(vtc_S2156C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2156C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2156C2),12, //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  S2156C1  : S2156C2 {
  int s2156c1f0;
  virtual  ~S2156C1(); // _ZN7S2156C1D1Ev
  virtual void  v1(); // _ZN7S2156C12v1Ev
  virtual void  v2(); // _ZN7S2156C12v2Ev
  S2156C1(); // tgen
};
//SIG(1 S2156C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd m FC8{ m Fp Fi[2] FC9{ m}}} vd Fp} vd v6 Fi} vd v1 v2 Fi}


 S2156C1 ::~S2156C1(){ note_dtor("S2156C1", this);}
void  S2156C1 ::v1(){vfunc_called(this, "_ZN7S2156C12v1Ev");}
void  S2156C1 ::v2(){vfunc_called(this, "_ZN7S2156C12v2Ev");}
S2156C1 ::S2156C1(){ note_ctor("S2156C1", this);} // tgen

static void Test_S2156C1()
{
  extern Class_Descriptor cd_S2156C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S2156C1, buf);
    S2156C1 *dp, &lv = *(dp=new (buf) S2156C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S2156C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2156C1)");
    check_base_class_offset(lv, (S2156C4*)(S2156C3*)(S2156C2*), 0, "S2156C1");
    check_base_class_offset(lv, (S7368C49*)(S2156C3*)(S2156C2*), ABISELECT(40,28), "S2156C1");
    check_base_class_offset(lv, (S2156C3*)(S2156C2*), 0, "S2156C1");
    check_base_class_offset(lv, (S2156C2*), 0, "S2156C1");
    check_field_offset(lv, s2156c1f0, ABISELECT(84,56), "S2156C1.s2156c1f0");
    test_class_info(&lv, &cd_S2156C1);
    dp->~S2156C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2156C1(Test_S2156C1, "S2156C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S2156C1C1Ev();
extern void _ZN7S2156C1D1Ev();
Name_Map name_map_S2156C1[] = {
  NSPAIR(_ZN7S2156C1C1Ev),
  NSPAIR(_ZN7S2156C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2156C4;
extern VTBL_ENTRY _ZTI7S2156C4[];
extern  VTBL_ENTRY _ZTV7S2156C4[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S2156C3;
extern VTBL_ENTRY _ZTI7S2156C3[];
extern  VTBL_ENTRY _ZTV7S2156C3[];
extern Class_Descriptor cd_S2156C2;
extern VTBL_ENTRY _ZTI7S2156C2[];
extern  VTBL_ENTRY _ZTV7S2156C2[];
static Base_Class bases_S2156C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2156C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2156C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2156C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2156C1[];
extern void _ZN7S2156C1D1Ev();
extern void _ZN7S2156C1D0Ev();
extern void _ZN7S2156C42v3Ev();
extern void _ZN7S2156C42v4Ev();
extern void _ZN7S2156C42v5Ev();
extern void _ZN7S2156C22v6Ev();
extern void _ZN7S2156C12v1Ev();
extern void _ZN7S2156C12v2Ev();
extern void ABISELECT(_ZThn40_N7S2156C1D1Ev,_ZThn28_N7S2156C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2156C1D0Ev,_ZThn28_N7S2156C1D0Ev)();
static  VTBL_ENTRY vtc_S2156C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2156C1[0]),
  (VTBL_ENTRY)&_ZN7S2156C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2156C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2156C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2156C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2156C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2156C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2156C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2156C1D1Ev,_ZThn28_N7S2156C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2156C1D0Ev,_ZThn28_N7S2156C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S2156C1[];
extern  VTBL_ENTRY _ZTV7S2156C1[];
Class_Descriptor cd_S2156C1 = {  "S2156C1", // class name
  bases_S2156C1, 4,
  &(vtc_S2156C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S2156C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2156C1),14, //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  S4717C3  {
  ::S7368C9_nt s4717c3f0;
  int s4717c3f1[2];
  char s4717c3f2;
  virtual  ~S4717C3(); // _ZN7S4717C3D1Ev
  virtual void  v3(); // _ZN7S4717C32v3Ev
  virtual void  v4(); // _ZN7S4717C32v4Ev
  virtual void  v5(); // _ZN7S4717C32v5Ev
  S4717C3(); // tgen
};
//SIG(-1 S4717C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4717C3 ::~S4717C3(){ note_dtor("S4717C3", this);}
void  S4717C3 ::v3(){vfunc_called(this, "_ZN7S4717C32v3Ev");}
void  S4717C3 ::v4(){vfunc_called(this, "_ZN7S4717C32v4Ev");}
void  S4717C3 ::v5(){vfunc_called(this, "_ZN7S4717C32v5Ev");}
S4717C3 ::S4717C3(){ note_ctor("S4717C3", this);} // tgen

static void Test_S4717C3()
{
  extern Class_Descriptor cd_S4717C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4717C3, buf);
    S4717C3 *dp, &lv = *(dp=new (buf) S4717C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4717C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4717C3)");
    check_field_offset(lv, s4717c3f0, ABISELECT(8,4), "S4717C3.s4717c3f0");
    check_field_offset(lv, s4717c3f1, ABISELECT(24,16), "S4717C3.s4717c3f1");
    check_field_offset(lv, s4717c3f2, ABISELECT(32,24), "S4717C3.s4717c3f2");
    test_class_info(&lv, &cd_S4717C3);
    dp->~S4717C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4717C3(Test_S4717C3, "S4717C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4717C3C1Ev();
extern void _ZN7S4717C3D1Ev();
Name_Map name_map_S4717C3[] = {
  NSPAIR(_ZN7S4717C3C1Ev),
  NSPAIR(_ZN7S4717C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4717C3[];
extern void _ZN7S4717C3D1Ev();
extern void _ZN7S4717C3D0Ev();
extern void _ZN7S4717C32v3Ev();
extern void _ZN7S4717C32v4Ev();
extern void _ZN7S4717C32v5Ev();
static  VTBL_ENTRY vtc_S4717C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4717C3[0]),
  (VTBL_ENTRY)&_ZN7S4717C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4717C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4717C3[];
extern  VTBL_ENTRY _ZTV7S4717C3[];
Class_Descriptor cd_S4717C3 = {  "S4717C3", // class name
  0,0,//no base classes
  &(vtc_S4717C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4717C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4717C3),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  S4717C2  : S4717C3 , S7368C49 {
  void *s4717c2f0;
  virtual  ~S4717C2(); // _ZN7S4717C2D1Ev
  S4717C2(); // tgen
};
//SIG(-1 S4717C2) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S4717C2()
{
  extern Class_Descriptor cd_S4717C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4717C2, buf);
    S4717C2 *dp, &lv = *(dp=new (buf) S4717C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4717C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4717C2)");
    check_base_class_offset(lv, (S4717C3*), 0, "S4717C2");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S4717C2");
    check_field_offset(lv, s4717c2f0, ABISELECT(72,48), "S4717C2.s4717c2f0");
    test_class_info(&lv, &cd_S4717C2);
    dp->~S4717C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4717C2(Test_S4717C2, "S4717C2", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4717C2C1Ev();
extern void _ZN7S4717C2D1Ev();
Name_Map name_map_S4717C2[] = {
  NSPAIR(_ZN7S4717C2C1Ev),
  NSPAIR(_ZN7S4717C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4717C3;
extern VTBL_ENTRY _ZTI7S4717C3[];
extern  VTBL_ENTRY _ZTV7S4717C3[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S4717C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4717C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4717C2[];
extern void _ZN7S4717C2D1Ev();
extern void _ZN7S4717C2D0Ev();
extern void _ZN7S4717C32v3Ev();
extern void _ZN7S4717C32v4Ev();
extern void _ZN7S4717C32v5Ev();
extern void ABISELECT(_ZThn40_N7S4717C2D1Ev,_ZThn28_N7S4717C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S4717C2D0Ev,_ZThn28_N7S4717C2D0Ev)();
static  VTBL_ENTRY vtc_S4717C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4717C2[0]),
  (VTBL_ENTRY)&_ZN7S4717C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4717C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S4717C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4717C2D1Ev,_ZThn28_N7S4717C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4717C2D0Ev,_ZThn28_N7S4717C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S4717C2[];
extern  VTBL_ENTRY _ZTV7S4717C2[];
Class_Descriptor cd_S4717C2 = {  "S4717C2", // class name
  bases_S4717C2, 2,
  &(vtc_S4717C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4717C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4717C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4717C1  : S4717C2 {
  int s4717c1f0;
  void *s4717c1f1[6];
  ::S7368C78 s4717c1f2;
  virtual  ~S4717C1(); // _ZN7S4717C1D1Ev
  virtual void  v1(); // _ZN7S4717C12v1Ev
  virtual void  v2(); // _ZN7S4717C12v2Ev
  S4717C1(); // tgen
};
//SIG(1 S4717C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 v2 Fi Fp[6] FC9{ m}}


 S4717C1 ::~S4717C1(){ note_dtor("S4717C1", this);}
void  S4717C1 ::v1(){vfunc_called(this, "_ZN7S4717C12v1Ev");}
void  S4717C1 ::v2(){vfunc_called(this, "_ZN7S4717C12v2Ev");}
S4717C1 ::S4717C1(){ note_ctor("S4717C1", this);} // tgen

static void Test_S4717C1()
{
  extern Class_Descriptor cd_S4717C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S4717C1, buf);
    S4717C1 *dp, &lv = *(dp=new (buf) S4717C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S4717C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4717C1)");
    check_base_class_offset(lv, (S4717C3*)(S4717C2*), 0, "S4717C1");
    check_base_class_offset(lv, (S7368C49*)(S4717C2*), ABISELECT(40,28), "S4717C1");
    check_base_class_offset(lv, (S4717C2*), 0, "S4717C1");
    check_field_offset(lv, s4717c1f0, ABISELECT(80,52), "S4717C1.s4717c1f0");
    check_field_offset(lv, s4717c1f1, ABISELECT(88,56), "S4717C1.s4717c1f1");
    check_field_offset(lv, s4717c1f2, ABISELECT(136,80), "S4717C1.s4717c1f2");
    test_class_info(&lv, &cd_S4717C1);
    dp->~S4717C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4717C1(Test_S4717C1, "S4717C1", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S4717C1C1Ev();
extern void _ZN7S4717C1D1Ev();
Name_Map name_map_S4717C1[] = {
  NSPAIR(_ZN7S4717C1C1Ev),
  NSPAIR(_ZN7S4717C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4717C3;
extern VTBL_ENTRY _ZTI7S4717C3[];
extern  VTBL_ENTRY _ZTV7S4717C3[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S4717C2;
extern VTBL_ENTRY _ZTI7S4717C2[];
extern  VTBL_ENTRY _ZTV7S4717C2[];
static Base_Class bases_S4717C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4717C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4717C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4717C1[];
extern void _ZN7S4717C1D1Ev();
extern void _ZN7S4717C1D0Ev();
extern void _ZN7S4717C32v3Ev();
extern void _ZN7S4717C32v4Ev();
extern void _ZN7S4717C32v5Ev();
extern void _ZN7S4717C12v1Ev();
extern void _ZN7S4717C12v2Ev();
extern void ABISELECT(_ZThn40_N7S4717C1D1Ev,_ZThn28_N7S4717C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S4717C1D0Ev,_ZThn28_N7S4717C1D0Ev)();
static  VTBL_ENTRY vtc_S4717C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4717C1[0]),
  (VTBL_ENTRY)&_ZN7S4717C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4717C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4717C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4717C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4717C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S4717C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4717C1D1Ev,_ZThn28_N7S4717C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4717C1D0Ev,_ZThn28_N7S4717C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S4717C1[];
extern  VTBL_ENTRY _ZTV7S4717C1[];
Class_Descriptor cd_S4717C1 = {  "S4717C1", // class name
  bases_S4717C1, 3,
  &(vtc_S4717C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S4717C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4717C1),13, //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  S4718C3  {
  ::S7368C9_nt s4718c3f0;
  int s4718c3f1[2];
  char s4718c3f2;
  virtual  ~S4718C3(); // _ZN7S4718C3D1Ev
  virtual void  v3(); // _ZN7S4718C32v3Ev
  virtual void  v4(); // _ZN7S4718C32v4Ev
  virtual void  v5(); // _ZN7S4718C32v5Ev
  S4718C3(); // tgen
};
//SIG(-1 S4718C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4718C3 ::~S4718C3(){ note_dtor("S4718C3", this);}
void  S4718C3 ::v3(){vfunc_called(this, "_ZN7S4718C32v3Ev");}
void  S4718C3 ::v4(){vfunc_called(this, "_ZN7S4718C32v4Ev");}
void  S4718C3 ::v5(){vfunc_called(this, "_ZN7S4718C32v5Ev");}
S4718C3 ::S4718C3(){ note_ctor("S4718C3", this);} // tgen

static void Test_S4718C3()
{
  extern Class_Descriptor cd_S4718C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4718C3, buf);
    S4718C3 *dp, &lv = *(dp=new (buf) S4718C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4718C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4718C3)");
    check_field_offset(lv, s4718c3f0, ABISELECT(8,4), "S4718C3.s4718c3f0");
    check_field_offset(lv, s4718c3f1, ABISELECT(24,16), "S4718C3.s4718c3f1");
    check_field_offset(lv, s4718c3f2, ABISELECT(32,24), "S4718C3.s4718c3f2");
    test_class_info(&lv, &cd_S4718C3);
    dp->~S4718C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4718C3(Test_S4718C3, "S4718C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4718C3C1Ev();
extern void _ZN7S4718C3D1Ev();
Name_Map name_map_S4718C3[] = {
  NSPAIR(_ZN7S4718C3C1Ev),
  NSPAIR(_ZN7S4718C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4718C3[];
extern void _ZN7S4718C3D1Ev();
extern void _ZN7S4718C3D0Ev();
extern void _ZN7S4718C32v3Ev();
extern void _ZN7S4718C32v4Ev();
extern void _ZN7S4718C32v5Ev();
static  VTBL_ENTRY vtc_S4718C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4718C3[0]),
  (VTBL_ENTRY)&_ZN7S4718C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4718C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4718C3[];
extern  VTBL_ENTRY _ZTV7S4718C3[];
Class_Descriptor cd_S4718C3 = {  "S4718C3", // class name
  0,0,//no base classes
  &(vtc_S4718C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4718C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4718C3),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  S4718C2  : S4718C3 , S7368C49 {
  void *s4718c2f0;
  virtual  ~S4718C2(); // _ZN7S4718C2D1Ev
  S4718C2(); // tgen
};
//SIG(-1 S4718C2) C1{ BC2{ vd v1 v2 v3 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd m FC6{ m Fp Fi[2] FC7{ m}}} vd Fp}


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

static void Test_S4718C2()
{
  extern Class_Descriptor cd_S4718C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4718C2, buf);
    S4718C2 *dp, &lv = *(dp=new (buf) S4718C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4718C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4718C2)");
    check_base_class_offset(lv, (S4718C3*), 0, "S4718C2");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(40,28), "S4718C2");
    check_field_offset(lv, s4718c2f0, ABISELECT(72,48), "S4718C2.s4718c2f0");
    test_class_info(&lv, &cd_S4718C2);
    dp->~S4718C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4718C2(Test_S4718C2, "S4718C2", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4718C2C1Ev();
extern void _ZN7S4718C2D1Ev();
Name_Map name_map_S4718C2[] = {
  NSPAIR(_ZN7S4718C2C1Ev),
  NSPAIR(_ZN7S4718C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4718C3;
extern VTBL_ENTRY _ZTI7S4718C3[];
extern  VTBL_ENTRY _ZTV7S4718C3[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S4718C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4718C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(40,28), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4718C2[];
extern void _ZN7S4718C2D1Ev();
extern void _ZN7S4718C2D0Ev();
extern void _ZN7S4718C32v3Ev();
extern void _ZN7S4718C32v4Ev();
extern void _ZN7S4718C32v5Ev();
extern void ABISELECT(_ZThn40_N7S4718C2D1Ev,_ZThn28_N7S4718C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S4718C2D0Ev,_ZThn28_N7S4718C2D0Ev)();
static  VTBL_ENTRY vtc_S4718C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4718C2[0]),
  (VTBL_ENTRY)&_ZN7S4718C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4718C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v5Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S4718C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4718C2D1Ev,_ZThn28_N7S4718C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4718C2D0Ev,_ZThn28_N7S4718C2D0Ev),
};
extern VTBL_ENTRY _ZTI7S4718C2[];
extern  VTBL_ENTRY _ZTV7S4718C2[];
Class_Descriptor cd_S4718C2 = {  "S4718C2", // class name
  bases_S4718C2, 2,
  &(vtc_S4718C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4718C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4718C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4718C1  : S4718C2 {
  void *s4718c1f0[4];
  ::S7368C78 s4718c1f1;
  virtual  ~S4718C1(); // _ZN7S4718C1D1Ev
  virtual void  v1(); // _ZN7S4718C12v1Ev
  virtual void  v2(); // _ZN7S4718C12v2Ev
  S4718C1(); // tgen
};
//SIG(1 S4718C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd m FC7{ m Fp Fi[2] FC8{ m}}} vd Fp} vd v1 v2 Fp[4] FC9{ m}}


 S4718C1 ::~S4718C1(){ note_dtor("S4718C1", this);}
void  S4718C1 ::v1(){vfunc_called(this, "_ZN7S4718C12v1Ev");}
void  S4718C1 ::v2(){vfunc_called(this, "_ZN7S4718C12v2Ev");}
S4718C1 ::S4718C1(){ note_ctor("S4718C1", this);} // tgen

static void Test_S4718C1()
{
  extern Class_Descriptor cd_S4718C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S4718C1, buf);
    S4718C1 *dp, &lv = *(dp=new (buf) S4718C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S4718C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4718C1)");
    check_base_class_offset(lv, (S4718C3*)(S4718C2*), 0, "S4718C1");
    check_base_class_offset(lv, (S7368C49*)(S4718C2*), ABISELECT(40,28), "S4718C1");
    check_base_class_offset(lv, (S4718C2*), 0, "S4718C1");
    check_field_offset(lv, s4718c1f0, ABISELECT(80,52), "S4718C1.s4718c1f0");
    check_field_offset(lv, s4718c1f1, ABISELECT(112,68), "S4718C1.s4718c1f1");
    test_class_info(&lv, &cd_S4718C1);
    dp->~S4718C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4718C1(Test_S4718C1, "S4718C1", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S4718C1C1Ev();
extern void _ZN7S4718C1D1Ev();
Name_Map name_map_S4718C1[] = {
  NSPAIR(_ZN7S4718C1C1Ev),
  NSPAIR(_ZN7S4718C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4718C3;
extern VTBL_ENTRY _ZTI7S4718C3[];
extern  VTBL_ENTRY _ZTV7S4718C3[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S4718C2;
extern VTBL_ENTRY _ZTI7S4718C2[];
extern  VTBL_ENTRY _ZTV7S4718C2[];
static Base_Class bases_S4718C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4718C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7368C49,    ABISELECT(40,28), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4718C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4718C1[];
extern void _ZN7S4718C1D1Ev();
extern void _ZN7S4718C1D0Ev();
extern void _ZN7S4718C32v3Ev();
extern void _ZN7S4718C32v4Ev();
extern void _ZN7S4718C32v5Ev();
extern void _ZN7S4718C12v1Ev();
extern void _ZN7S4718C12v2Ev();
extern void ABISELECT(_ZThn40_N7S4718C1D1Ev,_ZThn28_N7S4718C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S4718C1D0Ev,_ZThn28_N7S4718C1D0Ev)();
static  VTBL_ENTRY vtc_S4718C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4718C1[0]),
  (VTBL_ENTRY)&_ZN7S4718C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4718C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4718C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4718C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4718C12v2Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S4718C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4718C1D1Ev,_ZThn28_N7S4718C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S4718C1D0Ev,_ZThn28_N7S4718C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S4718C1[];
extern  VTBL_ENTRY _ZTV7S4718C1[];
Class_Descriptor cd_S4718C1 = {  "S4718C1", // class name
  bases_S4718C1, 3,
  &(vtc_S4718C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S4718C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4718C1),13, //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  S17902C1  {
  void *s17902c1f0[2];
  ::S4469C11 s17902c1f1;
  void  mf17902c1(); // _ZN8S17902C19mf17902c1Ev
};
//SIG(1 S17902C1) C1{ m Fp[2] FC2{ FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{ vd m FL Fc} FC6} FC7{ m FC5 FC5} FC8{ m Fp Fi FC9{ m} FC10{ m}} FC3 FC3}}


void  S17902C1 ::mf17902c1(){}

static void Test_S17902C1()
{
  {
    init_simple_test("S17902C1");
    S17902C1 lv;
    check2(sizeof(lv), ABISELECT(224,152), "sizeof(S17902C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17902C1)");
    check_field_offset(lv, s17902c1f0, 0, "S17902C1.s17902c1f0");
    check_field_offset(lv, s17902c1f1, ABISELECT(16,8), "S17902C1.s17902c1f1");
  }
}
static Arrange_To_Call_Me vS17902C1(Test_S17902C1, "S17902C1", ABISELECT(224,152));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3651C2  : S7368C49 {
  void *s3651c2f0;
  ::S487C6_nt s3651c2f1;
  void *s3651c2f2;
  char s3651c2f3;
  virtual  ~S3651C2(); // _ZN7S3651C2D1Ev
  virtual void  v2(); // _ZN7S3651C22v2Ev
  virtual void  v3(); // _ZN7S3651C22v3Ev
  virtual void  v4(); // _ZN7S3651C22v4Ev
  virtual void  v5(); // _ZN7S3651C22v5Ev
  virtual void  v6(); // _ZN7S3651C22v6Ev
  S3651C2(); // tgen
};
//SIG(-1 S3651C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp Fc}


 S3651C2 ::~S3651C2(){ note_dtor("S3651C2", this);}
void  S3651C2 ::v2(){vfunc_called(this, "_ZN7S3651C22v2Ev");}
void  S3651C2 ::v3(){vfunc_called(this, "_ZN7S3651C22v3Ev");}
void  S3651C2 ::v4(){vfunc_called(this, "_ZN7S3651C22v4Ev");}
void  S3651C2 ::v5(){vfunc_called(this, "_ZN7S3651C22v5Ev");}
void  S3651C2 ::v6(){vfunc_called(this, "_ZN7S3651C22v6Ev");}
S3651C2 ::S3651C2(){ note_ctor("S3651C2", this);} // tgen

static void Test_S3651C2()
{
  extern Class_Descriptor cd_S3651C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3651C2, buf);
    S3651C2 *dp, &lv = *(dp=new (buf) S3651C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3651C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3651C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3651C2");
    check_field_offset(lv, s3651c2f0, ABISELECT(32,20), "S3651C2.s3651c2f0");
    check_field_offset(lv, s3651c2f1, ABISELECT(40,24), "S3651C2.s3651c2f1");
    check_field_offset(lv, s3651c2f2, ABISELECT(64,40), "S3651C2.s3651c2f2");
    check_field_offset(lv, s3651c2f3, ABISELECT(72,44), "S3651C2.s3651c2f3");
    test_class_info(&lv, &cd_S3651C2);
    dp->~S3651C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3651C2(Test_S3651C2, "S3651C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3651C2C1Ev();
extern void _ZN7S3651C2D1Ev();
Name_Map name_map_S3651C2[] = {
  NSPAIR(_ZN7S3651C2C1Ev),
  NSPAIR(_ZN7S3651C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3651C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3651C2[];
extern void _ZN7S3651C2D1Ev();
extern void _ZN7S3651C2D0Ev();
extern void _ZN7S3651C22v2Ev();
extern void _ZN7S3651C22v3Ev();
extern void _ZN7S3651C22v4Ev();
extern void _ZN7S3651C22v5Ev();
extern void _ZN7S3651C22v6Ev();
static  VTBL_ENTRY vtc_S3651C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3651C2[0]),
  (VTBL_ENTRY)&_ZN7S3651C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3651C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S3651C2[];
extern  VTBL_ENTRY _ZTV7S3651C2[];
Class_Descriptor cd_S3651C2 = {  "S3651C2", // class name
  bases_S3651C2, 1,
  &(vtc_S3651C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3651C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3651C2),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  S3651C1  : S3651C2 {
  virtual  ~S3651C1(); // _ZN7S3651C1D1Ev
  virtual void  v1(); // _ZN7S3651C12v1Ev
  S3651C1(); // tgen
};
//SIG(1 S3651C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v2 v3 v4 v5 v6 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp Fc} vd v1}


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

static void Test_S3651C1()
{
  extern Class_Descriptor cd_S3651C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3651C1, buf);
    S3651C1 *dp, &lv = *(dp=new (buf) S3651C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3651C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3651C1)");
    check_base_class_offset(lv, (S7368C49*)(S3651C2*), 0, "S3651C1");
    check_base_class_offset(lv, (S3651C2*), 0, "S3651C1");
    test_class_info(&lv, &cd_S3651C1);
    dp->~S3651C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3651C1(Test_S3651C1, "S3651C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3651C1C1Ev();
extern void _ZN7S3651C1D1Ev();
Name_Map name_map_S3651C1[] = {
  NSPAIR(_ZN7S3651C1C1Ev),
  NSPAIR(_ZN7S3651C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3651C2;
extern VTBL_ENTRY _ZTI7S3651C2[];
extern  VTBL_ENTRY _ZTV7S3651C2[];
static Base_Class bases_S3651C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3651C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3651C1[];
extern void _ZN7S3651C1D1Ev();
extern void _ZN7S3651C1D0Ev();
extern void _ZN7S3651C22v2Ev();
extern void _ZN7S3651C22v3Ev();
extern void _ZN7S3651C22v4Ev();
extern void _ZN7S3651C22v5Ev();
extern void _ZN7S3651C22v6Ev();
extern void _ZN7S3651C12v1Ev();
static  VTBL_ENTRY vtc_S3651C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3651C1[0]),
  (VTBL_ENTRY)&_ZN7S3651C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3651C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3651C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3651C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3651C1[];
extern  VTBL_ENTRY _ZTV7S3651C1[];
Class_Descriptor cd_S3651C1 = {  "S3651C1", // class name
  bases_S3651C1, 2,
  &(vtc_S3651C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3651C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3651C1),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  S15649C9  {
  ::S7368C78 s15649c9f0;
  int s15649c9f1;
  void  mf15649c9(); // _ZN8S15649C99mf15649c9Ev
};
//SIG(-1 S15649C9) C1{ m FC2{ m} Fi}


void  S15649C9 ::mf15649c9(){}

static void Test_S15649C9()
{
  {
    init_simple_test("S15649C9");
    S15649C9 lv;
    check2(sizeof(lv), 8, "sizeof(S15649C9)");
    check2(__alignof__(lv), 4, "__alignof__(S15649C9)");
    check_field_offset(lv, s15649c9f0, 0, "S15649C9.s15649c9f0");
    check_field_offset(lv, s15649c9f1, 4, "S15649C9.s15649c9f1");
  }
}
static Arrange_To_Call_Me vS15649C9(Test_S15649C9, "S15649C9", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15649C1  {
  ::S6060C20 s15649c1f0;
  void *s15649c1f1;
  int s15649c1f2[2];
  ::S15649C9 s15649c1f3;
  void  mf15649c1(); // _ZN8S15649C19mf15649c1Ev
};
//SIG(1 S15649C1) C1{ m FC2{ m FC3{ BC4{ m Fp Fi[2]}} FC5{ BC4} FC5 Fi[2] FC6{ BC4} FC3 FC6} Fp Fi[2] FC7{ m FC8{ m} Fi}}


void  S15649C1 ::mf15649c1(){}

static void Test_S15649C1()
{
  {
    init_simple_test("S15649C1");
    S15649C1 lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S15649C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15649C1)");
    check_field_offset(lv, s15649c1f0, 0, "S15649C1.s15649c1f0");
    check_field_offset(lv, s15649c1f1, ABISELECT(104,80), "S15649C1.s15649c1f1");
    check_field_offset(lv, s15649c1f2, ABISELECT(112,84), "S15649C1.s15649c1f2");
    check_field_offset(lv, s15649c1f3, ABISELECT(120,92), "S15649C1.s15649c1f3");
  }
}
static Arrange_To_Call_Me vS15649C1(Test_S15649C1, "S15649C1", ABISELECT(128,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3648C2  : S7368C49 {
  void *s3648c2f0;
  ::S487C6_nt s3648c2f1;
  void *s3648c2f2;
  char s3648c2f3;
  virtual  ~S3648C2(); // _ZN7S3648C2D1Ev
  virtual void  v1(); // _ZN7S3648C22v1Ev
  virtual void  v2(); // _ZN7S3648C22v2Ev
  virtual void  v3(); // _ZN7S3648C22v3Ev
  virtual void  v4(); // _ZN7S3648C22v4Ev
  virtual void  v5(); // _ZN7S3648C22v5Ev
  S3648C2(); // tgen
};
//SIG(-1 S3648C2) C1{ BC2{ vd m FC3{ m Fp Fi[2] FC4{ m}}} vd v1 v2 v3 v4 v5 Fp FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp Fc}


 S3648C2 ::~S3648C2(){ note_dtor("S3648C2", this);}
void  S3648C2 ::v1(){vfunc_called(this, "_ZN7S3648C22v1Ev");}
void  S3648C2 ::v2(){vfunc_called(this, "_ZN7S3648C22v2Ev");}
void  S3648C2 ::v3(){vfunc_called(this, "_ZN7S3648C22v3Ev");}
void  S3648C2 ::v4(){vfunc_called(this, "_ZN7S3648C22v4Ev");}
void  S3648C2 ::v5(){vfunc_called(this, "_ZN7S3648C22v5Ev");}
S3648C2 ::S3648C2(){ note_ctor("S3648C2", this);} // tgen

static void Test_S3648C2()
{
  extern Class_Descriptor cd_S3648C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3648C2, buf);
    S3648C2 *dp, &lv = *(dp=new (buf) S3648C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3648C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3648C2)");
    check_base_class_offset(lv, (S7368C49*), 0, "S3648C2");
    check_field_offset(lv, s3648c2f0, ABISELECT(32,20), "S3648C2.s3648c2f0");
    check_field_offset(lv, s3648c2f1, ABISELECT(40,24), "S3648C2.s3648c2f1");
    check_field_offset(lv, s3648c2f2, ABISELECT(64,40), "S3648C2.s3648c2f2");
    check_field_offset(lv, s3648c2f3, ABISELECT(72,44), "S3648C2.s3648c2f3");
    test_class_info(&lv, &cd_S3648C2);
    dp->~S3648C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3648C2(Test_S3648C2, "S3648C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3648C2C1Ev();
extern void _ZN7S3648C2D1Ev();
Name_Map name_map_S3648C2[] = {
  NSPAIR(_ZN7S3648C2C1Ev),
  NSPAIR(_ZN7S3648C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S3648C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3648C2[];
extern void _ZN7S3648C2D1Ev();
extern void _ZN7S3648C2D0Ev();
extern void _ZN7S3648C22v1Ev();
extern void _ZN7S3648C22v2Ev();
extern void _ZN7S3648C22v3Ev();
extern void _ZN7S3648C22v4Ev();
extern void _ZN7S3648C22v5Ev();
static  VTBL_ENTRY vtc_S3648C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3648C2[0]),
  (VTBL_ENTRY)&_ZN7S3648C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3648C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v1Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S3648C2[];
extern  VTBL_ENTRY _ZTV7S3648C2[];
Class_Descriptor cd_S3648C2 = {  "S3648C2", // class name
  bases_S3648C2, 1,
  &(vtc_S3648C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3648C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3648C2),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  S3648C1  : S3648C2 {
  virtual  ~S3648C1(); // _ZN7S3648C1D1Ev
  S3648C1(); // tgen
};
//SIG(1 S3648C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v1 v2 v3 v4 v5 Fp FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp Fc} vd}


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

static void Test_S3648C1()
{
  extern Class_Descriptor cd_S3648C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S3648C1, buf);
    S3648C1 *dp, &lv = *(dp=new (buf) S3648C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S3648C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3648C1)");
    check_base_class_offset(lv, (S7368C49*)(S3648C2*), 0, "S3648C1");
    check_base_class_offset(lv, (S3648C2*), 0, "S3648C1");
    test_class_info(&lv, &cd_S3648C1);
    dp->~S3648C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3648C1(Test_S3648C1, "S3648C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S3648C1C1Ev();
extern void _ZN7S3648C1D1Ev();
Name_Map name_map_S3648C1[] = {
  NSPAIR(_ZN7S3648C1C1Ev),
  NSPAIR(_ZN7S3648C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S3648C2;
extern VTBL_ENTRY _ZTI7S3648C2[];
extern  VTBL_ENTRY _ZTV7S3648C2[];
static Base_Class bases_S3648C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3648C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3648C1[];
extern void _ZN7S3648C1D1Ev();
extern void _ZN7S3648C1D0Ev();
extern void _ZN7S3648C22v1Ev();
extern void _ZN7S3648C22v2Ev();
extern void _ZN7S3648C22v3Ev();
extern void _ZN7S3648C22v4Ev();
extern void _ZN7S3648C22v5Ev();
static  VTBL_ENTRY vtc_S3648C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3648C1[0]),
  (VTBL_ENTRY)&_ZN7S3648C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3648C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v1Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3648C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S3648C1[];
extern  VTBL_ENTRY _ZTV7S3648C1[];
Class_Descriptor cd_S3648C1 = {  "S3648C1", // class name
  bases_S3648C1, 2,
  &(vtc_S3648C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S3648C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3648C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5345C3  {
  virtual  ~S5345C3(); // _ZN7S5345C3D1Ev
  virtual void  v6(); // _ZN7S5345C32v6Ev
  virtual void  v7(); // _ZN7S5345C32v7Ev
  S5345C3(); // tgen
};
//SIG(-1 S5345C3) C1{ vd v1 v2}


 S5345C3 ::~S5345C3(){ note_dtor("S5345C3", this);}
void  S5345C3 ::v6(){vfunc_called(this, "_ZN7S5345C32v6Ev");}
void  S5345C3 ::v7(){vfunc_called(this, "_ZN7S5345C32v7Ev");}
S5345C3 ::S5345C3(){ note_ctor("S5345C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5345C3C1Ev();
extern void _ZN7S5345C3D1Ev();
Name_Map name_map_S5345C3[] = {
  NSPAIR(_ZN7S5345C3C1Ev),
  NSPAIR(_ZN7S5345C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5345C3[];
extern void _ZN7S5345C3D1Ev();
extern void _ZN7S5345C3D0Ev();
extern void _ZN7S5345C32v6Ev();
extern void _ZN7S5345C32v7Ev();
static  VTBL_ENTRY vtc_S5345C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5345C3[0]),
  (VTBL_ENTRY)&_ZN7S5345C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5345C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5345C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S5345C3[];
extern  VTBL_ENTRY _ZTV7S5345C3[];
Class_Descriptor cd_S5345C3 = {  "S5345C3", // class name
  0,0,//no base classes
  &(vtc_S5345C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5345C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5345C3),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  S5345C2  : S5345C3 {
  int s5345c2f0[4];
  virtual  ~S5345C2(); // _ZN7S5345C2D1Ev
  virtual void  v8(); // _ZN7S5345C22v8Ev
  virtual void  v9(); // _ZN7S5345C22v9Ev
  S5345C2(); // tgen
};
//SIG(-1 S5345C2) C1{ BC2{ vd v3 v4} vd v1 v2 Fi[4]}


 S5345C2 ::~S5345C2(){ note_dtor("S5345C2", this);}
void  S5345C2 ::v8(){vfunc_called(this, "_ZN7S5345C22v8Ev");}
void  S5345C2 ::v9(){vfunc_called(this, "_ZN7S5345C22v9Ev");}
S5345C2 ::S5345C2(){ note_ctor("S5345C2", this);} // tgen

static void Test_S5345C2()
{
  extern Class_Descriptor cd_S5345C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S5345C2, buf);
    S5345C2 *dp, &lv = *(dp=new (buf) S5345C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S5345C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5345C2)");
    check_base_class_offset(lv, (S5345C3*), 0, "S5345C2");
    check_field_offset(lv, s5345c2f0, ABISELECT(8,4), "S5345C2.s5345c2f0");
    test_class_info(&lv, &cd_S5345C2);
    dp->~S5345C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5345C2(Test_S5345C2, "S5345C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S5345C2C1Ev();
extern void _ZN7S5345C2D1Ev();
Name_Map name_map_S5345C2[] = {
  NSPAIR(_ZN7S5345C2C1Ev),
  NSPAIR(_ZN7S5345C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5345C3;
extern VTBL_ENTRY _ZTI7S5345C3[];
extern  VTBL_ENTRY _ZTV7S5345C3[];
static Base_Class bases_S5345C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5345C2[];
extern void _ZN7S5345C2D1Ev();
extern void _ZN7S5345C2D0Ev();
extern void _ZN7S5345C32v6Ev();
extern void _ZN7S5345C32v7Ev();
extern void _ZN7S5345C22v8Ev();
extern void _ZN7S5345C22v9Ev();
static  VTBL_ENTRY vtc_S5345C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5345C2[0]),
  (VTBL_ENTRY)&_ZN7S5345C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5345C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5345C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5345C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S5345C2[];
extern  VTBL_ENTRY _ZTV7S5345C2[];
Class_Descriptor cd_S5345C2 = {  "S5345C2", // class name
  bases_S5345C2, 1,
  &(vtc_S5345C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S5345C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5345C2),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  S5345C1  : S5345C2 {
  ::S2011C15_nt s5345c1f0;
  virtual void  v1(); // _ZN7S5345C12v1Ev
  virtual void  v2(); // _ZN7S5345C12v2Ev
  virtual void  v3(); // _ZN7S5345C12v3Ev
  virtual void  v4(); // _ZN7S5345C12v4Ev
  virtual void  v5(); // _ZN7S5345C12v5Ev
  ~S5345C1(); // tgen
  S5345C1(); // tgen
};
//SIG(1 S5345C1) C1{ BC2{ BC3{ vd v6 v7} vd v8 v9 Fi[4]} v1 v2 v3 v4 v5 FC4{ BC5{ vd v12 v13} vd v10 v11 FC6{ m Fp Fi FC7{ m}} FC6 Fi}}


void  S5345C1 ::v1(){vfunc_called(this, "_ZN7S5345C12v1Ev");}
void  S5345C1 ::v2(){vfunc_called(this, "_ZN7S5345C12v2Ev");}
void  S5345C1 ::v3(){vfunc_called(this, "_ZN7S5345C12v3Ev");}
void  S5345C1 ::v4(){vfunc_called(this, "_ZN7S5345C12v4Ev");}
void  S5345C1 ::v5(){vfunc_called(this, "_ZN7S5345C12v5Ev");}
S5345C1 ::~S5345C1(){ note_dtor("S5345C1", this);} // tgen
S5345C1 ::S5345C1(){ note_ctor("S5345C1", this);} // tgen

static void Test_S5345C1()
{
  extern Class_Descriptor cd_S5345C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S5345C1, buf);
    S5345C1 *dp, &lv = *(dp=new (buf) S5345C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S5345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5345C1)");
    check_base_class_offset(lv, (S5345C3*)(S5345C2*), 0, "S5345C1");
    check_base_class_offset(lv, (S5345C2*), 0, "S5345C1");
    check_field_offset(lv, s5345c1f0, ABISELECT(24,20), "S5345C1.s5345c1f0");
    test_class_info(&lv, &cd_S5345C1);
    dp->~S5345C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5345C1(Test_S5345C1, "S5345C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S5345C1C1Ev();
extern void _ZN7S5345C1D1Ev();
Name_Map name_map_S5345C1[] = {
  NSPAIR(_ZN7S5345C1C1Ev),
  NSPAIR(_ZN7S5345C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5345C3;
extern VTBL_ENTRY _ZTI7S5345C3[];
extern  VTBL_ENTRY _ZTV7S5345C3[];
extern Class_Descriptor cd_S5345C2;
extern VTBL_ENTRY _ZTI7S5345C2[];
extern  VTBL_ENTRY _ZTV7S5345C2[];
static Base_Class bases_S5345C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5345C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5345C1[];
extern void _ZN7S5345C1D1Ev();
extern void _ZN7S5345C1D0Ev();
extern void _ZN7S5345C32v6Ev();
extern void _ZN7S5345C32v7Ev();
extern void _ZN7S5345C22v8Ev();
extern void _ZN7S5345C22v9Ev();
extern void _ZN7S5345C12v1Ev();
extern void _ZN7S5345C12v2Ev();
extern void _ZN7S5345C12v3Ev();
extern void _ZN7S5345C12v4Ev();
extern void _ZN7S5345C12v5Ev();
static  VTBL_ENTRY vtc_S5345C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5345C1[0]),
  (VTBL_ENTRY)&_ZN7S5345C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5345C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5345C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5345C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5345C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5345C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5345C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5345C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5345C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5345C1[];
extern  VTBL_ENTRY _ZTV7S5345C1[];
Class_Descriptor cd_S5345C1 = {  "S5345C1", // class name
  bases_S5345C1, 2,
  &(vtc_S5345C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S5345C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5345C1),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  S17997C2  {
  int s17997c2f0[3];
  ::S10256C11 s17997c2f1;
  char s17997c2f2;
  void  mf17997c2(); // _ZN8S17997C29mf17997c2Ev
};
//SIG(-1 S17997C2) C1{ m Fi[3] FC2{ m FC3{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC4{ Fi} Fi Fc Fi Fc} Fc}


void  S17997C2 ::mf17997c2(){}

static void Test_S17997C2()
{
  {
    init_simple_test("S17997C2");
    S17997C2 lv;
    check2(sizeof(lv), ABISELECT(144,112), "sizeof(S17997C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17997C2)");
    check_field_offset(lv, s17997c2f0, 0, "S17997C2.s17997c2f0");
    check_field_offset(lv, s17997c2f1, ABISELECT(16,12), "S17997C2.s17997c2f1");
    check_field_offset(lv, s17997c2f2, ABISELECT(136,108), "S17997C2.s17997c2f2");
  }
}
static Arrange_To_Call_Me vS17997C2(Test_S17997C2, "S17997C2", ABISELECT(144,112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17997C1  {
  void *s17997c1f0[2];
  ::S17997C2 s17997c1f1;
  void  mf17997c1(); // _ZN8S17997C19mf17997c1Ev
};
//SIG(1 S17997C1) C1{ m Fp[2] FC2{ m Fi[3] FC3{ m FC4{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC5{ Fi} Fi Fc Fi Fc} Fc}}


void  S17997C1 ::mf17997c1(){}

static void Test_S17997C1()
{
  {
    init_simple_test("S17997C1");
    S17997C1 lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S17997C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17997C1)");
    check_field_offset(lv, s17997c1f0, 0, "S17997C1.s17997c1f0");
    check_field_offset(lv, s17997c1f1, ABISELECT(16,8), "S17997C1.s17997c1f1");
  }
}
static Arrange_To_Call_Me vS17997C1(Test_S17997C1, "S17997C1", ABISELECT(160,120));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9630C2  {
  virtual  ~S9630C2(); // _ZN7S9630C2D1Ev
  virtual void  v3(); // _ZN7S9630C22v3Ev
  S9630C2(); // tgen
};
//SIG(-1 S9630C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9630C2C1Ev();
extern void _ZN7S9630C2D1Ev();
Name_Map name_map_S9630C2[] = {
  NSPAIR(_ZN7S9630C2C1Ev),
  NSPAIR(_ZN7S9630C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9630C2[];
extern void _ZN7S9630C2D1Ev();
extern void _ZN7S9630C2D0Ev();
extern void _ZN7S9630C22v3Ev();
static  VTBL_ENTRY vtc_S9630C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9630C2[0]),
  (VTBL_ENTRY)&_ZN7S9630C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9630C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9630C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S9630C2[];
extern  VTBL_ENTRY _ZTV7S9630C2[];
Class_Descriptor cd_S9630C2 = {  "S9630C2", // class name
  0,0,//no base classes
  &(vtc_S9630C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9630C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9630C2),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  S9630C3  {
  virtual  ~S9630C3(); // _ZN7S9630C3D1Ev
  virtual void  v4(); // _ZN7S9630C32v4Ev
  S9630C3(); // tgen
};
//SIG(-1 S9630C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9630C3C1Ev();
extern void _ZN7S9630C3D1Ev();
Name_Map name_map_S9630C3[] = {
  NSPAIR(_ZN7S9630C3C1Ev),
  NSPAIR(_ZN7S9630C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9630C3[];
extern void _ZN7S9630C3D1Ev();
extern void _ZN7S9630C3D0Ev();
extern void _ZN7S9630C32v4Ev();
static  VTBL_ENTRY vtc_S9630C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9630C3[0]),
  (VTBL_ENTRY)&_ZN7S9630C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9630C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9630C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S9630C3[];
extern  VTBL_ENTRY _ZTV7S9630C3[];
Class_Descriptor cd_S9630C3 = {  "S9630C3", // class name
  0,0,//no base classes
  &(vtc_S9630C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9630C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9630C3),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  S9630C1  : S9630C2 , S9630C3 {
  void *s9630c1f0[3];
  ::S2011C28_nt s9630c1f1;
  int s9630c1f2;
  virtual  ~S9630C1(); // _ZN7S9630C1D1Ev
  virtual void  v1(); // _ZN7S9630C12v1Ev
  virtual void  v2(); // _ZN7S9630C12v2Ev
  S9630C1(); // tgen
};
//SIG(1 S9630C1) C1{ BC2{ vd v3} BC3{ vd v4} vd v1 v2 Fp[3] FC4{ Fi FC5{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]} Fi}


 S9630C1 ::~S9630C1(){ note_dtor("S9630C1", this);}
void  S9630C1 ::v1(){vfunc_called(this, "_ZN7S9630C12v1Ev");}
void  S9630C1 ::v2(){vfunc_called(this, "_ZN7S9630C12v2Ev");}
S9630C1 ::S9630C1(){ note_ctor("S9630C1", this);} // tgen

static void Test_S9630C1()
{
  extern Class_Descriptor cd_S9630C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S9630C1, buf);
    S9630C1 *dp, &lv = *(dp=new (buf) S9630C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S9630C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9630C1)");
    check_base_class_offset(lv, (S9630C2*), 0, "S9630C1");
    check_base_class_offset(lv, (S9630C3*), ABISELECT(8,4), "S9630C1");
    check_field_offset(lv, s9630c1f0, ABISELECT(16,8), "S9630C1.s9630c1f0");
    check_field_offset(lv, s9630c1f1, ABISELECT(40,20), "S9630C1.s9630c1f1");
    check_field_offset(lv, s9630c1f2, ABISELECT(224,160), "S9630C1.s9630c1f2");
    test_class_info(&lv, &cd_S9630C1);
    dp->~S9630C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9630C1(Test_S9630C1, "S9630C1", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN7S9630C1C1Ev();
extern void _ZN7S9630C1D1Ev();
Name_Map name_map_S9630C1[] = {
  NSPAIR(_ZN7S9630C1C1Ev),
  NSPAIR(_ZN7S9630C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9630C2;
extern VTBL_ENTRY _ZTI7S9630C2[];
extern  VTBL_ENTRY _ZTV7S9630C2[];
extern Class_Descriptor cd_S9630C3;
extern VTBL_ENTRY _ZTI7S9630C3[];
extern  VTBL_ENTRY _ZTV7S9630C3[];
static Base_Class bases_S9630C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9630C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S9630C3,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9630C1[];
extern void _ZN7S9630C1D1Ev();
extern void _ZN7S9630C1D0Ev();
extern void _ZN7S9630C22v3Ev();
extern void _ZN7S9630C12v1Ev();
extern void _ZN7S9630C12v2Ev();
extern void ABISELECT(_ZThn8_N7S9630C1D1Ev,_ZThn4_N7S9630C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9630C1D0Ev,_ZThn4_N7S9630C1D0Ev)();
extern void _ZN7S9630C32v4Ev();
static  VTBL_ENTRY vtc_S9630C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9630C1[0]),
  (VTBL_ENTRY)&_ZN7S9630C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9630C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9630C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9630C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9630C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9630C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9630C1D1Ev,_ZThn4_N7S9630C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9630C1D0Ev,_ZThn4_N7S9630C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9630C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S9630C1[];
extern  VTBL_ENTRY _ZTV7S9630C1[];
Class_Descriptor cd_S9630C1 = {  "S9630C1", // class name
  bases_S9630C1, 2,
  &(vtc_S9630C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI7S9630C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9630C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16281C1  {
  ::S7368C9_nt s16281c1f0;
  long s16281c1f1;
  ::S7368C9_nt s16281c1f2;
  long s16281c1f3;
  ::S7368C9_nt s16281c1f4;
  ::S4464C15 s16281c1f5;
  ::S4464C15 s16281c1f6;
  void  mf16281c1(); // _ZN8S16281C19mf16281c1Ev
};
//SIG(1 S16281C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fl FC2 Fl FC2 FC4{ m Fi FL FC5{ m FC6{ vd m FL Fc} FC6} Fc[2]} FC4}


void  S16281C1 ::mf16281c1(){}

static void Test_S16281C1()
{
  {
    init_simple_test("S16281C1");
    S16281C1 lv;
    check2(sizeof(lv), ABISELECT(208,140), "sizeof(S16281C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16281C1)");
    check_field_offset(lv, s16281c1f0, 0, "S16281C1.s16281c1f0");
    check_field_offset(lv, s16281c1f1, ABISELECT(16,12), "S16281C1.s16281c1f1");
    check_field_offset(lv, s16281c1f2, ABISELECT(24,16), "S16281C1.s16281c1f2");
    check_field_offset(lv, s16281c1f3, ABISELECT(40,28), "S16281C1.s16281c1f3");
    check_field_offset(lv, s16281c1f4, ABISELECT(48,32), "S16281C1.s16281c1f4");
    check_field_offset(lv, s16281c1f5, ABISELECT(64,44), "S16281C1.s16281c1f5");
    check_field_offset(lv, s16281c1f6, ABISELECT(136,92), "S16281C1.s16281c1f6");
  }
}
static Arrange_To_Call_Me vS16281C1(Test_S16281C1, "S16281C1", ABISELECT(208,140));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9838C2  {
  virtual  ~S9838C2(); // _ZN7S9838C2D1Ev
  virtual void  v4(); // _ZN7S9838C22v4Ev
  virtual void  v5(); // _ZN7S9838C22v5Ev
  S9838C2(); // tgen
};
//SIG(-1 S9838C2) C1{ vd v1 v2}


 S9838C2 ::~S9838C2(){ note_dtor("S9838C2", this);}
void  S9838C2 ::v4(){vfunc_called(this, "_ZN7S9838C22v4Ev");}
void  S9838C2 ::v5(){vfunc_called(this, "_ZN7S9838C22v5Ev");}
S9838C2 ::S9838C2(){ note_ctor("S9838C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9838C2C1Ev();
extern void _ZN7S9838C2D1Ev();
Name_Map name_map_S9838C2[] = {
  NSPAIR(_ZN7S9838C2C1Ev),
  NSPAIR(_ZN7S9838C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9838C2[];
extern void _ZN7S9838C2D1Ev();
extern void _ZN7S9838C2D0Ev();
extern void _ZN7S9838C22v4Ev();
extern void _ZN7S9838C22v5Ev();
static  VTBL_ENTRY vtc_S9838C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9838C2[0]),
  (VTBL_ENTRY)&_ZN7S9838C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9838C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9838C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9838C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9838C2[];
extern  VTBL_ENTRY _ZTV7S9838C2[];
Class_Descriptor cd_S9838C2 = {  "S9838C2", // class name
  0,0,//no base classes
  &(vtc_S9838C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9838C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9838C2),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  S9838C6  {
  virtual  ~S9838C6(); // _ZN7S9838C6D1Ev
  virtual void  v6(); // _ZN7S9838C62v6Ev
  S9838C6(); // tgen
};
//SIG(-1 S9838C6) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9838C6C1Ev();
extern void _ZN7S9838C6D1Ev();
Name_Map name_map_S9838C6[] = {
  NSPAIR(_ZN7S9838C6C1Ev),
  NSPAIR(_ZN7S9838C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9838C6[];
extern void _ZN7S9838C6D1Ev();
extern void _ZN7S9838C6D0Ev();
extern void _ZN7S9838C62v6Ev();
static  VTBL_ENTRY vtc_S9838C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9838C6[0]),
  (VTBL_ENTRY)&_ZN7S9838C6D1Ev,
  (VTBL_ENTRY)&_ZN7S9838C6D0Ev,
  (VTBL_ENTRY)&_ZN7S9838C62v6Ev,
};
extern VTBL_ENTRY _ZTI7S9838C6[];
extern  VTBL_ENTRY _ZTV7S9838C6[];
Class_Descriptor cd_S9838C6 = {  "S9838C6", // class name
  0,0,//no base classes
  &(vtc_S9838C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9838C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9838C6),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  S9838C1  : S9838C2 , S7368C49 , S9838C6 {
  ::S499C36_nt s9838c1f0;
  virtual  ~S9838C1(); // _ZN7S9838C1D1Ev
  virtual void  v1(); // _ZN7S9838C12v1Ev
  virtual void  v2(); // _ZN7S9838C12v2Ev
  virtual void  v3(); // _ZN7S9838C12v3Ev
  S9838C1(); // tgen
};
//SIG(1 S9838C1) C1{ BC2{ vd v4 v5} BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} BC6{ vd v6} vd v1 v2 v3 FC7{ m Fp[2]}}


 S9838C1 ::~S9838C1(){ note_dtor("S9838C1", this);}
void  S9838C1 ::v1(){vfunc_called(this, "_ZN7S9838C12v1Ev");}
void  S9838C1 ::v2(){vfunc_called(this, "_ZN7S9838C12v2Ev");}
void  S9838C1 ::v3(){vfunc_called(this, "_ZN7S9838C12v3Ev");}
S9838C1 ::S9838C1(){ note_ctor("S9838C1", this);} // tgen

static void Test_S9838C1()
{
  extern Class_Descriptor cd_S9838C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S9838C1, buf);
    S9838C1 *dp, &lv = *(dp=new (buf) S9838C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S9838C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9838C1)");
    check_base_class_offset(lv, (S9838C2*), 0, "S9838C1");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(8,4), "S9838C1");
    check_base_class_offset(lv, (S9838C6*), ABISELECT(40,24), "S9838C1");
    check_field_offset(lv, s9838c1f0, ABISELECT(48,28), "S9838C1.s9838c1f0");
    test_class_info(&lv, &cd_S9838C1);
    dp->~S9838C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9838C1(Test_S9838C1, "S9838C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S9838C1C1Ev();
extern void _ZN7S9838C1D1Ev();
Name_Map name_map_S9838C1[] = {
  NSPAIR(_ZN7S9838C1C1Ev),
  NSPAIR(_ZN7S9838C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9838C2;
extern VTBL_ENTRY _ZTI7S9838C2[];
extern  VTBL_ENTRY _ZTV7S9838C2[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
extern Class_Descriptor cd_S9838C6;
extern VTBL_ENTRY _ZTI7S9838C6[];
extern  VTBL_ENTRY _ZTV7S9838C6[];
static Base_Class bases_S9838C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9838C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9838C6,    ABISELECT(40,24), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9838C1[];
extern void _ZN7S9838C1D1Ev();
extern void _ZN7S9838C1D0Ev();
extern void _ZN7S9838C22v4Ev();
extern void _ZN7S9838C22v5Ev();
extern void _ZN7S9838C12v1Ev();
extern void _ZN7S9838C12v2Ev();
extern void _ZN7S9838C12v3Ev();
extern void ABISELECT(_ZThn8_N7S9838C1D1Ev,_ZThn4_N7S9838C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9838C1D0Ev,_ZThn4_N7S9838C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S9838C1D1Ev,_ZThn24_N7S9838C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S9838C1D0Ev,_ZThn24_N7S9838C1D0Ev)();
extern void _ZN7S9838C62v6Ev();
static  VTBL_ENTRY vtc_S9838C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9838C1[0]),
  (VTBL_ENTRY)&_ZN7S9838C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9838C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9838C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9838C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9838C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9838C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9838C12v3Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9838C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9838C1D1Ev,_ZThn4_N7S9838C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9838C1D0Ev,_ZThn4_N7S9838C1D0Ev),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S9838C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S9838C1D1Ev,_ZThn24_N7S9838C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S9838C1D0Ev,_ZThn24_N7S9838C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9838C62v6Ev,
};
extern VTBL_ENTRY _ZTI7S9838C1[];
extern  VTBL_ENTRY _ZTV7S9838C1[];
Class_Descriptor cd_S9838C1 = {  "S9838C1", // class name
  bases_S9838C1, 3,
  &(vtc_S9838C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S9838C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S9838C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17673C1  {
  void *s17673c1f0;
  ::S7368C78 s17673c1f1;
  ::S7368C78 s17673c1f2;
  ::S6060C8 s17673c1f3;
  ::S499C29_nt s17673c1f4;
  ::S499C29_nt s17673c1f5;
  ::S499C29_nt s17673c1f6;
  ::S499C29_nt s17673c1f7;
  ::S499C29_nt s17673c1f8;
  void  mf17673c1(); // _ZN8S17673C19mf17673c1Ev
};
//SIG(1 S17673C1) C1{ m Fp FC2{ m} FC2 FC3{ m FC4{ BC5{ m Fp Fi[2]}} FC4} FC6{ m Fi[3]} FC6 FC6 FC6 FC6}


void  S17673C1 ::mf17673c1(){}

static void Test_S17673C1()
{
  {
    init_simple_test("S17673C1");
    S17673C1 lv;
    check2(sizeof(lv), ABISELECT(112,92), "sizeof(S17673C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17673C1)");
    check_field_offset(lv, s17673c1f0, 0, "S17673C1.s17673c1f0");
    check_field_offset(lv, s17673c1f1, ABISELECT(8,4), "S17673C1.s17673c1f1");
    check_field_offset(lv, s17673c1f2, ABISELECT(9,5), "S17673C1.s17673c1f2");
    check_field_offset(lv, s17673c1f3, ABISELECT(16,8), "S17673C1.s17673c1f3");
    check_field_offset(lv, s17673c1f4, ABISELECT(48,32), "S17673C1.s17673c1f4");
    check_field_offset(lv, s17673c1f5, ABISELECT(60,44), "S17673C1.s17673c1f5");
    check_field_offset(lv, s17673c1f6, ABISELECT(72,56), "S17673C1.s17673c1f6");
    check_field_offset(lv, s17673c1f7, ABISELECT(84,68), "S17673C1.s17673c1f7");
    check_field_offset(lv, s17673c1f8, ABISELECT(96,80), "S17673C1.s17673c1f8");
  }
}
static Arrange_To_Call_Me vS17673C1(Test_S17673C1, "S17673C1", ABISELECT(112,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16706C1  {
  int s16706c1f0;
  ::S10256C11 s16706c1f1;
  void  mf16706c1(); // _ZN8S16706C19mf16706c1Ev
};
//SIG(1 S16706C1) C1{ m Fi FC2{ m FC3{ m Fi[4] Fp Fc Fi[2] Fp[2]} Fi[5] FL[2] FC4{ Fi} Fi Fc Fi Fc}}


void  S16706C1 ::mf16706c1(){}

static void Test_S16706C1()
{
  {
    init_simple_test("S16706C1");
    S16706C1 lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S16706C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16706C1)");
    check_field_offset(lv, s16706c1f0, 0, "S16706C1.s16706c1f0");
    check_field_offset(lv, s16706c1f1, ABISELECT(8,4), "S16706C1.s16706c1f1");
  }
}
static Arrange_To_Call_Me vS16706C1(Test_S16706C1, "S16706C1", ABISELECT(128,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21480C1  {
  ::S7368C9_nt s21480c1f0;
  ::S7368C11 s21480c1f1;
  ::S7368C11 s21480c1f2;
  long s21480c1f3;
  ::S7368C9_nt s21480c1f4;
  long s21480c1f5;
  ::S7368C9_nt s21480c1f6;
  __tsi64 s21480c1f7;
  void  mf21480c1(); // _ZN8S21480C19mf21480c1Ev
  virtual  ~S21480C1(); // _ZN8S21480C1D1Ev
  S21480C1(); // tgen
};
//SIG(1 S21480C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ vd m Fc} vd FL[2]} FC4 Fl FC2 Fl FC2 FL}


void  S21480C1 ::mf21480c1(){}
 S21480C1 ::~S21480C1(){ note_dtor("S21480C1", this);}
S21480C1 ::S21480C1(){ note_ctor("S21480C1", this);} // tgen

static void Test_S21480C1()
{
  extern Class_Descriptor cd_S21480C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,27)];
    init_test(&cd_S21480C1, buf);
    S21480C1 *dp, &lv = *(dp=new (buf) S21480C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,104), "sizeof(S21480C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21480C1)");
    check_field_offset(lv, s21480c1f0, ABISELECT(8,4), "S21480C1.s21480c1f0");
    check_field_offset(lv, s21480c1f1, ABISELECT(24,16), "S21480C1.s21480c1f1");
    check_field_offset(lv, s21480c1f2, ABISELECT(56,40), "S21480C1.s21480c1f2");
    check_field_offset(lv, s21480c1f3, ABISELECT(88,64), "S21480C1.s21480c1f3");
    check_field_offset(lv, s21480c1f4, ABISELECT(96,68), "S21480C1.s21480c1f4");
    check_field_offset(lv, s21480c1f5, ABISELECT(112,80), "S21480C1.s21480c1f5");
    check_field_offset(lv, s21480c1f6, ABISELECT(120,84), "S21480C1.s21480c1f6");
    check_field_offset(lv, s21480c1f7, ABISELECT(136,96), "S21480C1.s21480c1f7");
    test_class_info(&lv, &cd_S21480C1);
    dp->~S21480C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21480C1(Test_S21480C1, "S21480C1", ABISELECT(144,104));

#else // __cplusplus

extern void _ZN8S21480C1C1Ev();
extern void _ZN8S21480C1D1Ev();
Name_Map name_map_S21480C1[] = {
  NSPAIR(_ZN8S21480C1C1Ev),
  NSPAIR(_ZN8S21480C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21480C1[];
extern void _ZN8S21480C1D1Ev();
extern void _ZN8S21480C1D0Ev();
static  VTBL_ENTRY vtc_S21480C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21480C1[0]),
  (VTBL_ENTRY)&_ZN8S21480C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21480C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21480C1[];
extern  VTBL_ENTRY _ZTV8S21480C1[];
Class_Descriptor cd_S21480C1 = {  "S21480C1", // class name
  0,0,//no base classes
  &(vtc_S21480C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,104), // object size
  NSPAIRA(_ZTI8S21480C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21480C1),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  S18262C2  {
  __tsi64 s18262c2f0;
  ::S4464C15 s18262c2f1;
  void  mf18262c2(); // _ZN8S18262C29mf18262c2Ev
};
//SIG(-1 S18262C2) C1{ m FL FC2{ m Fi FL FC3{ m FC4{ vd m FL Fc} FC4} Fc[2]}}


void  S18262C2 ::mf18262c2(){}

static void Test_S18262C2()
{
  {
    init_simple_test("S18262C2");
    S18262C2 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S18262C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18262C2)");
    check_field_offset(lv, s18262c2f0, 0, "S18262C2.s18262c2f0");
    check_field_offset(lv, s18262c2f1, 8, "S18262C2.s18262c2f1");
  }
}
static Arrange_To_Call_Me vS18262C2(Test_S18262C2, "S18262C2", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18262C1  {
  void *s18262c1f0[3];
  ::S18262C2 s18262c1f1;
  char s18262c1f2[2];
  void  mf18262c1(); // _ZN8S18262C19mf18262c1Ev
};
//SIG(1 S18262C1) C1{ m Fp[3] FC2{ m FL FC3{ m Fi FL FC4{ m FC5{ vd m FL Fc} FC5} Fc[2]}} Fc[2]}


void  S18262C1 ::mf18262c1(){}

static void Test_S18262C1()
{
  {
    init_simple_test("S18262C1");
    S18262C1 lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S18262C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18262C1)");
    check_field_offset(lv, s18262c1f0, 0, "S18262C1.s18262c1f0");
    check_field_offset(lv, s18262c1f1, ABISELECT(24,12), "S18262C1.s18262c1f1");
    check_field_offset(lv, s18262c1f2, ABISELECT(104,68), "S18262C1.s18262c1f2");
  }
}
static Arrange_To_Call_Me vS18262C1(Test_S18262C1, "S18262C1", ABISELECT(112,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19822C4_nt  : virtual S7368C51 {
  ~S19822C4_nt(); // tgen
  S19822C4_nt(); // tgen
};
//SIG(-1 S19822C4_nt) C1{ VBC2{ m}}


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

//skip512 S19822C4_nt

#else // __cplusplus

extern void _ZN11S19822C4_ntC1Ev();
extern void _ZN11S19822C4_ntD1Ev();
Name_Map name_map_S19822C4_nt[] = {
  NSPAIR(_ZN11S19822C4_ntC1Ev),
  NSPAIR(_ZN11S19822C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
static Base_Class bases_S19822C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI11S19822C4_nt[];
static  VTBL_ENTRY vtc_S19822C4_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19822C4_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19822C4_nt[];
static  VTT_ENTRY vtt_S19822C4_nt[] = {
  {&(_ZTV11S19822C4_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19822C4_nt[];
VTBL_ENTRY *P__ZTI11S19822C4_nt = _ZTI11S19822C4_nt; 
extern  VTBL_ENTRY _ZTV11S19822C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19822C4_nt[];
Class_Descriptor cd_S19822C4_nt = {  "S19822C4_nt", // class name
  bases_S19822C4_nt, 1,
  &(vtc_S19822C4_nt[0]), // expected_vtbl_contents
  &(vtt_S19822C4_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19822C4_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S19822C4_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19822C4_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19822C6_nt  : virtual S7368C51 , virtual S7368C78 {
  ~S19822C6_nt(); // tgen
  S19822C6_nt(); // tgen
};
//SIG(-1 S19822C6_nt) C1{ VBC2{ m} VBC3{ m}}


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

//skip512 S19822C6_nt

#else // __cplusplus

extern void _ZN11S19822C6_ntC1Ev();
extern void _ZN11S19822C6_ntD1Ev();
Name_Map name_map_S19822C6_nt[] = {
  NSPAIR(_ZN11S19822C6_ntC1Ev),
  NSPAIR(_ZN11S19822C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
static Base_Class bases_S19822C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI11S19822C6_nt[];
static  VTBL_ENTRY vtc_S19822C6_nt[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19822C6_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19822C6_nt[];
static  VTT_ENTRY vtt_S19822C6_nt[] = {
  {&(_ZTV11S19822C6_nt[4]),  4,4},
};
extern VTBL_ENTRY _ZTI11S19822C6_nt[];
VTBL_ENTRY *P__ZTI11S19822C6_nt = _ZTI11S19822C6_nt; 
extern  VTBL_ENTRY _ZTV11S19822C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19822C6_nt[];
Class_Descriptor cd_S19822C6_nt = {  "S19822C6_nt", // class name
  bases_S19822C6_nt, 2,
  &(vtc_S19822C6_nt[0]), // expected_vtbl_contents
  &(vtt_S19822C6_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19822C6_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S19822C6_nt),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19822C6_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19822C3  : S19822C4_nt , virtual S19822C6_nt {
  ~S19822C3(); // tgen
  S19822C3(); // tgen
};
//SIG(-1 S19822C3) C1{ BC2{ VBC3{ m}} VBC4{ VBC3 VBC5{ m}}}


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

static void Test_S19822C3()
{
  extern Class_Descriptor cd_S19822C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19822C3, buf);
    S19822C3 *dp, &lv = *(dp=new (buf) S19822C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19822C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19822C3)");
    check_base_class_offset(lv, (S7368C51*)(S19822C4_nt*), 0, "S19822C3");
    check_base_class_offset(lv, (S7368C51*)(S19822C6_nt*), 0, "S19822C3");
    check_base_class_offset(lv, (S19822C4_nt*), 0, "S19822C3");
    check_base_class_offset(lv, (S7368C78*)(S19822C6_nt*), 0, "S19822C3");
    check_base_class_offset(lv, (S19822C6_nt*), ABISELECT(8,4), "S19822C3");
    test_class_info(&lv, &cd_S19822C3);
    dp->~S19822C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19822C3(Test_S19822C3, "S19822C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19822C3C1Ev();
extern void _ZN8S19822C3D1Ev();
Name_Map name_map_S19822C3[] = {
  NSPAIR(_ZN8S19822C3C1Ev),
  NSPAIR(_ZN8S19822C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S19822C4_nt;
extern VTBL_ENTRY _ZTI11S19822C4_nt[];
extern  VTBL_ENTRY _ZTV11S19822C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19822C4_nt[];
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S19822C6_nt;
extern VTBL_ENTRY _ZTI11S19822C6_nt[];
extern  VTBL_ENTRY _ZTV11S19822C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19822C6_nt[];
static Base_Class bases_S19822C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19822C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19822C6_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19822C3[];
static  VTBL_ENTRY vtc_S19822C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C3[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19822C3[0]),
};
extern VTBL_ENTRY _ZTV8S19822C3[];
static  VTBL_ENTRY _tg__ZTV11S19822C4_nt__8S19822C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19822C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19822C6_nt__8S19822C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19822C6_nt[0]),
};
static  VTT_ENTRY vtt_S19822C3[] = {
  {&(_ZTV8S19822C3[5]),  5,9},
  {&(_tg__ZTV11S19822C4_nt__8S19822C3[3]),  3,3},
  {&(_ZTV8S19822C3[9]),  9,9},
  {&(_tg__ZTV11S19822C6_nt__8S19822C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19822C3[];
extern  VTBL_ENTRY _ZTV8S19822C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C3[];
Class_Descriptor cd_S19822C3 = {  "S19822C3", // class name
  bases_S19822C3, 4,
  &(vtc_S19822C3[0]), // expected_vtbl_contents
  &(vtt_S19822C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19822C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19822C3),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19822C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19822C8  : virtual S7368C78 , virtual S7368C51 {
  ~S19822C8(); // tgen
  S19822C8(); // tgen
};
//SIG(-1 S19822C8) C1{ VBC2{ m} VBC3{ m}}


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

static void Test_S19822C8()
{
  extern Class_Descriptor cd_S19822C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19822C8, buf);
    S19822C8 *dp, &lv = *(dp=new (buf) S19822C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19822C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19822C8)");
    check_base_class_offset(lv, (S7368C78*), 0, "S19822C8");
    check_base_class_offset(lv, (S7368C51*), 0, "S19822C8");
    test_class_info(&lv, &cd_S19822C8);
    dp->~S19822C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19822C8(Test_S19822C8, "S19822C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19822C8C1Ev();
extern void _ZN8S19822C8D1Ev();
Name_Map name_map_S19822C8[] = {
  NSPAIR(_ZN8S19822C8C1Ev),
  NSPAIR(_ZN8S19822C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
static Base_Class bases_S19822C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19822C8[];
static  VTBL_ENTRY vtc_S19822C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C8[0]),
};
extern VTBL_ENTRY _ZTV8S19822C8[];
static  VTT_ENTRY vtt_S19822C8[] = {
  {&(_ZTV8S19822C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19822C8[];
extern  VTBL_ENTRY _ZTV8S19822C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C8[];
Class_Descriptor cd_S19822C8 = {  "S19822C8", // class name
  bases_S19822C8, 2,
  &(vtc_S19822C8[0]), // expected_vtbl_contents
  &(vtt_S19822C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19822C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19822C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19822C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19822C7  : virtual S19822C6_nt , S19822C8 {
  ~S19822C7(); // tgen
  S19822C7(); // tgen
};
//SIG(-1 S19822C7) C1{ VBC2{ VBC3{ m} VBC4{ m}} BC5{ VBC4 VBC3}}


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

static void Test_S19822C7()
{
  extern Class_Descriptor cd_S19822C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19822C7, buf);
    S19822C7 *dp, &lv = *(dp=new (buf) S19822C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19822C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19822C7)");
    check_base_class_offset(lv, (S7368C51*)(S19822C6_nt*), 0, "S19822C7");
    check_base_class_offset(lv, (S7368C51*)(S19822C8*), 0, "S19822C7");
    check_base_class_offset(lv, (S7368C78*)(S19822C6_nt*), 0, "S19822C7");
    check_base_class_offset(lv, (S7368C78*)(S19822C8*), 0, "S19822C7");
    check_base_class_offset(lv, (S19822C6_nt*), ABISELECT(8,4), "S19822C7");
    check_base_class_offset(lv, (S19822C8*), 0, "S19822C7");
    test_class_info(&lv, &cd_S19822C7);
    dp->~S19822C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19822C7(Test_S19822C7, "S19822C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19822C7C1Ev();
extern void _ZN8S19822C7D1Ev();
Name_Map name_map_S19822C7[] = {
  NSPAIR(_ZN8S19822C7C1Ev),
  NSPAIR(_ZN8S19822C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S19822C6_nt;
extern VTBL_ENTRY _ZTI11S19822C6_nt[];
extern  VTBL_ENTRY _ZTV11S19822C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19822C6_nt[];
extern Class_Descriptor cd_S19822C8;
extern VTBL_ENTRY _ZTI8S19822C8[];
extern  VTBL_ENTRY _ZTV8S19822C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C8[];
static Base_Class bases_S19822C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19822C6_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19822C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19822C7[];
static  VTBL_ENTRY vtc_S19822C7[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C7[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19822C7[0]),
};
extern VTBL_ENTRY _ZTV8S19822C7[];
static  VTBL_ENTRY _tg__ZTV8S19822C8__8S19822C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C8[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19822C6_nt__8S19822C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19822C6_nt[0]),
};
static  VTT_ENTRY vtt_S19822C7[] = {
  {&(_ZTV8S19822C7[5]),  5,9},
  {&(_tg__ZTV8S19822C8__8S19822C7[4]),  4,4},
  {&(_ZTV8S19822C7[9]),  9,9},
  {&(_tg__ZTV11S19822C6_nt__8S19822C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19822C7[];
extern  VTBL_ENTRY _ZTV8S19822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C7[];
Class_Descriptor cd_S19822C7 = {  "S19822C7", // class name
  bases_S19822C7, 4,
  &(vtc_S19822C7[0]), // expected_vtbl_contents
  &(vtt_S19822C7[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19822C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19822C7),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19822C7),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19822C1  : virtual S7368C78 , S19822C3 , virtual S19822C7 {
  ~S19822C1(); // tgen
  S19822C1(); // tgen
};
//SIG(1 S19822C1) C1{ VBC2{ m} BC3{ BC4{ VBC5{ m}} VBC6{ VBC5 VBC2}} VBC7{ VBC6 BC8{ VBC2 VBC5}}}


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

static void Test_S19822C1()
{
  extern Class_Descriptor cd_S19822C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19822C1, buf);
    S19822C1 *dp, &lv = *(dp=new (buf) S19822C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19822C1)");
    check_base_class_offset(lv, (S7368C78*), 0, "S19822C1");
    check_base_class_offset(lv, (S7368C78*)(S19822C6_nt*), 0, "S19822C1");
    check_base_class_offset(lv, (S7368C78*)(S19822C8*)(S19822C7*), 0, "S19822C1");
    check_base_class_offset(lv, (S7368C51*)(S19822C4_nt*)(S19822C3*), 0, "S19822C1");
    check_base_class_offset(lv, (S7368C51*)(S19822C6_nt*), 0, "S19822C1");
    check_base_class_offset(lv, (S7368C51*)(S19822C8*)(S19822C7*), 0, "S19822C1");
    check_base_class_offset(lv, (S19822C4_nt*)(S19822C3*), 0, "S19822C1");
    check_base_class_offset(lv, (S19822C6_nt*)(S19822C3*), ABISELECT(8,4), "S19822C1");
    check_base_class_offset(lv, (S19822C6_nt*)(S19822C7*), ABISELECT(8,4), "S19822C1");
    check_base_class_offset(lv, (S19822C3*), 0, "S19822C1");
    check_base_class_offset(lv, (S19822C8*)(S19822C7*), ABISELECT(16,8), "S19822C1");
    check_base_class_offset(lv, (S19822C7*), ABISELECT(16,8), "S19822C1");
    test_class_info(&lv, &cd_S19822C1);
    dp->~S19822C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19822C1(Test_S19822C1, "S19822C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19822C1C1Ev();
extern void _ZN8S19822C1D1Ev();
Name_Map name_map_S19822C1[] = {
  NSPAIR(_ZN8S19822C1C1Ev),
  NSPAIR(_ZN8S19822C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S19822C4_nt;
extern VTBL_ENTRY _ZTI11S19822C4_nt[];
extern  VTBL_ENTRY _ZTV11S19822C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19822C4_nt[];
extern Class_Descriptor cd_S19822C6_nt;
extern VTBL_ENTRY _ZTI11S19822C6_nt[];
extern  VTBL_ENTRY _ZTV11S19822C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19822C6_nt[];
extern Class_Descriptor cd_S19822C3;
extern VTBL_ENTRY _ZTI8S19822C3[];
extern  VTBL_ENTRY _ZTV8S19822C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C3[];
extern Class_Descriptor cd_S19822C8;
extern VTBL_ENTRY _ZTI8S19822C8[];
extern  VTBL_ENTRY _ZTV8S19822C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C8[];
extern Class_Descriptor cd_S19822C7;
extern VTBL_ENTRY _ZTI8S19822C7[];
extern  VTBL_ENTRY _ZTV8S19822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C7[];
static Base_Class bases_S19822C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19822C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19822C6_nt,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19822C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19822C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19822C7,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19822C1[];
static  VTBL_ENTRY vtc_S19822C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19822C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19822C1[0]),
};
extern VTBL_ENTRY _ZTV8S19822C1[];
static  VTBL_ENTRY _tg__ZTV8S19822C3__8S19822C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C3[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19822C4_nt8S19822C3__8S19822C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19822C4_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19822C6_nt__8S19822C3__8S19822C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19822C3[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19822C6_nt__8S19822C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19822C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19822C7__8S19822C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19822C88S19822C7__8S19822C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19822C8[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19822C6_nt__8S19822C7__8S19822C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19822C7[0]),
};
static  VTT_ENTRY vtt_S19822C1[] = {
  {&(_ZTV8S19822C1[6]),  6,15},
  {&(_tg__ZTV8S19822C3__8S19822C1[5]),  5,5},
  {&(_tg__ZTV11S19822C4_nt8S19822C3__8S19822C1[3]),  3,3},
  {&(_tg__ZTV11S19822C6_nt__8S19822C3__8S19822C1[4]),  4,4},
  {&(_ZTV8S19822C1[10]),  10,15},
  {&(_ZTV8S19822C1[15]),  15,15},
  {&(_tg__ZTV11S19822C6_nt__8S19822C1[4]),  4,4},
  {&(_tg__ZTV8S19822C7__8S19822C1[5]),  5,5},
  {&(_tg__ZTV8S19822C88S19822C7__8S19822C1[4]),  4,4},
  {&(_tg__ZTV11S19822C6_nt__8S19822C7__8S19822C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19822C1[];
extern  VTBL_ENTRY _ZTV8S19822C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19822C1[];
Class_Descriptor cd_S19822C1 = {  "S19822C1", // class name
  bases_S19822C1, 7,
  &(vtc_S19822C1[0]), // expected_vtbl_contents
  &(vtt_S19822C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19822C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19822C1),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19822C1),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3556C4  : virtual S7368C78 , virtual S7368C51 {
  ~S3556C4(); // tgen
  S3556C4(); // tgen
};
//SIG(-1 S3556C4) C1{ VBC2{ m} VBC3{ m}}


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

static void Test_S3556C4()
{
  extern Class_Descriptor cd_S3556C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3556C4, buf);
    S3556C4 *dp, &lv = *(dp=new (buf) S3556C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3556C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3556C4)");
    check_base_class_offset(lv, (S7368C78*), 0, "S3556C4");
    check_base_class_offset(lv, (S7368C51*), 0, "S3556C4");
    test_class_info(&lv, &cd_S3556C4);
    dp->~S3556C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3556C4(Test_S3556C4, "S3556C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3556C4C1Ev();
extern void _ZN7S3556C4D1Ev();
Name_Map name_map_S3556C4[] = {
  NSPAIR(_ZN7S3556C4C1Ev),
  NSPAIR(_ZN7S3556C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
static Base_Class bases_S3556C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3556C4[];
static  VTBL_ENTRY vtc_S3556C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C4[0]),
};
extern VTBL_ENTRY _ZTV7S3556C4[];
static  VTT_ENTRY vtt_S3556C4[] = {
  {&(_ZTV7S3556C4[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3556C4[];
extern  VTBL_ENTRY _ZTV7S3556C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C4[];
Class_Descriptor cd_S3556C4 = {  "S3556C4", // class name
  bases_S3556C4, 2,
  &(vtc_S3556C4[0]), // expected_vtbl_contents
  &(vtt_S3556C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3556C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3556C4),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3556C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3556C3  : virtual S3556C4 {
  ~S3556C3(); // tgen
  S3556C3(); // tgen
};
//SIG(-1 S3556C3) C1{ VBC2{ VBC3{ m} VBC4{ m}}}


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

static void Test_S3556C3()
{
  extern Class_Descriptor cd_S3556C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3556C3, buf);
    S3556C3 *dp, &lv = *(dp=new (buf) S3556C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3556C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3556C3)");
    check_base_class_offset(lv, (S7368C78*)(S3556C4*), 0, "S3556C3");
    check_base_class_offset(lv, (S7368C51*)(S3556C4*), 0, "S3556C3");
    check_base_class_offset(lv, (S3556C4*), 0, "S3556C3");
    test_class_info(&lv, &cd_S3556C3);
    dp->~S3556C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3556C3(Test_S3556C3, "S3556C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3556C3C1Ev();
extern void _ZN7S3556C3D1Ev();
Name_Map name_map_S3556C3[] = {
  NSPAIR(_ZN7S3556C3C1Ev),
  NSPAIR(_ZN7S3556C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S3556C4;
extern VTBL_ENTRY _ZTI7S3556C4[];
extern  VTBL_ENTRY _ZTV7S3556C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C4[];
static Base_Class bases_S3556C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3556C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3556C3[];
static  VTBL_ENTRY vtc_S3556C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C3[0]),
};
extern VTBL_ENTRY _ZTV7S3556C3[];
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C4[0]),
};
static  VTT_ENTRY vtt_S3556C3[] = {
  {&(_ZTV7S3556C3[5]),  5,5},
  {&(_ZTV7S3556C3[5]),  5,5},
  {&(_tg__ZTV7S3556C4__7S3556C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3556C3[];
extern  VTBL_ENTRY _ZTV7S3556C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C3[];
Class_Descriptor cd_S3556C3 = {  "S3556C3", // class name
  bases_S3556C3, 3,
  &(vtc_S3556C3[0]), // expected_vtbl_contents
  &(vtt_S3556C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3556C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3556C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3556C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3556C8  : virtual S7368C78 {
  ~S3556C8(); // tgen
  S3556C8(); // tgen
};
//SIG(-1 S3556C8) C1{ VBC2{ m}}


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

static void Test_S3556C8()
{
  extern Class_Descriptor cd_S3556C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3556C8, buf);
    S3556C8 *dp, &lv = *(dp=new (buf) S3556C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3556C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3556C8)");
    check_base_class_offset(lv, (S7368C78*), 0, "S3556C8");
    test_class_info(&lv, &cd_S3556C8);
    dp->~S3556C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3556C8(Test_S3556C8, "S3556C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3556C8C1Ev();
extern void _ZN7S3556C8D1Ev();
Name_Map name_map_S3556C8[] = {
  NSPAIR(_ZN7S3556C8C1Ev),
  NSPAIR(_ZN7S3556C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
static Base_Class bases_S3556C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3556C8[];
static  VTBL_ENTRY vtc_S3556C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C8[0]),
};
extern VTBL_ENTRY _ZTV7S3556C8[];
static  VTT_ENTRY vtt_S3556C8[] = {
  {&(_ZTV7S3556C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3556C8[];
extern  VTBL_ENTRY _ZTV7S3556C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C8[];
Class_Descriptor cd_S3556C8 = {  "S3556C8", // class name
  bases_S3556C8, 1,
  &(vtc_S3556C8[0]), // expected_vtbl_contents
  &(vtt_S3556C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3556C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3556C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3556C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3556C7  : S3556C8 , virtual S3556C4 {
  ~S3556C7(); // tgen
  S3556C7(); // tgen
};
//SIG(-1 S3556C7) C1{ BC2{ VBC3{ m}} VBC4{ VBC3 VBC5{ m}}}


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

static void Test_S3556C7()
{
  extern Class_Descriptor cd_S3556C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3556C7, buf);
    S3556C7 *dp, &lv = *(dp=new (buf) S3556C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3556C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3556C7)");
    check_base_class_offset(lv, (S7368C78*)(S3556C8*), 0, "S3556C7");
    check_base_class_offset(lv, (S7368C78*)(S3556C4*), 0, "S3556C7");
    check_base_class_offset(lv, (S3556C8*), 0, "S3556C7");
    check_base_class_offset(lv, (S7368C51*)(S3556C4*), 0, "S3556C7");
    check_base_class_offset(lv, (S3556C4*), ABISELECT(8,4), "S3556C7");
    test_class_info(&lv, &cd_S3556C7);
    dp->~S3556C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3556C7(Test_S3556C7, "S3556C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3556C7C1Ev();
extern void _ZN7S3556C7D1Ev();
Name_Map name_map_S3556C7[] = {
  NSPAIR(_ZN7S3556C7C1Ev),
  NSPAIR(_ZN7S3556C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S3556C8;
extern VTBL_ENTRY _ZTI7S3556C8[];
extern  VTBL_ENTRY _ZTV7S3556C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C8[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S3556C4;
extern VTBL_ENTRY _ZTI7S3556C4[];
extern  VTBL_ENTRY _ZTV7S3556C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C4[];
static Base_Class bases_S3556C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3556C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3556C4,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3556C7[];
static  VTBL_ENTRY vtc_S3556C7[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
};
extern VTBL_ENTRY _ZTV7S3556C7[];
static  VTBL_ENTRY _tg__ZTV7S3556C8__7S3556C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C4[0]),
};
static  VTT_ENTRY vtt_S3556C7[] = {
  {&(_ZTV7S3556C7[5]),  5,9},
  {&(_tg__ZTV7S3556C8__7S3556C7[3]),  3,3},
  {&(_ZTV7S3556C7[9]),  9,9},
  {&(_tg__ZTV7S3556C4__7S3556C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3556C7[];
extern  VTBL_ENTRY _ZTV7S3556C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C7[];
Class_Descriptor cd_S3556C7 = {  "S3556C7", // class name
  bases_S3556C7, 4,
  &(vtc_S3556C7[0]), // expected_vtbl_contents
  &(vtt_S3556C7[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3556C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3556C7),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3556C7),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3556C2  : S3556C3 , virtual S3556C7 {
  ~S3556C2(); // tgen
  S3556C2(); // tgen
};
//SIG(-1 S3556C2) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m}}} VBC6{ BC7{ VBC4} VBC3}}


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

static void Test_S3556C2()
{
  extern Class_Descriptor cd_S3556C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3556C2, buf);
    S3556C2 *dp, &lv = *(dp=new (buf) S3556C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3556C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3556C2)");
    check_base_class_offset(lv, (S7368C78*)(S3556C4*), 0, "S3556C2");
    check_base_class_offset(lv, (S7368C78*)(S3556C8*)(S3556C7*), 0, "S3556C2");
    check_base_class_offset(lv, (S7368C51*)(S3556C4*), 0, "S3556C2");
    check_base_class_offset(lv, (S3556C4*)(S3556C3*), 0, "S3556C2");
    check_base_class_offset(lv, (S3556C4*)(S3556C7*), 0, "S3556C2");
    check_base_class_offset(lv, (S3556C3*), 0, "S3556C2");
    check_base_class_offset(lv, (S3556C8*)(S3556C7*), ABISELECT(8,4), "S3556C2");
    check_base_class_offset(lv, (S3556C7*), ABISELECT(8,4), "S3556C2");
    test_class_info(&lv, &cd_S3556C2);
    dp->~S3556C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3556C2(Test_S3556C2, "S3556C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3556C2C1Ev();
extern void _ZN7S3556C2D1Ev();
Name_Map name_map_S3556C2[] = {
  NSPAIR(_ZN7S3556C2C1Ev),
  NSPAIR(_ZN7S3556C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S3556C4;
extern VTBL_ENTRY _ZTI7S3556C4[];
extern  VTBL_ENTRY _ZTV7S3556C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C4[];
extern Class_Descriptor cd_S3556C3;
extern VTBL_ENTRY _ZTI7S3556C3[];
extern  VTBL_ENTRY _ZTV7S3556C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C3[];
extern Class_Descriptor cd_S3556C8;
extern VTBL_ENTRY _ZTI7S3556C8[];
extern  VTBL_ENTRY _ZTV7S3556C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C8[];
extern Class_Descriptor cd_S3556C7;
extern VTBL_ENTRY _ZTI7S3556C7[];
extern  VTBL_ENTRY _ZTV7S3556C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C7[];
static Base_Class bases_S3556C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3556C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3556C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3556C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3556C7,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3556C2[];
static  VTBL_ENTRY vtc_S3556C2[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C2[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3556C2[0]),
};
extern VTBL_ENTRY _ZTV7S3556C2[];
static  VTBL_ENTRY _tg__ZTV7S3556C3__7S3556C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C7__7S3556C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C87S3556C7__7S3556C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C7__7S3556C2[] = {
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
};
static  VTT_ENTRY vtt_S3556C2[] = {
  {&(_ZTV7S3556C2[6]),  6,11},
  {&(_tg__ZTV7S3556C3__7S3556C2[5]),  5,5},
  {&(_tg__ZTV7S3556C3__7S3556C2[5]),  5,5},
  {&(_ZTV7S3556C2[6]),  6,11},
  {&(_ZTV7S3556C2[11]),  11,11},
  {&(_tg__ZTV7S3556C4__7S3556C2[4]),  4,4},
  {&(_tg__ZTV7S3556C7__7S3556C2[5]),  5,5},
  {&(_tg__ZTV7S3556C87S3556C7__7S3556C2[3]),  3,3},
  {&(_tg__ZTV7S3556C4__7S3556C7__7S3556C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3556C2[];
extern  VTBL_ENTRY _ZTV7S3556C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C2[];
Class_Descriptor cd_S3556C2 = {  "S3556C2", // class name
  bases_S3556C2, 6,
  &(vtc_S3556C2[0]), // expected_vtbl_contents
  &(vtt_S3556C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3556C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3556C2),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3556C2),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3556C9  : virtual S7368C51 , virtual S3556C7 {
  ~S3556C9(); // tgen
  S3556C9(); // tgen
};
//SIG(-1 S3556C9) C1{ VBC2{ m} VBC3{ BC4{ VBC5{ m}} VBC6{ VBC5 VBC2}}}


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

static void Test_S3556C9()
{
  extern Class_Descriptor cd_S3556C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3556C9, buf);
    S3556C9 *dp, &lv = *(dp=new (buf) S3556C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3556C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3556C9)");
    check_base_class_offset(lv, (S7368C51*), 0, "S3556C9");
    check_base_class_offset(lv, (S7368C51*)(S3556C4*), 0, "S3556C9");
    check_base_class_offset(lv, (S7368C78*)(S3556C8*)(S3556C7*), 0, "S3556C9");
    check_base_class_offset(lv, (S7368C78*)(S3556C4*), 0, "S3556C9");
    check_base_class_offset(lv, (S3556C8*)(S3556C7*), 0, "S3556C9");
    check_base_class_offset(lv, (S3556C4*)(S3556C7*), ABISELECT(8,4), "S3556C9");
    check_base_class_offset(lv, (S3556C7*), 0, "S3556C9");
    test_class_info(&lv, &cd_S3556C9);
    dp->~S3556C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3556C9(Test_S3556C9, "S3556C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3556C9C1Ev();
extern void _ZN7S3556C9D1Ev();
Name_Map name_map_S3556C9[] = {
  NSPAIR(_ZN7S3556C9C1Ev),
  NSPAIR(_ZN7S3556C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S3556C8;
extern VTBL_ENTRY _ZTI7S3556C8[];
extern  VTBL_ENTRY _ZTV7S3556C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C8[];
extern Class_Descriptor cd_S3556C4;
extern VTBL_ENTRY _ZTI7S3556C4[];
extern  VTBL_ENTRY _ZTV7S3556C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C4[];
extern Class_Descriptor cd_S3556C7;
extern VTBL_ENTRY _ZTI7S3556C7[];
extern  VTBL_ENTRY _ZTV7S3556C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C7[];
static Base_Class bases_S3556C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3556C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3556C4,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3556C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3556C9[];
static  VTBL_ENTRY vtc_S3556C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C9[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3556C9[0]),
};
extern VTBL_ENTRY _ZTV7S3556C9[];
static  VTBL_ENTRY _tg__ZTV7S3556C7__7S3556C9[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C87S3556C7__7S3556C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C7__7S3556C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C4[0]),
};
static  VTT_ENTRY vtt_S3556C9[] = {
  {&(_ZTV7S3556C9[6]),  6,10},
  {&(_ZTV7S3556C9[6]),  6,10},
  {&(_ZTV7S3556C9[10]),  10,10},
  {&(_tg__ZTV7S3556C7__7S3556C9[5]),  5,5},
  {&(_tg__ZTV7S3556C87S3556C7__7S3556C9[3]),  3,3},
  {&(_tg__ZTV7S3556C4__7S3556C7__7S3556C9[4]),  4,4},
  {&(_tg__ZTV7S3556C4__7S3556C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3556C9[];
extern  VTBL_ENTRY _ZTV7S3556C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C9[];
Class_Descriptor cd_S3556C9 = {  "S3556C9", // class name
  bases_S3556C9, 5,
  &(vtc_S3556C9[0]), // expected_vtbl_contents
  &(vtt_S3556C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3556C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3556C9),10, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3556C9),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3556C1  : S3556C2 , S3556C9 {
  ~S3556C1(); // tgen
  S3556C1(); // tgen
};
//SIG(1 S3556C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m} VBC6{ m}}} VBC7{ BC8{ VBC5} VBC4}} BC9{ VBC6 VBC7}}


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

static void Test_S3556C1()
{
  extern Class_Descriptor cd_S3556C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3556C1, buf);
    S3556C1 *dp, &lv = *(dp=new (buf) S3556C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3556C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3556C1)");
    check_base_class_offset(lv, (S7368C78*)(S3556C4*), 0, "S3556C1");
    check_base_class_offset(lv, (S7368C78*)(S3556C8*)(S3556C7*), 0, "S3556C1");
    check_base_class_offset(lv, (S7368C51*)(S3556C4*), 0, "S3556C1");
    check_base_class_offset(lv, (S7368C51*)(S3556C9*), 0, "S3556C1");
    check_base_class_offset(lv, (S3556C4*)(S3556C3*)(S3556C2*), 0, "S3556C1");
    check_base_class_offset(lv, (S3556C4*)(S3556C7*), 0, "S3556C1");
    check_base_class_offset(lv, (S3556C3*)(S3556C2*), 0, "S3556C1");
    check_base_class_offset(lv, (S3556C8*)(S3556C7*), ABISELECT(8,4), "S3556C1");
    check_base_class_offset(lv, (S3556C7*)(S3556C2*), ABISELECT(8,4), "S3556C1");
    check_base_class_offset(lv, (S3556C7*)(S3556C9*), ABISELECT(8,4), "S3556C1");
    check_base_class_offset(lv, (S3556C2*), 0, "S3556C1");
    check_base_class_offset(lv, (S3556C9*), ABISELECT(8,4), "S3556C1");
    test_class_info(&lv, &cd_S3556C1);
    dp->~S3556C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3556C1(Test_S3556C1, "S3556C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3556C1C1Ev();
extern void _ZN7S3556C1D1Ev();
Name_Map name_map_S3556C1[] = {
  NSPAIR(_ZN7S3556C1C1Ev),
  NSPAIR(_ZN7S3556C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S3556C4;
extern VTBL_ENTRY _ZTI7S3556C4[];
extern  VTBL_ENTRY _ZTV7S3556C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C4[];
extern Class_Descriptor cd_S3556C3;
extern VTBL_ENTRY _ZTI7S3556C3[];
extern  VTBL_ENTRY _ZTV7S3556C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C3[];
extern Class_Descriptor cd_S3556C8;
extern VTBL_ENTRY _ZTI7S3556C8[];
extern  VTBL_ENTRY _ZTV7S3556C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C8[];
extern Class_Descriptor cd_S3556C7;
extern VTBL_ENTRY _ZTI7S3556C7[];
extern  VTBL_ENTRY _ZTV7S3556C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C7[];
extern Class_Descriptor cd_S3556C2;
extern VTBL_ENTRY _ZTI7S3556C2[];
extern  VTBL_ENTRY _ZTV7S3556C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C2[];
extern Class_Descriptor cd_S3556C9;
extern VTBL_ENTRY _ZTI7S3556C9[];
extern  VTBL_ENTRY _ZTV7S3556C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C9[];
static Base_Class bases_S3556C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3556C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3556C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3556C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3556C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3556C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3556C9,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3556C1[];
static  VTBL_ENTRY vtc_S3556C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C1[0]),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3556C1[0]),
};
extern VTBL_ENTRY _ZTV7S3556C1[];
static  VTBL_ENTRY _tg__ZTV7S3556C2__7S3556C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C37S3556C2__7S3556C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C7__7S3556C2__7S3556C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3556C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C9__7S3556C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C9__7S3556C1[] = {
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3556C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C7__7S3556C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C87S3556C7__7S3556C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3556C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3556C4__7S3556C7__7S3556C1[] = {
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3556C7[0]),
};
static  VTT_ENTRY vtt_S3556C1[] = {
  {&(_ZTV7S3556C1[6]),  6,12},
  {&(_tg__ZTV7S3556C2__7S3556C1[6]),  6,6},
  {&(_tg__ZTV7S3556C37S3556C2__7S3556C1[5]),  5,5},
  {&(_tg__ZTV7S3556C37S3556C2__7S3556C1[5]),  5,5},
  {&(_tg__ZTV7S3556C2__7S3556C1[6]),  6,6},
  {&(_tg__ZTV7S3556C7__7S3556C2__7S3556C1[5]),  5,5},
  {&(_tg__ZTV7S3556C9__7S3556C1[6]),  6,6},
  {&(_tg__ZTV7S3556C9__7S3556C1[6]),  6,6},
  {&(_tg__ZTV7S3556C4__7S3556C9__7S3556C1[4]),  4,4},
  {&(_ZTV7S3556C1[6]),  6,12},
  {&(_ZTV7S3556C1[12]),  12,12},
  {&(_ZTV7S3556C1[12]),  12,12},
  {&(_tg__ZTV7S3556C4__7S3556C1[4]),  4,4},
  {&(_tg__ZTV7S3556C7__7S3556C1[5]),  5,5},
  {&(_tg__ZTV7S3556C87S3556C7__7S3556C1[3]),  3,3},
  {&(_tg__ZTV7S3556C4__7S3556C7__7S3556C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S3556C1[];
extern  VTBL_ENTRY _ZTV7S3556C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3556C1[];
Class_Descriptor cd_S3556C1 = {  "S3556C1", // class name
  bases_S3556C1, 8,
  &(vtc_S3556C1[0]), // expected_vtbl_contents
  &(vtt_S3556C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3556C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3556C1),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3556C1),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9014C2  {
  virtual  ~S9014C2(); // _ZN7S9014C2D1Ev
  virtual void  v2(); // _ZN7S9014C22v2Ev
  virtual void  v3(); // _ZN7S9014C22v3Ev
  S9014C2(); // tgen
};
//SIG(-1 S9014C2) C1{ vd v1 v2}


 S9014C2 ::~S9014C2(){ note_dtor("S9014C2", this);}
void  S9014C2 ::v2(){vfunc_called(this, "_ZN7S9014C22v2Ev");}
void  S9014C2 ::v3(){vfunc_called(this, "_ZN7S9014C22v3Ev");}
S9014C2 ::S9014C2(){ note_ctor("S9014C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9014C2C1Ev();
extern void _ZN7S9014C2D1Ev();
Name_Map name_map_S9014C2[] = {
  NSPAIR(_ZN7S9014C2C1Ev),
  NSPAIR(_ZN7S9014C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9014C2[];
extern void _ZN7S9014C2D1Ev();
extern void _ZN7S9014C2D0Ev();
extern void _ZN7S9014C22v2Ev();
extern void _ZN7S9014C22v3Ev();
static  VTBL_ENTRY vtc_S9014C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9014C2[0]),
  (VTBL_ENTRY)&_ZN7S9014C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9014C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9014C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9014C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S9014C2[];
extern  VTBL_ENTRY _ZTV7S9014C2[];
Class_Descriptor cd_S9014C2 = {  "S9014C2", // class name
  0,0,//no base classes
  &(vtc_S9014C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9014C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9014C2),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  S9014C1  : S9014C2 {
  ::S2011C15_nt s9014c1f0;
  virtual  ~S9014C1(); // _ZN7S9014C1D1Ev
  virtual void  v1(); // _ZN7S9014C12v1Ev
  S9014C1(); // tgen
};
//SIG(1 S9014C1) C1{ BC2{ vd v2 v3} vd v1 FC3{ BC4{ vd v6 v7} vd v4 v5 FC5{ m Fp Fi FC6{ m}} FC5 Fi}}


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

static void Test_S9014C1()
{
  extern Class_Descriptor cd_S9014C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S9014C1, buf);
    S9014C1 *dp, &lv = *(dp=new (buf) S9014C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S9014C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9014C1)");
    check_base_class_offset(lv, (S9014C2*), 0, "S9014C1");
    check_field_offset(lv, s9014c1f0, ABISELECT(8,4), "S9014C1.s9014c1f0");
    test_class_info(&lv, &cd_S9014C1);
    dp->~S9014C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9014C1(Test_S9014C1, "S9014C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S9014C1C1Ev();
extern void _ZN7S9014C1D1Ev();
Name_Map name_map_S9014C1[] = {
  NSPAIR(_ZN7S9014C1C1Ev),
  NSPAIR(_ZN7S9014C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9014C2;
extern VTBL_ENTRY _ZTI7S9014C2[];
extern  VTBL_ENTRY _ZTV7S9014C2[];
static Base_Class bases_S9014C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9014C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9014C1[];
extern void _ZN7S9014C1D1Ev();
extern void _ZN7S9014C1D0Ev();
extern void _ZN7S9014C22v2Ev();
extern void _ZN7S9014C22v3Ev();
extern void _ZN7S9014C12v1Ev();
static  VTBL_ENTRY vtc_S9014C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9014C1[0]),
  (VTBL_ENTRY)&_ZN7S9014C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9014C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9014C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9014C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9014C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9014C1[];
extern  VTBL_ENTRY _ZTV7S9014C1[];
Class_Descriptor cd_S9014C1 = {  "S9014C1", // class name
  bases_S9014C1, 1,
  &(vtc_S9014C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S9014C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9014C1),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  S8815C2_nt  {
  void *s8815c2f0[2];
  virtual  ~S8815C2_nt(); // _ZN10S8815C2_ntD1Ev
  virtual void  v2(); // _ZN10S8815C2_nt2v2Ev
  S8815C2_nt(); // tgen
};
//SIG(-1 S8815C2_nt) C1{ vd v1 Fp[2]}


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

//skip512 S8815C2_nt

#else // __cplusplus

extern void _ZN10S8815C2_ntC1Ev();
extern void _ZN10S8815C2_ntD1Ev();
Name_Map name_map_S8815C2_nt[] = {
  NSPAIR(_ZN10S8815C2_ntC1Ev),
  NSPAIR(_ZN10S8815C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8815C2_nt[];
extern void _ZN10S8815C2_ntD1Ev();
extern void _ZN10S8815C2_ntD0Ev();
extern void _ZN10S8815C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8815C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8815C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8815C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8815C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8815C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8815C2_nt[];
VTBL_ENTRY *P__ZTI10S8815C2_nt = _ZTI10S8815C2_nt; 
extern  VTBL_ENTRY _ZTV10S8815C2_nt[];
Class_Descriptor cd_S8815C2_nt = {  "S8815C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8815C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8815C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8815C2_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  S8815C1  : S8815C2_nt {
  ::S499C36_nt s8815c1f0;
  __tsi64 s8815c1f1;
  ::S7368C9_nt s8815c1f2;
  void *s8815c1f3;
  int s8815c1f4;
  virtual  ~S8815C1(); // _ZN7S8815C1D1Ev
  virtual void  v1(); // _ZN7S8815C12v1Ev
  S8815C1(); // tgen
};
//SIG(1 S8815C1) C1{ BC2{ vd v2 Fp[2]} vd v1 FC3{ m Fp[2]} FL FC4{ m Fp Fi FC5{ m}} Fp Fi}


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

static void Test_S8815C1()
{
  extern Class_Descriptor cd_S8815C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S8815C1, buf);
    S8815C1 *dp, &lv = *(dp=new (buf) S8815C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S8815C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8815C1)");
    check_base_class_offset(lv, (S8815C2_nt*), 0, "S8815C1");
    check_field_offset(lv, s8815c1f0, ABISELECT(24,12), "S8815C1.s8815c1f0");
    check_field_offset(lv, s8815c1f1, ABISELECT(40,20), "S8815C1.s8815c1f1");
    check_field_offset(lv, s8815c1f2, ABISELECT(48,28), "S8815C1.s8815c1f2");
    check_field_offset(lv, s8815c1f3, ABISELECT(64,40), "S8815C1.s8815c1f3");
    check_field_offset(lv, s8815c1f4, ABISELECT(72,44), "S8815C1.s8815c1f4");
    test_class_info(&lv, &cd_S8815C1);
    dp->~S8815C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8815C1(Test_S8815C1, "S8815C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S8815C1C1Ev();
extern void _ZN7S8815C1D1Ev();
Name_Map name_map_S8815C1[] = {
  NSPAIR(_ZN7S8815C1C1Ev),
  NSPAIR(_ZN7S8815C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8815C2_nt;
extern VTBL_ENTRY _ZTI10S8815C2_nt[];
extern  VTBL_ENTRY _ZTV10S8815C2_nt[];
static Base_Class bases_S8815C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8815C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8815C1[];
extern void _ZN7S8815C1D1Ev();
extern void _ZN7S8815C1D0Ev();
extern void _ZN10S8815C2_nt2v2Ev();
extern void _ZN7S8815C12v1Ev();
static  VTBL_ENTRY vtc_S8815C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8815C1[0]),
  (VTBL_ENTRY)&_ZN7S8815C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8815C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8815C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8815C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8815C1[];
extern  VTBL_ENTRY _ZTV7S8815C1[];
Class_Descriptor cd_S8815C1 = {  "S8815C1", // class name
  bases_S8815C1, 1,
  &(vtc_S8815C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S8815C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8815C1),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  S11793C3  {
  char s11793c3f0[1592];
  int s11793c3f1;
};
//SIG(-1 S11793C3) C1{ Fc[1592] Fi}



static void Test_S11793C3()
{
  {
    init_simple_test("S11793C3");
    S11793C3 lv;
    check2(sizeof(lv), 1596, "sizeof(S11793C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11793C3)");
    check_field_offset(lv, s11793c3f0, 0, "S11793C3.s11793c3f0");
    check_field_offset(lv, s11793c3f1, 1592, "S11793C3.s11793c3f1");
  }
}
static Arrange_To_Call_Me vS11793C3(Test_S11793C3, "S11793C3", 1596);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11793C4_nt  {
  void *s11793c4f0;
  int s11793c4f1;
};
//SIG(-1 S11793C4_nt) C1{ Fp Fi}



//skip512 S11793C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S11793C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11793C5_nt  {
  ::S11793C6_nt s11793c5f0;
  char s11793c5f1[16];
};
//SIG(-1 S11793C5_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S11793C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11793C1  {
  ::S2152C11_nt s11793c1f0;
  int s11793c1f1;
  ::S11793C3 s11793c1f2;
  ::S11793C4_nt s11793c1f3;
  ::S11793C5_nt s11793c1f4;
  int s11793c1f5;
};
//SIG(1 S11793C1) C1{ FC2{ FL} Fi FC3{ Fc[1592] Fi} FC4{ Fp Fi} FC5{ FC6{ Fc[20]} Fc[16]} Fi}



static void Test_S11793C1()
{
  {
    init_simple_test("S11793C1");
    S11793C1 lv;
    check2(sizeof(lv), ABISELECT(1664,1656), "sizeof(S11793C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11793C1)");
    check_field_offset(lv, s11793c1f0, 0, "S11793C1.s11793c1f0");
    check_field_offset(lv, s11793c1f1, 8, "S11793C1.s11793c1f1");
    check_field_offset(lv, s11793c1f2, 12, "S11793C1.s11793c1f2");
    check_field_offset(lv, s11793c1f3, 1608, "S11793C1.s11793c1f3");
    check_field_offset(lv, s11793c1f4, ABISELECT(1624,1616), "S11793C1.s11793c1f4");
    check_field_offset(lv, s11793c1f5, ABISELECT(1660,1652), "S11793C1.s11793c1f5");
  }
}
static Arrange_To_Call_Me vS11793C1(Test_S11793C1, "S11793C1", ABISELECT(1664,1656));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19628C2  : S7368C18_nt {
  void *s19628c2f0;
  int s19628c2f1;
  char s19628c2f2;
  virtual  ~S19628C2(); // _ZN8S19628C2D1Ev
  S19628C2(); // tgen
};
//SIG(-1 S19628C2) C1{ BC2{ vd m Fp} vd Fp Fi Fc}


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

static void Test_S19628C2()
{
  extern Class_Descriptor cd_S19628C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19628C2, buf);
    S19628C2 *dp, &lv = *(dp=new (buf) S19628C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19628C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19628C2)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S19628C2");
    check_field_offset(lv, s19628c2f0, ABISELECT(16,8), "S19628C2.s19628c2f0");
    check_field_offset(lv, s19628c2f1, ABISELECT(24,12), "S19628C2.s19628c2f1");
    check_field_offset(lv, s19628c2f2, ABISELECT(28,16), "S19628C2.s19628c2f2");
    test_class_info(&lv, &cd_S19628C2);
    dp->~S19628C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19628C2(Test_S19628C2, "S19628C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19628C2C1Ev();
extern void _ZN8S19628C2D1Ev();
Name_Map name_map_S19628C2[] = {
  NSPAIR(_ZN8S19628C2C1Ev),
  NSPAIR(_ZN8S19628C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S19628C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19628C2[];
extern void _ZN8S19628C2D1Ev();
extern void _ZN8S19628C2D0Ev();
static  VTBL_ENTRY vtc_S19628C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19628C2[0]),
  (VTBL_ENTRY)&_ZN8S19628C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19628C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19628C2[];
extern  VTBL_ENTRY _ZTV8S19628C2[];
Class_Descriptor cd_S19628C2 = {  "S19628C2", // class name
  bases_S19628C2, 1,
  &(vtc_S19628C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19628C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19628C2),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  S19628C4  : S7368C18_nt {
  void *s19628c4f0;
  int s19628c4f1;
  char s19628c4f2;
  virtual  ~S19628C4(); // _ZN8S19628C4D1Ev
  S19628C4(); // tgen
};
//SIG(-1 S19628C4) C1{ BC2{ vd m Fp} vd Fp Fi Fc}


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

static void Test_S19628C4()
{
  extern Class_Descriptor cd_S19628C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19628C4, buf);
    S19628C4 *dp, &lv = *(dp=new (buf) S19628C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19628C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19628C4)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S19628C4");
    check_field_offset(lv, s19628c4f0, ABISELECT(16,8), "S19628C4.s19628c4f0");
    check_field_offset(lv, s19628c4f1, ABISELECT(24,12), "S19628C4.s19628c4f1");
    check_field_offset(lv, s19628c4f2, ABISELECT(28,16), "S19628C4.s19628c4f2");
    test_class_info(&lv, &cd_S19628C4);
    dp->~S19628C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19628C4(Test_S19628C4, "S19628C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19628C4C1Ev();
extern void _ZN8S19628C4D1Ev();
Name_Map name_map_S19628C4[] = {
  NSPAIR(_ZN8S19628C4C1Ev),
  NSPAIR(_ZN8S19628C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S19628C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19628C4[];
extern void _ZN8S19628C4D1Ev();
extern void _ZN8S19628C4D0Ev();
static  VTBL_ENTRY vtc_S19628C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19628C4[0]),
  (VTBL_ENTRY)&_ZN8S19628C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19628C4D0Ev,
};
extern VTBL_ENTRY _ZTI8S19628C4[];
extern  VTBL_ENTRY _ZTV8S19628C4[];
Class_Descriptor cd_S19628C4 = {  "S19628C4", // class name
  bases_S19628C4, 1,
  &(vtc_S19628C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19628C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19628C4),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  S19628C1  : virtual S19628C2 , virtual S19628C4 {
  ::S8210C22 s19628c1f0;
  ~S19628C1(); // tgen
  S19628C1(); // tgen
};
//SIG(1 S19628C1) C1{ VBC2{ BC3{ vd m Fp} vd Fp Fi Fc} VBC4{ BC3 vd Fp Fi Fc} FC5{ m Fp}}


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

static void Test_S19628C1()
{
  extern Class_Descriptor cd_S19628C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S19628C1, buf);
    S19628C1 *dp, &lv = *(dp=new (buf) S19628C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19628C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19628C1)");
    check_base_class_offset(lv, (S7368C18_nt*)(S19628C2*), ABISELECT(16,8), "S19628C1");
    check_base_class_offset(lv, (S19628C2*), ABISELECT(16,8), "S19628C1");
    check_base_class_offset(lv, (S7368C18_nt*)(S19628C4*), ABISELECT(48,28), "S19628C1");
    check_base_class_offset(lv, (S19628C4*), ABISELECT(48,28), "S19628C1");
    check_field_offset(lv, s19628c1f0, ABISELECT(8,4), "S19628C1.s19628c1f0");
    test_class_info(&lv, &cd_S19628C1);
    dp->~S19628C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19628C1(Test_S19628C1, "S19628C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S19628C1C1Ev();
extern void _ZN8S19628C1D1Ev();
Name_Map name_map_S19628C1[] = {
  NSPAIR(_ZN8S19628C1C1Ev),
  NSPAIR(_ZN8S19628C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
extern Class_Descriptor cd_S19628C2;
extern VTBL_ENTRY _ZTI8S19628C2[];
extern  VTBL_ENTRY _ZTV8S19628C2[];
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
extern Class_Descriptor cd_S19628C4;
extern VTBL_ENTRY _ZTI8S19628C4[];
extern  VTBL_ENTRY _ZTV8S19628C4[];
static Base_Class bases_S19628C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19628C2,    ABISELECT(16,8), //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7368C18_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19628C4,    ABISELECT(48,28), //bcp->offset
    11, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19628C1[];
extern void _ZN8S19628C1D1Ev();
extern void _ZN8S19628C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19628C1D1Ev,_ZTv0_n12_N8S19628C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19628C1D1Ev,_ZThn8_N8S19628C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19628C1D0Ev,_ZTv0_n12_N8S19628C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19628C1D0Ev,_ZThn8_N8S19628C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19628C1D1Ev,_ZTv0_n12_N8S19628C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19628C1D1Ev,_ZThn28_N8S19628C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19628C1D0Ev,_ZTv0_n12_N8S19628C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19628C1D0Ev,_ZThn28_N8S19628C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19628C1[] = {
  ABISELECT(48,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19628C1[0]),
  (VTBL_ENTRY)&_ZN8S19628C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19628C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19628C1D1Ev,_ZTv0_n12_N8S19628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19628C1D0Ev,_ZTv0_n12_N8S19628C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19628C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19628C1D1Ev,_ZTv0_n12_N8S19628C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19628C1D0Ev,_ZTv0_n12_N8S19628C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19628C1[];
static  VTT_ENTRY vtt_S19628C1[] = {
  {&(_ZTV8S19628C1[4]),  4,16},
  {&(_ZTV8S19628C1[9]),  9,16},
  {&(_ZTV8S19628C1[14]),  14,16},
};
extern VTBL_ENTRY _ZTI8S19628C1[];
extern  VTBL_ENTRY _ZTV8S19628C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19628C1[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19628C1D0Ev,_ZTv0_n12_N8S19628C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19628C1D0Ev,_ZThn28_N8S19628C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19628C1D0Ev,_ZThn8_N8S19628C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19628C1D1Ev,_ZTv0_n12_N8S19628C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19628C1D1Ev,_ZThn28_N8S19628C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19628C1D1Ev,_ZThn8_N8S19628C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19628C1 = {  "S19628C1", // class name
  bases_S19628C1, 4,
  &(vtc_S19628C1[0]), // expected_vtbl_contents
  &(vtt_S19628C1[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S19628C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19628C1),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19628C1),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17146C1  {
  int s17146c1f0[2];
  void *s17146c1f1[3];
  ::S7368C69_nt s17146c1f2;
  ::S7368C69_nt s17146c1f3;
  char s17146c1f4[2];
  int s17146c1f5;
  ::S499C21_nt s17146c1f6;
  void  mf17146c1(); // _ZN8S17146C19mf17146c1Ev
};
//SIG(1 S17146C1) C1{ m Fi[2] Fp[3] FC2{ m FC3{ m FL[2]}} FC2 Fc[2] Fi FC4{ m Fi[4]}}


void  S17146C1 ::mf17146c1(){}

static void Test_S17146C1()
{
  {
    init_simple_test("S17146C1");
    S17146C1 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S17146C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17146C1)");
    check_field_offset(lv, s17146c1f0, 0, "S17146C1.s17146c1f0");
    check_field_offset(lv, s17146c1f1, 8, "S17146C1.s17146c1f1");
    check_field_offset(lv, s17146c1f2, ABISELECT(32,20), "S17146C1.s17146c1f2");
    check_field_offset(lv, s17146c1f3, ABISELECT(48,36), "S17146C1.s17146c1f3");
    check_field_offset(lv, s17146c1f4, ABISELECT(64,52), "S17146C1.s17146c1f4");
    check_field_offset(lv, s17146c1f5, ABISELECT(68,56), "S17146C1.s17146c1f5");
    check_field_offset(lv, s17146c1f6, ABISELECT(72,60), "S17146C1.s17146c1f6");
  }
}
static Arrange_To_Call_Me vS17146C1(Test_S17146C1, "S17146C1", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5441C2  : S2011C14_nt {
  virtual void  v8(); // _ZN7S5441C22v8Ev
  virtual void  v9(); // _ZN7S5441C22v9Ev
  virtual void  v10(); // _ZN7S5441C23v10Ev
  virtual void  v11(); // _ZN7S5441C23v11Ev
  virtual void  v12(); // _ZN7S5441C23v12Ev
  ~S5441C2(); // tgen
  S5441C2(); // tgen
};
//SIG(-1 S5441C2) C1{ BC2{ vd} v1 v2 v3 v4 v5}


void  S5441C2 ::v8(){vfunc_called(this, "_ZN7S5441C22v8Ev");}
void  S5441C2 ::v9(){vfunc_called(this, "_ZN7S5441C22v9Ev");}
void  S5441C2 ::v10(){vfunc_called(this, "_ZN7S5441C23v10Ev");}
void  S5441C2 ::v11(){vfunc_called(this, "_ZN7S5441C23v11Ev");}
void  S5441C2 ::v12(){vfunc_called(this, "_ZN7S5441C23v12Ev");}
S5441C2 ::~S5441C2(){ note_dtor("S5441C2", this);} // tgen
S5441C2 ::S5441C2(){ note_ctor("S5441C2", this);} // tgen

static void Test_S5441C2()
{
  extern Class_Descriptor cd_S5441C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5441C2, buf);
    S5441C2 *dp, &lv = *(dp=new (buf) S5441C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5441C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5441C2)");
    check_base_class_offset(lv, (S2011C14_nt*), 0, "S5441C2");
    test_class_info(&lv, &cd_S5441C2);
    dp->~S5441C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5441C2(Test_S5441C2, "S5441C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5441C2C1Ev();
extern void _ZN7S5441C2D1Ev();
Name_Map name_map_S5441C2[] = {
  NSPAIR(_ZN7S5441C2C1Ev),
  NSPAIR(_ZN7S5441C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
static Base_Class bases_S5441C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5441C2[];
extern void _ZN7S5441C2D1Ev();
extern void _ZN7S5441C2D0Ev();
extern void _ZN7S5441C22v8Ev();
extern void _ZN7S5441C22v9Ev();
extern void _ZN7S5441C23v10Ev();
extern void _ZN7S5441C23v11Ev();
extern void _ZN7S5441C23v12Ev();
static  VTBL_ENTRY vtc_S5441C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5441C2[0]),
  (VTBL_ENTRY)&_ZN7S5441C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5441C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5441C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5441C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5441C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5441C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5441C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5441C2[];
extern  VTBL_ENTRY _ZTV7S5441C2[];
Class_Descriptor cd_S5441C2 = {  "S5441C2", // class name
  bases_S5441C2, 1,
  &(vtc_S5441C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5441C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5441C2),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  S5441C1  : S5441C2 {
  int s5441c1f0[3];
  virtual  ~S5441C1(); // _ZN7S5441C1D1Ev
  virtual void  v1(); // _ZN7S5441C12v1Ev
  virtual void  v2(); // _ZN7S5441C12v2Ev
  virtual void  v3(); // _ZN7S5441C12v3Ev
  virtual void  v4(); // _ZN7S5441C12v4Ev
  virtual void  v5(); // _ZN7S5441C12v5Ev
  virtual void  v6(); // _ZN7S5441C12v6Ev
  virtual void  v7(); // _ZN7S5441C12v7Ev
  S5441C1(); // tgen
};
//SIG(1 S5441C1) C1{ BC2{ BC3{ vd} v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 v6 v7 Fi[3]}


 S5441C1 ::~S5441C1(){ note_dtor("S5441C1", this);}
void  S5441C1 ::v1(){vfunc_called(this, "_ZN7S5441C12v1Ev");}
void  S5441C1 ::v2(){vfunc_called(this, "_ZN7S5441C12v2Ev");}
void  S5441C1 ::v3(){vfunc_called(this, "_ZN7S5441C12v3Ev");}
void  S5441C1 ::v4(){vfunc_called(this, "_ZN7S5441C12v4Ev");}
void  S5441C1 ::v5(){vfunc_called(this, "_ZN7S5441C12v5Ev");}
void  S5441C1 ::v6(){vfunc_called(this, "_ZN7S5441C12v6Ev");}
void  S5441C1 ::v7(){vfunc_called(this, "_ZN7S5441C12v7Ev");}
S5441C1 ::S5441C1(){ note_ctor("S5441C1", this);} // tgen

static void Test_S5441C1()
{
  extern Class_Descriptor cd_S5441C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5441C1, buf);
    S5441C1 *dp, &lv = *(dp=new (buf) S5441C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5441C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5441C1)");
    check_base_class_offset(lv, (S2011C14_nt*)(S5441C2*), 0, "S5441C1");
    check_base_class_offset(lv, (S5441C2*), 0, "S5441C1");
    check_field_offset(lv, s5441c1f0, ABISELECT(8,4), "S5441C1.s5441c1f0");
    test_class_info(&lv, &cd_S5441C1);
    dp->~S5441C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5441C1(Test_S5441C1, "S5441C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S5441C1C1Ev();
extern void _ZN7S5441C1D1Ev();
Name_Map name_map_S5441C1[] = {
  NSPAIR(_ZN7S5441C1C1Ev),
  NSPAIR(_ZN7S5441C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
extern Class_Descriptor cd_S5441C2;
extern VTBL_ENTRY _ZTI7S5441C2[];
extern  VTBL_ENTRY _ZTV7S5441C2[];
static Base_Class bases_S5441C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5441C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5441C1[];
extern void _ZN7S5441C1D1Ev();
extern void _ZN7S5441C1D0Ev();
extern void _ZN7S5441C22v8Ev();
extern void _ZN7S5441C22v9Ev();
extern void _ZN7S5441C23v10Ev();
extern void _ZN7S5441C23v11Ev();
extern void _ZN7S5441C23v12Ev();
extern void _ZN7S5441C12v1Ev();
extern void _ZN7S5441C12v2Ev();
extern void _ZN7S5441C12v3Ev();
extern void _ZN7S5441C12v4Ev();
extern void _ZN7S5441C12v5Ev();
extern void _ZN7S5441C12v6Ev();
extern void _ZN7S5441C12v7Ev();
static  VTBL_ENTRY vtc_S5441C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5441C1[0]),
  (VTBL_ENTRY)&_ZN7S5441C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5441C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5441C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5441C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5441C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5441C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5441C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5441C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5441C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5441C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5441C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5441C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5441C12v6Ev,
  (VTBL_ENTRY)&_ZN7S5441C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S5441C1[];
extern  VTBL_ENTRY _ZTV7S5441C1[];
Class_Descriptor cd_S5441C1 = {  "S5441C1", // class name
  bases_S5441C1, 2,
  &(vtc_S5441C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S5441C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5441C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14047C1  {
  void *s14047c1f0;
  char s14047c1f1;
  ::S4469C14 s14047c1f2;
  void *s14047c1f3;
  ::S499C21_nt s14047c1f4;
};
//SIG(1 S14047C1) C1{ Fp Fc FC2{ m FC3{ m FC4{ vd m FL Fc} FC4} FC3} Fp FC5{ m Fi[4]}}



static void Test_S14047C1()
{
  {
    init_simple_test("S14047C1");
    S14047C1 lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S14047C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14047C1)");
    check_field_offset(lv, s14047c1f0, 0, "S14047C1.s14047c1f0");
    check_field_offset(lv, s14047c1f1, ABISELECT(8,4), "S14047C1.s14047c1f1");
    check_field_offset(lv, s14047c1f2, ABISELECT(16,8), "S14047C1.s14047c1f2");
    check_field_offset(lv, s14047c1f3, ABISELECT(112,72), "S14047C1.s14047c1f3");
    check_field_offset(lv, s14047c1f4, ABISELECT(120,76), "S14047C1.s14047c1f4");
  }
}
static Arrange_To_Call_Me vS14047C1(Test_S14047C1, "S14047C1", ABISELECT(136,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7891C4_nt  {
  virtual  ~S7891C4_nt(); // _ZN10S7891C4_ntD1Ev
  S7891C4_nt(); // tgen
};
//SIG(-1 S7891C4_nt) C1{ vd}


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

//skip512 S7891C4_nt

#else // __cplusplus

extern void _ZN10S7891C4_ntC1Ev();
extern void _ZN10S7891C4_ntD1Ev();
Name_Map name_map_S7891C4_nt[] = {
  NSPAIR(_ZN10S7891C4_ntC1Ev),
  NSPAIR(_ZN10S7891C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7891C4_nt[];
extern void _ZN10S7891C4_ntD1Ev();
extern void _ZN10S7891C4_ntD0Ev();
static  VTBL_ENTRY vtc_S7891C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7891C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7891C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7891C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S7891C4_nt[];
VTBL_ENTRY *P__ZTI10S7891C4_nt = _ZTI10S7891C4_nt; 
extern  VTBL_ENTRY _ZTV10S7891C4_nt[];
Class_Descriptor cd_S7891C4_nt = {  "S7891C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7891C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7891C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7891C4_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  S7891C5  {
  virtual  ~S7891C5(); // _ZN7S7891C5D1Ev
  S7891C5(); // tgen
};
//SIG(-1 S7891C5) C1{ vd}


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

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

#else // __cplusplus

extern void _ZN7S7891C5C1Ev();
extern void _ZN7S7891C5D1Ev();
Name_Map name_map_S7891C5[] = {
  NSPAIR(_ZN7S7891C5C1Ev),
  NSPAIR(_ZN7S7891C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7891C5[];
extern void _ZN7S7891C5D1Ev();
extern void _ZN7S7891C5D0Ev();
static  VTBL_ENTRY vtc_S7891C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7891C5[0]),
  (VTBL_ENTRY)&_ZN7S7891C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7891C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
Class_Descriptor cd_S7891C5 = {  "S7891C5", // class name
  0,0,//no base classes
  &(vtc_S7891C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7891C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7891C5),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  S7891C2  : virtual S2011C14_nt , virtual S7891C4_nt , virtual S7891C5 {
  virtual  ~S7891C2(); // _ZN7S7891C2D2Ev
  S7891C2(); // tgen
};
//SIG(-1 S7891C2) C1{ VBC2{ vd} VBC3{ vd} VBC4{ vd} vd}


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

static void Test_S7891C2()
{
  extern Class_Descriptor cd_S7891C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7891C2, buf);
    S7891C2 *dp, &lv = *(dp=new (buf) S7891C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7891C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7891C2)");
    check_base_class_offset(lv, (S2011C14_nt*), 0, "S7891C2");
    check_base_class_offset(lv, (S7891C4_nt*), ABISELECT(8,4), "S7891C2");
    check_base_class_offset(lv, (S7891C5*), ABISELECT(16,8), "S7891C2");
    test_class_info(&lv, &cd_S7891C2);
    dp->~S7891C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7891C2(Test_S7891C2, "S7891C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7891C2C1Ev();
extern void _ZN7S7891C2D2Ev();
Name_Map name_map_S7891C2[] = {
  NSPAIR(_ZN7S7891C2C1Ev),
  NSPAIR(_ZN7S7891C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
extern Class_Descriptor cd_S7891C4_nt;
extern VTBL_ENTRY _ZTI10S7891C4_nt[];
extern  VTBL_ENTRY _ZTV10S7891C4_nt[];
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
static Base_Class bases_S7891C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7891C4_nt,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7891C5,    ABISELECT(16,8), //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7891C2[];
extern void _ZN7S7891C2D1Ev();
extern void _ZN7S7891C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7891C2D1Ev,_ZThn4_N7S7891C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7891C2D0Ev,_ZThn4_N7S7891C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7891C2D1Ev,_ZThn8_N7S7891C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7891C2D0Ev,_ZThn8_N7S7891C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7891C2[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7891C2[0]),
  (VTBL_ENTRY)&_ZN7S7891C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7891C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7891C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7891C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7891C2[];
static  VTT_ENTRY vtt_S7891C2[] = {
  {&(_ZTV7S7891C2[6]),  6,18},
  {&(_ZTV7S7891C2[6]),  6,18},
  {&(_ZTV7S7891C2[11]),  11,18},
  {&(_ZTV7S7891C2[16]),  16,18},
};
extern VTBL_ENTRY _ZTI7S7891C2[];
extern  VTBL_ENTRY _ZTV7S7891C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7891C2[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C2D0Ev,_ZThn8_N7S7891C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7891C2D0Ev,_ZThn4_N7S7891C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C2D1Ev,_ZThn8_N7S7891C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7891C2D1Ev,_ZThn4_N7S7891C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7891C2 = {  "S7891C2", // class name
  bases_S7891C2, 3,
  &(vtc_S7891C2[0]), // expected_vtbl_contents
  &(vtt_S7891C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7891C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7891C2),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7891C2),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7891C6  : virtual S2011C14_nt , virtual S7891C5 , virtual S7891C4_nt {
  virtual  ~S7891C6(); // _ZN7S7891C6D2Ev
  S7891C6(); // tgen
};
//SIG(-1 S7891C6) C1{ VBC2{ vd} VBC3{ vd} VBC4{ vd} vd}


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

static void Test_S7891C6()
{
  extern Class_Descriptor cd_S7891C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7891C6, buf);
    S7891C6 *dp, &lv = *(dp=new (buf) S7891C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7891C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7891C6)");
    check_base_class_offset(lv, (S2011C14_nt*), 0, "S7891C6");
    check_base_class_offset(lv, (S7891C5*), ABISELECT(8,4), "S7891C6");
    check_base_class_offset(lv, (S7891C4_nt*), ABISELECT(16,8), "S7891C6");
    test_class_info(&lv, &cd_S7891C6);
    dp->~S7891C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7891C6(Test_S7891C6, "S7891C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7891C6C1Ev();
extern void _ZN7S7891C6D2Ev();
Name_Map name_map_S7891C6[] = {
  NSPAIR(_ZN7S7891C6C1Ev),
  NSPAIR(_ZN7S7891C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
extern Class_Descriptor cd_S7891C4_nt;
extern VTBL_ENTRY _ZTI10S7891C4_nt[];
extern  VTBL_ENTRY _ZTV10S7891C4_nt[];
static Base_Class bases_S7891C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7891C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7891C4_nt,    ABISELECT(16,8), //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7891C6[];
extern void _ZN7S7891C6D1Ev();
extern void _ZN7S7891C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7891C6D1Ev,_ZThn4_N7S7891C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7891C6D0Ev,_ZThn4_N7S7891C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7891C6D1Ev,_ZThn8_N7S7891C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7891C6D0Ev,_ZThn8_N7S7891C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7891C6[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7891C6[0]),
  (VTBL_ENTRY)&_ZN7S7891C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7891C6D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7891C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7891C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7891C6[];
static  VTT_ENTRY vtt_S7891C6[] = {
  {&(_ZTV7S7891C6[6]),  6,18},
  {&(_ZTV7S7891C6[6]),  6,18},
  {&(_ZTV7S7891C6[11]),  11,18},
  {&(_ZTV7S7891C6[16]),  16,18},
};
extern VTBL_ENTRY _ZTI7S7891C6[];
extern  VTBL_ENTRY _ZTV7S7891C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7891C6[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C6D0Ev,_ZThn8_N7S7891C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7891C6D0Ev,_ZThn4_N7S7891C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C6D1Ev,_ZThn8_N7S7891C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7891C6D1Ev,_ZThn4_N7S7891C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7891C6 = {  "S7891C6", // class name
  bases_S7891C6, 3,
  &(vtc_S7891C6[0]), // expected_vtbl_contents
  &(vtt_S7891C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7891C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7891C6),18, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7891C6),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7891C1  : S7891C2 , S7891C6 {
  virtual  ~S7891C1(); // _ZN7S7891C1D2Ev
  S7891C1(); // tgen
};
//SIG(1 S7891C1) C1{ BC2{ VBC3{ vd} VBC4{ vd} VBC5{ vd} vd} BC6{ VBC3 VBC5 VBC4 vd} vd}


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

static void Test_S7891C1()
{
  extern Class_Descriptor cd_S7891C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7891C1, buf);
    S7891C1 *dp, &lv = *(dp=new (buf) S7891C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7891C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7891C1)");
    check_base_class_offset(lv, (S2011C14_nt*)(S7891C2*), 0, "S7891C1");
    check_base_class_offset(lv, (S2011C14_nt*)(S7891C6*), 0, "S7891C1");
    check_base_class_offset(lv, (S7891C4_nt*)(S7891C2*), ABISELECT(16,8), "S7891C1");
    check_base_class_offset(lv, (S7891C4_nt*)(S7891C6*), ABISELECT(16,8), "S7891C1");
    check_base_class_offset(lv, (S7891C5*)(S7891C2*), ABISELECT(24,12), "S7891C1");
    check_base_class_offset(lv, (S7891C5*)(S7891C6*), ABISELECT(24,12), "S7891C1");
    check_base_class_offset(lv, (S7891C2*), 0, "S7891C1");
    check_base_class_offset(lv, (S7891C6*), ABISELECT(8,4), "S7891C1");
    test_class_info(&lv, &cd_S7891C1);
    dp->~S7891C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7891C1(Test_S7891C1, "S7891C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7891C1C1Ev();
extern void _ZN7S7891C1D2Ev();
Name_Map name_map_S7891C1[] = {
  NSPAIR(_ZN7S7891C1C1Ev),
  NSPAIR(_ZN7S7891C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2011C14_nt;
extern VTBL_ENTRY _ZTI11S2011C14_nt[];
extern  VTBL_ENTRY _ZTV11S2011C14_nt[];
extern Class_Descriptor cd_S7891C4_nt;
extern VTBL_ENTRY _ZTI10S7891C4_nt[];
extern  VTBL_ENTRY _ZTV10S7891C4_nt[];
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
extern Class_Descriptor cd_S7891C2;
extern VTBL_ENTRY _ZTI7S7891C2[];
extern  VTBL_ENTRY _ZTV7S7891C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7891C2[];
extern Class_Descriptor cd_S7891C6;
extern VTBL_ENTRY _ZTI7S7891C6[];
extern  VTBL_ENTRY _ZTV7S7891C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7891C6[];
static Base_Class bases_S7891C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2011C14_nt,    0, //bcp->offset
    -1, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7891C4_nt,    ABISELECT(16,8), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7891C5,    ABISELECT(24,12), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7891C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7891C6,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7891C1[];
extern void _ZN7S7891C1D1Ev();
extern void _ZN7S7891C1D0Ev();
extern void ABISELECT(_ZThn8_N7S7891C1D1Ev,_ZThn4_N7S7891C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7891C1D0Ev,_ZThn4_N7S7891C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7891C1D1Ev,_ZTv0_n12_N7S7891C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7891C1D1Ev,_ZThn8_N7S7891C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C1D0Ev,_ZTv0_n12_N7S7891C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7891C1D0Ev,_ZThn8_N7S7891C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C1D1Ev,_ZTv0_n12_N7S7891C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7891C1D1Ev,_ZThn12_N7S7891C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C1D0Ev,_ZTv0_n12_N7S7891C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7891C1D0Ev,_ZThn12_N7S7891C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7891C1[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7891C1[0]),
  (VTBL_ENTRY)&_ZN7S7891C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7891C1D0Ev,
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7891C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7891C1D1Ev,_ZThn4_N7S7891C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7891C1D0Ev,_ZThn4_N7S7891C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7891C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C1D1Ev,_ZTv0_n12_N7S7891C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C1D0Ev,_ZTv0_n12_N7S7891C1D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7891C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C1D1Ev,_ZTv0_n12_N7S7891C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C1D0Ev,_ZTv0_n12_N7S7891C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7891C1[];
extern void _ZN7S7891C2D1Ev();
extern void _ZN7S7891C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7891C2__7S7891C1[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7891C2[0]),
  (VTBL_ENTRY)&_ZN7S7891C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7891C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7891C2D1Ev,_ZThn8_N7S7891C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7891C2D0Ev,_ZThn8_N7S7891C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7891C4_nt__7S7891C2__7S7891C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7891C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7891C2D1Ev,_ZThn12_N7S7891C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7891C2D0Ev,_ZThn12_N7S7891C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7891C5__7S7891C2__7S7891C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7891C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev),
};
extern void _ZN7S7891C6D1Ev();
extern void _ZN7S7891C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7891C6__7S7891C1[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7891C6[0]),
  (VTBL_ENTRY)&_ZN7S7891C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7891C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S2011C14_nt__7S7891C6__7S7891C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7891C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7891C6D1Ev,_ZThn8_N7S7891C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7891C6D0Ev,_ZThn8_N7S7891C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7891C5__7S7891C6__7S7891C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7891C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7891C6D1Ev,_ZThn4_N7S7891C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7891C6D0Ev,_ZThn4_N7S7891C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7891C4_nt__7S7891C6__7S7891C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7891C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev),
};
static  VTT_ENTRY vtt_S7891C1[] = {
  {&(_ZTV7S7891C1[6]),  6,26},
  {&(_tg__ZTV7S7891C2__7S7891C1[6]),  6,8},
  {&(_tg__ZTV7S7891C2__7S7891C1[6]),  6,8},
  {&(_tg__ZTV10S7891C4_nt__7S7891C2__7S7891C1[3]),  3,5},
  {&(_tg__ZTV7S7891C5__7S7891C2__7S7891C1[3]),  3,5},
  {&(_tg__ZTV7S7891C6__7S7891C1[6]),  6,8},
  {&(_tg__ZTV11S2011C14_nt__7S7891C6__7S7891C1[3]),  3,5},
  {&(_tg__ZTV7S7891C5__7S7891C6__7S7891C1[3]),  3,5},
  {&(_tg__ZTV10S7891C4_nt__7S7891C6__7S7891C1[3]),  3,5},
  {&(_ZTV7S7891C1[6]),  6,26},
  {&(_ZTV7S7891C1[19]),  19,26},
  {&(_ZTV7S7891C1[24]),  24,26},
  {&(_ZTV7S7891C1[14]),  14,26},
};
extern VTBL_ENTRY _ZTI7S7891C1[];
extern  VTBL_ENTRY _ZTV7S7891C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7891C1[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C6D0Ev,_ZTv0_n12_N7S7891C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7891C6D0Ev,_ZThn4_N7S7891C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C6D0Ev,_ZThn8_N7S7891C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C6D1Ev,_ZTv0_n12_N7S7891C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7891C6D1Ev,_ZThn4_N7S7891C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C6D1Ev,_ZThn8_N7S7891C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C2D0Ev,_ZTv0_n12_N7S7891C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7891C2D0Ev,_ZThn12_N7S7891C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C2D0Ev,_ZThn8_N7S7891C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C2D1Ev,_ZTv0_n12_N7S7891C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7891C2D1Ev,_ZThn12_N7S7891C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C2D1Ev,_ZThn8_N7S7891C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C1D0Ev,_ZTv0_n12_N7S7891C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7891C1D0Ev,_ZThn12_N7S7891C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C1D0Ev,_ZThn8_N7S7891C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7891C1D1Ev,_ZTv0_n12_N7S7891C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7891C1D1Ev,_ZThn12_N7S7891C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7891C1D1Ev,_ZThn8_N7S7891C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7891C1 = {  "S7891C1", // class name
  bases_S7891C1, 5,
  &(vtc_S7891C1[0]), // expected_vtbl_contents
  &(vtt_S7891C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7891C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7891C1),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7891C1),13, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4594C3  {
  virtual  ~S4594C3(); // _ZN7S4594C3D1Ev
  virtual void  v2(); // _ZN7S4594C32v2Ev
  S4594C3(); // tgen
};
//SIG(-1 S4594C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4594C3C1Ev();
extern void _ZN7S4594C3D1Ev();
Name_Map name_map_S4594C3[] = {
  NSPAIR(_ZN7S4594C3C1Ev),
  NSPAIR(_ZN7S4594C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4594C3[];
extern void _ZN7S4594C3D1Ev();
extern void _ZN7S4594C3D0Ev();
extern void _ZN7S4594C32v2Ev();
static  VTBL_ENTRY vtc_S4594C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4594C3[0]),
  (VTBL_ENTRY)&_ZN7S4594C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4594C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4594C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4594C3[];
extern  VTBL_ENTRY _ZTV7S4594C3[];
Class_Descriptor cd_S4594C3 = {  "S4594C3", // class name
  0,0,//no base classes
  &(vtc_S4594C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4594C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4594C3),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  S4594C2_nt  : S4594C3 {
  virtual  ~S4594C2_nt(); // _ZN10S4594C2_ntD1Ev
  S4594C2_nt(); // tgen
};
//SIG(-1 S4594C2_nt) C1{ BC2{ vd v1} vd}


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

//skip512 S4594C2_nt

#else // __cplusplus

extern void _ZN10S4594C2_ntC1Ev();
extern void _ZN10S4594C2_ntD1Ev();
Name_Map name_map_S4594C2_nt[] = {
  NSPAIR(_ZN10S4594C2_ntC1Ev),
  NSPAIR(_ZN10S4594C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4594C3;
extern VTBL_ENTRY _ZTI7S4594C3[];
extern  VTBL_ENTRY _ZTV7S4594C3[];
static Base_Class bases_S4594C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4594C2_nt[];
extern void _ZN10S4594C2_ntD1Ev();
extern void _ZN10S4594C2_ntD0Ev();
extern void _ZN7S4594C32v2Ev();
static  VTBL_ENTRY vtc_S4594C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4594C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4594C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4594C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4594C32v2Ev,
};
extern VTBL_ENTRY _ZTI10S4594C2_nt[];
VTBL_ENTRY *P__ZTI10S4594C2_nt = _ZTI10S4594C2_nt; 
extern  VTBL_ENTRY _ZTV10S4594C2_nt[];
Class_Descriptor cd_S4594C2_nt = {  "S4594C2_nt", // class name
  bases_S4594C2_nt, 1,
  &(vtc_S4594C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4594C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4594C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4594C1  : S4594C2_nt , S7368C49 {
  virtual  ~S4594C1(); // _ZN7S4594C1D1Ev
  virtual void  v1(); // _ZN7S4594C12v1Ev
  S4594C1(); // tgen
};
//SIG(1 S4594C1) C1{ BC2{ BC3{ vd v2} vd} BC4{ vd m FC5{ m Fp Fi[2] FC6{ m}}} vd v1}


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

static void Test_S4594C1()
{
  extern Class_Descriptor cd_S4594C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4594C1, buf);
    S4594C1 *dp, &lv = *(dp=new (buf) S4594C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4594C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4594C1)");
    check_base_class_offset(lv, (S4594C3*)(S4594C2_nt*), 0, "S4594C1");
    check_base_class_offset(lv, (S4594C2_nt*), 0, "S4594C1");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(8,4), "S4594C1");
    test_class_info(&lv, &cd_S4594C1);
    dp->~S4594C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4594C1(Test_S4594C1, "S4594C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S4594C1C1Ev();
extern void _ZN7S4594C1D1Ev();
Name_Map name_map_S4594C1[] = {
  NSPAIR(_ZN7S4594C1C1Ev),
  NSPAIR(_ZN7S4594C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4594C3;
extern VTBL_ENTRY _ZTI7S4594C3[];
extern  VTBL_ENTRY _ZTV7S4594C3[];
extern Class_Descriptor cd_S4594C2_nt;
extern VTBL_ENTRY _ZTI10S4594C2_nt[];
extern  VTBL_ENTRY _ZTV10S4594C2_nt[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S4594C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4594C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4594C1[];
extern void _ZN7S4594C1D1Ev();
extern void _ZN7S4594C1D0Ev();
extern void _ZN7S4594C32v2Ev();
extern void _ZN7S4594C12v1Ev();
extern void ABISELECT(_ZThn8_N7S4594C1D1Ev,_ZThn4_N7S4594C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S4594C1D0Ev,_ZThn4_N7S4594C1D0Ev)();
static  VTBL_ENTRY vtc_S4594C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4594C1[0]),
  (VTBL_ENTRY)&_ZN7S4594C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4594C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4594C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4594C12v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S4594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4594C1D1Ev,_ZThn4_N7S4594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4594C1D0Ev,_ZThn4_N7S4594C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S4594C1[];
extern  VTBL_ENTRY _ZTV7S4594C1[];
Class_Descriptor cd_S4594C1 = {  "S4594C1", // class name
  bases_S4594C1, 3,
  &(vtc_S4594C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S4594C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4594C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9975C2_nt  {
  virtual  ~S9975C2_nt(); // _ZN10S9975C2_ntD1Ev
  virtual void  v5(); // _ZN10S9975C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9975C2_nt2v6Ev
  virtual void  v7(); // _ZN10S9975C2_nt2v7Ev
  virtual void  v8(); // _ZN10S9975C2_nt2v8Ev
  S9975C2_nt(); // tgen
};
//SIG(-1 S9975C2_nt) C1{ vd v1 v2 v3 v4}


 S9975C2_nt ::~S9975C2_nt(){ note_dtor("S9975C2_nt", this);}
void  S9975C2_nt ::v5(){vfunc_called(this, "_ZN10S9975C2_nt2v5Ev");}
void  S9975C2_nt ::v6(){vfunc_called(this, "_ZN10S9975C2_nt2v6Ev");}
void  S9975C2_nt ::v7(){vfunc_called(this, "_ZN10S9975C2_nt2v7Ev");}
void  S9975C2_nt ::v8(){vfunc_called(this, "_ZN10S9975C2_nt2v8Ev");}
S9975C2_nt ::S9975C2_nt(){ note_ctor("S9975C2_nt", this);} // tgen

//skip512 S9975C2_nt

#else // __cplusplus

extern void _ZN10S9975C2_ntC1Ev();
extern void _ZN10S9975C2_ntD1Ev();
Name_Map name_map_S9975C2_nt[] = {
  NSPAIR(_ZN10S9975C2_ntC1Ev),
  NSPAIR(_ZN10S9975C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9975C2_nt[];
extern void _ZN10S9975C2_ntD1Ev();
extern void _ZN10S9975C2_ntD0Ev();
extern void _ZN10S9975C2_nt2v5Ev();
extern void _ZN10S9975C2_nt2v6Ev();
extern void _ZN10S9975C2_nt2v7Ev();
extern void _ZN10S9975C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S9975C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9975C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9975C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S9975C2_nt[];
VTBL_ENTRY *P__ZTI10S9975C2_nt = _ZTI10S9975C2_nt; 
extern  VTBL_ENTRY _ZTV10S9975C2_nt[];
Class_Descriptor cd_S9975C2_nt = {  "S9975C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9975C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9975C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9975C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9975C1  : S9975C2_nt {
  short s9975c1f0;
  ::S7368C18_nt s9975c1f1;
  void *s9975c1f2[2];
  virtual  ~S9975C1(); // _ZN7S9975C1D1Ev
  virtual void  v1(); // _ZN7S9975C12v1Ev
  virtual void  v2(); // _ZN7S9975C12v2Ev
  virtual void  v3(); // _ZN7S9975C12v3Ev
  virtual void  v4(); // _ZN7S9975C12v4Ev
  S9975C1(); // tgen
};
//SIG(1 S9975C1) C1{ BC2{ vd v5 v6 v7 v8} vd v1 v2 v3 v4 Fs FC3{ vd m Fp} Fp[2]}


 S9975C1 ::~S9975C1(){ note_dtor("S9975C1", this);}
void  S9975C1 ::v1(){vfunc_called(this, "_ZN7S9975C12v1Ev");}
void  S9975C1 ::v2(){vfunc_called(this, "_ZN7S9975C12v2Ev");}
void  S9975C1 ::v3(){vfunc_called(this, "_ZN7S9975C12v3Ev");}
void  S9975C1 ::v4(){vfunc_called(this, "_ZN7S9975C12v4Ev");}
S9975C1 ::S9975C1(){ note_ctor("S9975C1", this);} // tgen

static void Test_S9975C1()
{
  extern Class_Descriptor cd_S9975C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S9975C1, buf);
    S9975C1 *dp, &lv = *(dp=new (buf) S9975C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S9975C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9975C1)");
    check_base_class_offset(lv, (S9975C2_nt*), 0, "S9975C1");
    check_field_offset(lv, s9975c1f0, ABISELECT(8,4), "S9975C1.s9975c1f0");
    check_field_offset(lv, s9975c1f1, ABISELECT(16,8), "S9975C1.s9975c1f1");
    check_field_offset(lv, s9975c1f2, ABISELECT(32,16), "S9975C1.s9975c1f2");
    test_class_info(&lv, &cd_S9975C1);
    dp->~S9975C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9975C1(Test_S9975C1, "S9975C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S9975C1C1Ev();
extern void _ZN7S9975C1D1Ev();
Name_Map name_map_S9975C1[] = {
  NSPAIR(_ZN7S9975C1C1Ev),
  NSPAIR(_ZN7S9975C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9975C2_nt;
extern VTBL_ENTRY _ZTI10S9975C2_nt[];
extern  VTBL_ENTRY _ZTV10S9975C2_nt[];
static Base_Class bases_S9975C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9975C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9975C1[];
extern void _ZN7S9975C1D1Ev();
extern void _ZN7S9975C1D0Ev();
extern void _ZN10S9975C2_nt2v5Ev();
extern void _ZN10S9975C2_nt2v6Ev();
extern void _ZN10S9975C2_nt2v7Ev();
extern void _ZN10S9975C2_nt2v8Ev();
extern void _ZN7S9975C12v1Ev();
extern void _ZN7S9975C12v2Ev();
extern void _ZN7S9975C12v3Ev();
extern void _ZN7S9975C12v4Ev();
static  VTBL_ENTRY vtc_S9975C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9975C1[0]),
  (VTBL_ENTRY)&_ZN7S9975C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9975C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S9975C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S9975C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9975C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9975C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9975C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9975C1[];
extern  VTBL_ENTRY _ZTV7S9975C1[];
Class_Descriptor cd_S9975C1 = {  "S9975C1", // class name
  bases_S9975C1, 1,
  &(vtc_S9975C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S9975C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9975C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14333C1  {
  void *s14333c1f0;
  int s14333c1f1[3];
  __tsi64 s14333c1f2;
  int s14333c1f3[2];
  ::S7368C9_nt s14333c1f4;
  ::S7368C9_nt s14333c1f5;
  ::S7368C9_nt s14333c1f6;
  ::S7368C9_nt s14333c1f7;
  ::S7368C9_nt s14333c1f8;
};
//SIG(1 S14333C1) C1{ Fp Fi[3] FL Fi[2] FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC2}



static void Test_S14333C1()
{
  {
    init_simple_test("S14333C1");
    S14333C1 lv;
    check2(sizeof(lv), ABISELECT(120,92), "sizeof(S14333C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14333C1)");
    check_field_offset(lv, s14333c1f0, 0, "S14333C1.s14333c1f0");
    check_field_offset(lv, s14333c1f1, ABISELECT(8,4), "S14333C1.s14333c1f1");
    check_field_offset(lv, s14333c1f2, ABISELECT(24,16), "S14333C1.s14333c1f2");
    check_field_offset(lv, s14333c1f3, ABISELECT(32,24), "S14333C1.s14333c1f3");
    check_field_offset(lv, s14333c1f4, ABISELECT(40,32), "S14333C1.s14333c1f4");
    check_field_offset(lv, s14333c1f5, ABISELECT(56,44), "S14333C1.s14333c1f5");
    check_field_offset(lv, s14333c1f6, ABISELECT(72,56), "S14333C1.s14333c1f6");
    check_field_offset(lv, s14333c1f7, ABISELECT(88,68), "S14333C1.s14333c1f7");
    check_field_offset(lv, s14333c1f8, ABISELECT(104,80), "S14333C1.s14333c1f8");
  }
}
static Arrange_To_Call_Me vS14333C1(Test_S14333C1, "S14333C1", ABISELECT(120,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17707C4  {
  void *s17707c4f0;
  int s17707c4f1[3];
  ::S487C9_nt s17707c4f2;
};
//SIG(1 S17707C4) C1{ Fp Fi[3] FC2{ m FC3{ m FL}}}



static void Test_S17707C4()
{
  {
    init_simple_test("S17707C4");
    S17707C4 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S17707C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17707C4)");
    check_field_offset(lv, s17707c4f0, 0, "S17707C4.s17707c4f0");
    check_field_offset(lv, s17707c4f1, ABISELECT(8,4), "S17707C4.s17707c4f1");
    check_field_offset(lv, s17707c4f2, ABISELECT(24,16), "S17707C4.s17707c4f2");
  }
}
static Arrange_To_Call_Me vS17707C4(Test_S17707C4, "S17707C4", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17707C1  {
  void *s17707c1f0;
  int s17707c1f1;
  ::S487C9_nt s17707c1f2;
  ::S487C9_nt s17707c1f3;
  void *s17707c1f4;
  ::S17707C4 s17707c1f5[4];
  void  mf17707c1(); // _ZN8S17707C19mf17707c1Ev
};
//SIG(1 S17707C1) C1{ m Fp Fi FC2{ m FC3{ m FL}} FC2 Fp FC4{ Fp Fi[3] FC2}[4]}


void  S17707C1 ::mf17707c1(){}

static void Test_S17707C1()
{
  {
    init_simple_test("S17707C1");
    S17707C1 lv;
    check2(sizeof(lv), ABISELECT(168,124), "sizeof(S17707C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17707C1)");
    check_field_offset(lv, s17707c1f0, 0, "S17707C1.s17707c1f0");
    check_field_offset(lv, s17707c1f1, ABISELECT(8,4), "S17707C1.s17707c1f1");
    check_field_offset(lv, s17707c1f2, ABISELECT(16,8), "S17707C1.s17707c1f2");
    check_field_offset(lv, s17707c1f3, ABISELECT(24,16), "S17707C1.s17707c1f3");
    check_field_offset(lv, s17707c1f4, ABISELECT(32,24), "S17707C1.s17707c1f4");
    check_field_offset(lv, s17707c1f5, ABISELECT(40,28), "S17707C1.s17707c1f5");
  }
}
static Arrange_To_Call_Me vS17707C1(Test_S17707C1, "S17707C1", ABISELECT(168,124));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3974C2  : S7368C18_nt {
  void *s3974c2f0;
  int s3974c2f1;
  char s3974c2f2;
  virtual  ~S3974C2(); // _ZN7S3974C2D1Ev
  S3974C2(); // tgen
};
//SIG(-1 S3974C2) C1{ BC2{ vd m Fp} vd Fp Fi Fc}


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

static void Test_S3974C2()
{
  extern Class_Descriptor cd_S3974C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3974C2, buf);
    S3974C2 *dp, &lv = *(dp=new (buf) S3974C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3974C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3974C2)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S3974C2");
    check_field_offset(lv, s3974c2f0, ABISELECT(16,8), "S3974C2.s3974c2f0");
    check_field_offset(lv, s3974c2f1, ABISELECT(24,12), "S3974C2.s3974c2f1");
    check_field_offset(lv, s3974c2f2, ABISELECT(28,16), "S3974C2.s3974c2f2");
    test_class_info(&lv, &cd_S3974C2);
    dp->~S3974C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3974C2(Test_S3974C2, "S3974C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3974C2C1Ev();
extern void _ZN7S3974C2D1Ev();
Name_Map name_map_S3974C2[] = {
  NSPAIR(_ZN7S3974C2C1Ev),
  NSPAIR(_ZN7S3974C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S3974C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3974C2[];
extern void _ZN7S3974C2D1Ev();
extern void _ZN7S3974C2D0Ev();
static  VTBL_ENTRY vtc_S3974C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3974C2[0]),
  (VTBL_ENTRY)&_ZN7S3974C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3974C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3974C2[];
extern  VTBL_ENTRY _ZTV7S3974C2[];
Class_Descriptor cd_S3974C2 = {  "S3974C2", // class name
  bases_S3974C2, 1,
  &(vtc_S3974C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3974C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3974C2),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  S3974C4  : S7368C18_nt {
  void *s3974c4f0;
  int s3974c4f1[2];
  virtual  ~S3974C4(); // _ZN7S3974C4D1Ev
  S3974C4(); // tgen
};
//SIG(-1 S3974C4) C1{ BC2{ vd m Fp} vd Fp Fi[2]}


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

static void Test_S3974C4()
{
  extern Class_Descriptor cd_S3974C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3974C4, buf);
    S3974C4 *dp, &lv = *(dp=new (buf) S3974C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3974C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3974C4)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S3974C4");
    check_field_offset(lv, s3974c4f0, ABISELECT(16,8), "S3974C4.s3974c4f0");
    check_field_offset(lv, s3974c4f1, ABISELECT(24,12), "S3974C4.s3974c4f1");
    test_class_info(&lv, &cd_S3974C4);
    dp->~S3974C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3974C4(Test_S3974C4, "S3974C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3974C4C1Ev();
extern void _ZN7S3974C4D1Ev();
Name_Map name_map_S3974C4[] = {
  NSPAIR(_ZN7S3974C4C1Ev),
  NSPAIR(_ZN7S3974C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S3974C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3974C4[];
extern void _ZN7S3974C4D1Ev();
extern void _ZN7S3974C4D0Ev();
static  VTBL_ENTRY vtc_S3974C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3974C4[0]),
  (VTBL_ENTRY)&_ZN7S3974C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3974C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3974C4[];
extern  VTBL_ENTRY _ZTV7S3974C4[];
Class_Descriptor cd_S3974C4 = {  "S3974C4", // class name
  bases_S3974C4, 1,
  &(vtc_S3974C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3974C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3974C4),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  S3974C1  : S3974C2 {
  ::S3974C4 s3974c1f0;
  virtual  ~S3974C1(); // _ZN7S3974C1D1Ev
  S3974C1(); // tgen
};
//SIG(1 S3974C1) C1{ BC2{ BC3{ vd m Fp} vd Fp Fi Fc} vd FC4{ BC3 vd Fp Fi[2]}}


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

static void Test_S3974C1()
{
  extern Class_Descriptor cd_S3974C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S3974C1, buf);
    S3974C1 *dp, &lv = *(dp=new (buf) S3974C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S3974C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3974C1)");
    check_base_class_offset(lv, (S7368C18_nt*)(S3974C2*), 0, "S3974C1");
    check_base_class_offset(lv, (S3974C2*), 0, "S3974C1");
    check_field_offset(lv, s3974c1f0, ABISELECT(32,20), "S3974C1.s3974c1f0");
    test_class_info(&lv, &cd_S3974C1);
    dp->~S3974C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3974C1(Test_S3974C1, "S3974C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S3974C1C1Ev();
extern void _ZN7S3974C1D1Ev();
Name_Map name_map_S3974C1[] = {
  NSPAIR(_ZN7S3974C1C1Ev),
  NSPAIR(_ZN7S3974C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
extern Class_Descriptor cd_S3974C2;
extern VTBL_ENTRY _ZTI7S3974C2[];
extern  VTBL_ENTRY _ZTV7S3974C2[];
static Base_Class bases_S3974C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3974C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3974C1[];
extern void _ZN7S3974C1D1Ev();
extern void _ZN7S3974C1D0Ev();
static  VTBL_ENTRY vtc_S3974C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3974C1[0]),
  (VTBL_ENTRY)&_ZN7S3974C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3974C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3974C1[];
extern  VTBL_ENTRY _ZTV7S3974C1[];
Class_Descriptor cd_S3974C1 = {  "S3974C1", // class name
  bases_S3974C1, 2,
  &(vtc_S3974C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S3974C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3974C1),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  S8212C1  : S7368C18_nt {
  ::S8210C22 s8212c1f0;
  ::S8210C20 s8212c1f1;
  ::S8210C18 s8212c1f2;
  ::S8210C16 s8212c1f3;
  virtual  ~S8212C1(); // _ZN7S8212C1D1Ev
  S8212C1(); // tgen
};
//SIG(1 S8212C1) C1{ BC2{ vd m Fp} vd FC3{ m Fp} FC4{ m Fp} FC5{ m Fp} FC6{ m Fp}}


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

static void Test_S8212C1()
{
  extern Class_Descriptor cd_S8212C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S8212C1, buf);
    S8212C1 *dp, &lv = *(dp=new (buf) S8212C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S8212C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8212C1)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S8212C1");
    check_field_offset(lv, s8212c1f0, ABISELECT(16,8), "S8212C1.s8212c1f0");
    check_field_offset(lv, s8212c1f1, ABISELECT(24,12), "S8212C1.s8212c1f1");
    check_field_offset(lv, s8212c1f2, ABISELECT(32,16), "S8212C1.s8212c1f2");
    check_field_offset(lv, s8212c1f3, ABISELECT(40,20), "S8212C1.s8212c1f3");
    test_class_info(&lv, &cd_S8212C1);
    dp->~S8212C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8212C1(Test_S8212C1, "S8212C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S8212C1C1Ev();
extern void _ZN7S8212C1D1Ev();
Name_Map name_map_S8212C1[] = {
  NSPAIR(_ZN7S8212C1C1Ev),
  NSPAIR(_ZN7S8212C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S8212C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8212C1[];
extern void _ZN7S8212C1D1Ev();
extern void _ZN7S8212C1D0Ev();
static  VTBL_ENTRY vtc_S8212C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8212C1[0]),
  (VTBL_ENTRY)&_ZN7S8212C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8212C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8212C1[];
extern  VTBL_ENTRY _ZTV7S8212C1[];
Class_Descriptor cd_S8212C1 = {  "S8212C1", // class name
  bases_S8212C1, 1,
  &(vtc_S8212C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S8212C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8212C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10781C3  {
  char s10781c3f0[256];
  int s10781c3f1;
};
//SIG(1 S10781C3) C1{ Fc[256] Fi}



static void Test_S10781C3()
{
  {
    init_simple_test("S10781C3");
    S10781C3 lv;
    check2(sizeof(lv), 260, "sizeof(S10781C3)");
    check2(__alignof__(lv), 4, "__alignof__(S10781C3)");
    check_field_offset(lv, s10781c3f0, 0, "S10781C3.s10781c3f0");
    check_field_offset(lv, s10781c3f1, 256, "S10781C3.s10781c3f1");
  }
}
static Arrange_To_Call_Me vS10781C3(Test_S10781C3, "S10781C3", 260);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10781C2  {
  char s10781c2f0[1536];
  ::S10781C3 s10781c2f1[3];
  char s10781c2f2[256];
};
//SIG(-1 S10781C2) C1{ Fc[1536] FC2{ Fc[256] Fi}[3] Fc[256]}



static void Test_S10781C2()
{
  {
    init_simple_test("S10781C2");
    S10781C2 lv;
    check2(sizeof(lv), 2572, "sizeof(S10781C2)");
    check2(__alignof__(lv), 4, "__alignof__(S10781C2)");
    check_field_offset(lv, s10781c2f0, 0, "S10781C2.s10781c2f0");
    check_field_offset(lv, s10781c2f1, 1536, "S10781C2.s10781c2f1");
    check_field_offset(lv, s10781c2f2, 2316, "S10781C2.s10781c2f2");
  }
}
static Arrange_To_Call_Me vS10781C2(Test_S10781C2, "S10781C2", 2572);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10781C1  {
  char s10781c1f0[256];
  ::S10781C2 s10781c1f1;
};
//SIG(1 S10781C1) C1{ Fc[256] FC2{ Fc[1536] FC3{ Fc[256] Fi}[3] Fc[256]}}



static void Test_S10781C1()
{
  {
    init_simple_test("S10781C1");
    S10781C1 lv;
    check2(sizeof(lv), 2828, "sizeof(S10781C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10781C1)");
    check_field_offset(lv, s10781c1f0, 0, "S10781C1.s10781c1f0");
    check_field_offset(lv, s10781c1f1, 256, "S10781C1.s10781c1f1");
  }
}
static Arrange_To_Call_Me vS10781C1(Test_S10781C1, "S10781C1", 2828);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11370C1  {
  ::S2011C28_nt s11370c1f0;
  int s11370c1f1;
};
//SIG(1 S11370C1) C1{ FC2{ Fi FC3{ Fp[3] Fc[60] Fi} Fi[3] Fp[5] Fc[28]} Fi}



static void Test_S11370C1()
{
  {
    init_simple_test("S11370C1");
    S11370C1 lv;
    check2(sizeof(lv), ABISELECT(192,144), "sizeof(S11370C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11370C1)");
    check_field_offset(lv, s11370c1f0, 0, "S11370C1.s11370c1f0");
    check_field_offset(lv, s11370c1f1, ABISELECT(184,140), "S11370C1.s11370c1f1");
  }
}
static Arrange_To_Call_Me vS11370C1(Test_S11370C1, "S11370C1", ABISELECT(192,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9025C2  {
  virtual  ~S9025C2(); // _ZN7S9025C2D1Ev
  virtual void  v2(); // _ZN7S9025C22v2Ev
  S9025C2(); // tgen
};
//SIG(-1 S9025C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9025C2C1Ev();
extern void _ZN7S9025C2D1Ev();
Name_Map name_map_S9025C2[] = {
  NSPAIR(_ZN7S9025C2C1Ev),
  NSPAIR(_ZN7S9025C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9025C2[];
extern void _ZN7S9025C2D1Ev();
extern void _ZN7S9025C2D0Ev();
extern void _ZN7S9025C22v2Ev();
static  VTBL_ENTRY vtc_S9025C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9025C2[0]),
  (VTBL_ENTRY)&_ZN7S9025C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9025C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9025C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9025C2[];
extern  VTBL_ENTRY _ZTV7S9025C2[];
Class_Descriptor cd_S9025C2 = {  "S9025C2", // class name
  0,0,//no base classes
  &(vtc_S9025C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9025C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9025C2),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  S9025C1  : S9025C2 , S7368C49 {
  virtual  ~S9025C1(); // _ZN7S9025C1D1Ev
  virtual void  v1(); // _ZN7S9025C12v1Ev
  S9025C1(); // tgen
};
//SIG(1 S9025C1) C1{ BC2{ vd v2} BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} vd v1}


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

static void Test_S9025C1()
{
  extern Class_Descriptor cd_S9025C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S9025C1, buf);
    S9025C1 *dp, &lv = *(dp=new (buf) S9025C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S9025C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9025C1)");
    check_base_class_offset(lv, (S9025C2*), 0, "S9025C1");
    check_base_class_offset(lv, (S7368C49*), ABISELECT(8,4), "S9025C1");
    test_class_info(&lv, &cd_S9025C1);
    dp->~S9025C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9025C1(Test_S9025C1, "S9025C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S9025C1C1Ev();
extern void _ZN7S9025C1D1Ev();
Name_Map name_map_S9025C1[] = {
  NSPAIR(_ZN7S9025C1C1Ev),
  NSPAIR(_ZN7S9025C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9025C2;
extern VTBL_ENTRY _ZTI7S9025C2[];
extern  VTBL_ENTRY _ZTV7S9025C2[];
extern Class_Descriptor cd_S7368C49;
extern VTBL_ENTRY _ZTI8S7368C49[];
extern  VTBL_ENTRY _ZTV8S7368C49[];
static Base_Class bases_S9025C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9025C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C49,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9025C1[];
extern void _ZN7S9025C1D1Ev();
extern void _ZN7S9025C1D0Ev();
extern void _ZN7S9025C22v2Ev();
extern void _ZN7S9025C12v1Ev();
extern void ABISELECT(_ZThn8_N7S9025C1D1Ev,_ZThn4_N7S9025C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9025C1D0Ev,_ZThn4_N7S9025C1D0Ev)();
static  VTBL_ENTRY vtc_S9025C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9025C1[0]),
  (VTBL_ENTRY)&_ZN7S9025C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9025C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9025C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9025C12v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9025C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9025C1D1Ev,_ZThn4_N7S9025C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9025C1D0Ev,_ZThn4_N7S9025C1D0Ev),
};
extern VTBL_ENTRY _ZTI7S9025C1[];
extern  VTBL_ENTRY _ZTV7S9025C1[];
Class_Descriptor cd_S9025C1 = {  "S9025C1", // class name
  bases_S9025C1, 2,
  &(vtc_S9025C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S9025C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9025C1),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  S11366C2  {
  int s11366c2f0;
  ::S2011C29_nt s11366c2f1;
  int s11366c2f2[2];
  char s11366c2f3[32];
};
//SIG(-1 S11366C2) C1{ Fi FC2{ Fp[3] Fc[60] Fi} Fi[2] Fc[32]}



static void Test_S11366C2()
{
  {
    init_simple_test("S11366C2");
    S11366C2 lv;
    check2(sizeof(lv), ABISELECT(136,120), "sizeof(S11366C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11366C2)");
    check_field_offset(lv, s11366c2f0, 0, "S11366C2.s11366c2f0");
    check_field_offset(lv, s11366c2f1, ABISELECT(8,4), "S11366C2.s11366c2f1");
    check_field_offset(lv, s11366c2f2, ABISELECT(96,80), "S11366C2.s11366c2f2");
    check_field_offset(lv, s11366c2f3, ABISELECT(104,88), "S11366C2.s11366c2f3");
  }
}
static Arrange_To_Call_Me vS11366C2(Test_S11366C2, "S11366C2", ABISELECT(136,120));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11366C1  {
  ::S11366C2 s11366c1f0;
  char s11366c1f1[128];
};
//SIG(1 S11366C1) C1{ FC2{ Fi FC3{ Fp[3] Fc[60] Fi} Fi[2] Fc[32]} Fc[128]}



static void Test_S11366C1()
{
  {
    init_simple_test("S11366C1");
    S11366C1 lv;
    check2(sizeof(lv), ABISELECT(264,248), "sizeof(S11366C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11366C1)");
    check_field_offset(lv, s11366c1f0, 0, "S11366C1.s11366c1f0");
    check_field_offset(lv, s11366c1f1, ABISELECT(136,120), "S11366C1.s11366c1f1");
  }
}
static Arrange_To_Call_Me vS11366C1(Test_S11366C1, "S11366C1", ABISELECT(264,248));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9444C2  {
  void *s9444c2f0;
  int s9444c2f1;
  ::S7368C8 s9444c2f2;
  virtual  ~S9444C2(); // _ZN7S9444C2D1Ev
  virtual void  v3(); // _ZN7S9444C22v3Ev
  virtual void  v4(); // _ZN7S9444C22v4Ev
  virtual void  v5(); // _ZN7S9444C22v5Ev
  virtual void  v6(); // _ZN7S9444C22v6Ev
  S9444C2(); // tgen
};
//SIG(-1 S9444C2) C1{ vd v1 v2 v3 v4 Fp Fi FC2{ vd m Fc}}


 S9444C2 ::~S9444C2(){ note_dtor("S9444C2", this);}
void  S9444C2 ::v3(){vfunc_called(this, "_ZN7S9444C22v3Ev");}
void  S9444C2 ::v4(){vfunc_called(this, "_ZN7S9444C22v4Ev");}
void  S9444C2 ::v5(){vfunc_called(this, "_ZN7S9444C22v5Ev");}
void  S9444C2 ::v6(){vfunc_called(this, "_ZN7S9444C22v6Ev");}
S9444C2 ::S9444C2(){ note_ctor("S9444C2", this);} // tgen

static void Test_S9444C2()
{
  extern Class_Descriptor cd_S9444C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9444C2, buf);
    S9444C2 *dp, &lv = *(dp=new (buf) S9444C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9444C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9444C2)");
    check_field_offset(lv, s9444c2f0, ABISELECT(8,4), "S9444C2.s9444c2f0");
    check_field_offset(lv, s9444c2f1, ABISELECT(16,8), "S9444C2.s9444c2f1");
    check_field_offset(lv, s9444c2f2, ABISELECT(24,12), "S9444C2.s9444c2f2");
    test_class_info(&lv, &cd_S9444C2);
    dp->~S9444C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9444C2(Test_S9444C2, "S9444C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9444C2C1Ev();
extern void _ZN7S9444C2D1Ev();
Name_Map name_map_S9444C2[] = {
  NSPAIR(_ZN7S9444C2C1Ev),
  NSPAIR(_ZN7S9444C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9444C2[];
extern void _ZN7S9444C2D1Ev();
extern void _ZN7S9444C2D0Ev();
extern void _ZN7S9444C22v3Ev();
extern void _ZN7S9444C22v4Ev();
extern void _ZN7S9444C22v5Ev();
extern void _ZN7S9444C22v6Ev();
static  VTBL_ENTRY vtc_S9444C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9444C2[0]),
  (VTBL_ENTRY)&_ZN7S9444C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9444C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9444C2[];
extern  VTBL_ENTRY _ZTV7S9444C2[];
Class_Descriptor cd_S9444C2 = {  "S9444C2", // class name
  0,0,//no base classes
  &(vtc_S9444C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9444C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9444C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9444C1  : S9444C2 {
  virtual  ~S9444C1(); // _ZN7S9444C1D1Ev
  virtual void  v1(); // _ZN7S9444C12v1Ev
  virtual void  v2(); // _ZN7S9444C12v2Ev
  S9444C1(); // tgen
};
//SIG(1 S9444C1) C1{ BC2{ vd v3 v4 v5 v6 Fp Fi FC3{ vd m Fc}} vd v1 v2}


 S9444C1 ::~S9444C1(){ note_dtor("S9444C1", this);}
void  S9444C1 ::v1(){vfunc_called(this, "_ZN7S9444C12v1Ev");}
void  S9444C1 ::v2(){vfunc_called(this, "_ZN7S9444C12v2Ev");}
S9444C1 ::S9444C1(){ note_ctor("S9444C1", this);} // tgen

static void Test_S9444C1()
{
  extern Class_Descriptor cd_S9444C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9444C1, buf);
    S9444C1 *dp, &lv = *(dp=new (buf) S9444C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9444C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9444C1)");
    check_base_class_offset(lv, (S9444C2*), 0, "S9444C1");
    test_class_info(&lv, &cd_S9444C1);
    dp->~S9444C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9444C1(Test_S9444C1, "S9444C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9444C1C1Ev();
extern void _ZN7S9444C1D1Ev();
Name_Map name_map_S9444C1[] = {
  NSPAIR(_ZN7S9444C1C1Ev),
  NSPAIR(_ZN7S9444C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9444C2;
extern VTBL_ENTRY _ZTI7S9444C2[];
extern  VTBL_ENTRY _ZTV7S9444C2[];
static Base_Class bases_S9444C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9444C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9444C1[];
extern void _ZN7S9444C1D1Ev();
extern void _ZN7S9444C1D0Ev();
extern void _ZN7S9444C22v3Ev();
extern void _ZN7S9444C22v4Ev();
extern void _ZN7S9444C22v5Ev();
extern void _ZN7S9444C22v6Ev();
extern void _ZN7S9444C12v1Ev();
extern void _ZN7S9444C12v2Ev();
static  VTBL_ENTRY vtc_S9444C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9444C1[0]),
  (VTBL_ENTRY)&_ZN7S9444C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9444C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9444C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9444C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9444C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9444C1[];
extern  VTBL_ENTRY _ZTV7S9444C1[];
Class_Descriptor cd_S9444C1 = {  "S9444C1", // class name
  bases_S9444C1, 1,
  &(vtc_S9444C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9444C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9444C1),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  S5011C3  {
  virtual  ~S5011C3(); // _ZN7S5011C3D1Ev
  virtual void  v3(); // _ZN7S5011C32v3Ev
  S5011C3(); // tgen
};
//SIG(-1 S5011C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S5011C3C1Ev();
extern void _ZN7S5011C3D1Ev();
Name_Map name_map_S5011C3[] = {
  NSPAIR(_ZN7S5011C3C1Ev),
  NSPAIR(_ZN7S5011C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5011C3[];
extern void _ZN7S5011C3D1Ev();
extern void _ZN7S5011C3D0Ev();
extern void _ZN7S5011C32v3Ev();
static  VTBL_ENTRY vtc_S5011C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5011C3[0]),
  (VTBL_ENTRY)&_ZN7S5011C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5011C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5011C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S5011C3[];
extern  VTBL_ENTRY _ZTV7S5011C3[];
Class_Descriptor cd_S5011C3 = {  "S5011C3", // class name
  0,0,//no base classes
  &(vtc_S5011C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5011C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5011C3),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  S5011C2  : S5011C3 {
  virtual  ~S5011C2(); // _ZN7S5011C2D1Ev
  S5011C2(); // tgen
};
//SIG(-1 S5011C2) C1{ BC2{ vd v1} vd}


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

static void Test_S5011C2()
{
  extern Class_Descriptor cd_S5011C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5011C2, buf);
    S5011C2 *dp, &lv = *(dp=new (buf) S5011C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5011C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5011C2)");
    check_base_class_offset(lv, (S5011C3*), 0, "S5011C2");
    test_class_info(&lv, &cd_S5011C2);
    dp->~S5011C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5011C2(Test_S5011C2, "S5011C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5011C2C1Ev();
extern void _ZN7S5011C2D1Ev();
Name_Map name_map_S5011C2[] = {
  NSPAIR(_ZN7S5011C2C1Ev),
  NSPAIR(_ZN7S5011C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5011C3;
extern VTBL_ENTRY _ZTI7S5011C3[];
extern  VTBL_ENTRY _ZTV7S5011C3[];
static Base_Class bases_S5011C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5011C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5011C2[];
extern void _ZN7S5011C2D1Ev();
extern void _ZN7S5011C2D0Ev();
extern void _ZN7S5011C32v3Ev();
static  VTBL_ENTRY vtc_S5011C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5011C2[0]),
  (VTBL_ENTRY)&_ZN7S5011C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5011C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5011C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S5011C2[];
extern  VTBL_ENTRY _ZTV7S5011C2[];
Class_Descriptor cd_S5011C2 = {  "S5011C2", // class name
  bases_S5011C2, 1,
  &(vtc_S5011C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5011C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5011C2),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  S5011C5  {
  virtual  ~S5011C5(); // _ZN7S5011C5D1Ev
  virtual void  v4(); // _ZN7S5011C52v4Ev
  S5011C5(); // tgen
};
//SIG(-1 S5011C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S5011C5C1Ev();
extern void _ZN7S5011C5D1Ev();
Name_Map name_map_S5011C5[] = {
  NSPAIR(_ZN7S5011C5C1Ev),
  NSPAIR(_ZN7S5011C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5011C5[];
extern void _ZN7S5011C5D1Ev();
extern void _ZN7S5011C5D0Ev();
extern void _ZN7S5011C52v4Ev();
static  VTBL_ENTRY vtc_S5011C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5011C5[0]),
  (VTBL_ENTRY)&_ZN7S5011C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5011C5D0Ev,
  (VTBL_ENTRY)&_ZN7S5011C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S5011C5[];
extern  VTBL_ENTRY _ZTV7S5011C5[];
Class_Descriptor cd_S5011C5 = {  "S5011C5", // class name
  0,0,//no base classes
  &(vtc_S5011C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5011C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5011C5),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  S5011C4  : S5011C5 {
  virtual  ~S5011C4(); // _ZN7S5011C4D1Ev
  S5011C4(); // tgen
};
//SIG(-1 S5011C4) C1{ BC2{ vd v1} vd}


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

static void Test_S5011C4()
{
  extern Class_Descriptor cd_S5011C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5011C4, buf);
    S5011C4 *dp, &lv = *(dp=new (buf) S5011C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5011C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5011C4)");
    check_base_class_offset(lv, (S5011C5*), 0, "S5011C4");
    test_class_info(&lv, &cd_S5011C4);
    dp->~S5011C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5011C4(Test_S5011C4, "S5011C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5011C4C1Ev();
extern void _ZN7S5011C4D1Ev();
Name_Map name_map_S5011C4[] = {
  NSPAIR(_ZN7S5011C4C1Ev),
  NSPAIR(_ZN7S5011C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5011C5;
extern VTBL_ENTRY _ZTI7S5011C5[];
extern  VTBL_ENTRY _ZTV7S5011C5[];
static Base_Class bases_S5011C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5011C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5011C4[];
extern void _ZN7S5011C4D1Ev();
extern void _ZN7S5011C4D0Ev();
extern void _ZN7S5011C52v4Ev();
static  VTBL_ENTRY vtc_S5011C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5011C4[0]),
  (VTBL_ENTRY)&_ZN7S5011C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5011C4D0Ev,
  (VTBL_ENTRY)&_ZN7S5011C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S5011C4[];
extern  VTBL_ENTRY _ZTV7S5011C4[];
Class_Descriptor cd_S5011C4 = {  "S5011C4", // class name
  bases_S5011C4, 1,
  &(vtc_S5011C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5011C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5011C4),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  S5011C1  : S5011C2 , S5011C4 {
  void *s5011c1f0;
  virtual  ~S5011C1(); // _ZN7S5011C1D1Ev
  virtual void  v1(); // _ZN7S5011C12v1Ev
  virtual void  v2(); // _ZN7S5011C12v2Ev
  S5011C1(); // tgen
};
//SIG(1 S5011C1) C1{ BC2{ BC3{ vd v3} vd} BC4{ BC5{ vd v4} vd} vd v1 v2 Fp}


 S5011C1 ::~S5011C1(){ note_dtor("S5011C1", this);}
void  S5011C1 ::v1(){vfunc_called(this, "_ZN7S5011C12v1Ev");}
void  S5011C1 ::v2(){vfunc_called(this, "_ZN7S5011C12v2Ev");}
S5011C1 ::S5011C1(){ note_ctor("S5011C1", this);} // tgen

static void Test_S5011C1()
{
  extern Class_Descriptor cd_S5011C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5011C1, buf);
    S5011C1 *dp, &lv = *(dp=new (buf) S5011C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5011C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5011C1)");
    check_base_class_offset(lv, (S5011C3*)(S5011C2*), 0, "S5011C1");
    check_base_class_offset(lv, (S5011C2*), 0, "S5011C1");
    check_base_class_offset(lv, (S5011C5*)(S5011C4*), ABISELECT(8,4), "S5011C1");
    check_base_class_offset(lv, (S5011C4*), ABISELECT(8,4), "S5011C1");
    check_field_offset(lv, s5011c1f0, ABISELECT(16,8), "S5011C1.s5011c1f0");
    test_class_info(&lv, &cd_S5011C1);
    dp->~S5011C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5011C1(Test_S5011C1, "S5011C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5011C1C1Ev();
extern void _ZN7S5011C1D1Ev();
Name_Map name_map_S5011C1[] = {
  NSPAIR(_ZN7S5011C1C1Ev),
  NSPAIR(_ZN7S5011C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5011C3;
extern VTBL_ENTRY _ZTI7S5011C3[];
extern  VTBL_ENTRY _ZTV7S5011C3[];
extern Class_Descriptor cd_S5011C2;
extern VTBL_ENTRY _ZTI7S5011C2[];
extern  VTBL_ENTRY _ZTV7S5011C2[];
extern Class_Descriptor cd_S5011C5;
extern VTBL_ENTRY _ZTI7S5011C5[];
extern  VTBL_ENTRY _ZTV7S5011C5[];
extern Class_Descriptor cd_S5011C4;
extern VTBL_ENTRY _ZTI7S5011C4[];
extern  VTBL_ENTRY _ZTV7S5011C4[];
static Base_Class bases_S5011C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5011C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5011C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5011C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5011C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5011C1[];
extern void _ZN7S5011C1D1Ev();
extern void _ZN7S5011C1D0Ev();
extern void _ZN7S5011C32v3Ev();
extern void _ZN7S5011C12v1Ev();
extern void _ZN7S5011C12v2Ev();
extern void ABISELECT(_ZThn8_N7S5011C1D1Ev,_ZThn4_N7S5011C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S5011C1D0Ev,_ZThn4_N7S5011C1D0Ev)();
extern void _ZN7S5011C52v4Ev();
static  VTBL_ENTRY vtc_S5011C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5011C1[0]),
  (VTBL_ENTRY)&_ZN7S5011C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5011C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5011C32v3Ev,
  (VTBL_ENTRY)&_ZN7S5011C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5011C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S5011C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S5011C1D1Ev,_ZThn4_N7S5011C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S5011C1D0Ev,_ZThn4_N7S5011C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5011C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S5011C1[];
extern  VTBL_ENTRY _ZTV7S5011C1[];
Class_Descriptor cd_S5011C1 = {  "S5011C1", // class name
  bases_S5011C1, 4,
  &(vtc_S5011C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5011C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5011C1),12, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21306C1  {
  ::S7368C33 s21306c1f0;
  ::S7368C11 s21306c1f1;
  void  mf21306c1(); // _ZN8S21306C19mf21306c1Ev
  virtual  ~S21306C1(); // _ZN8S21306C1D1Ev
  S21306C1(); // tgen
};
//SIG(1 S21306C1) C1{ vd m FC2{ BC3{ vd m Fc} vd FL} FC4{ BC3 vd FL[2]}}


void  S21306C1 ::mf21306c1(){}
 S21306C1 ::~S21306C1(){ note_dtor("S21306C1", this);}
S21306C1 ::S21306C1(){ note_ctor("S21306C1", this);} // tgen

static void Test_S21306C1()
{
  extern Class_Descriptor cd_S21306C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S21306C1, buf);
    S21306C1 *dp, &lv = *(dp=new (buf) S21306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S21306C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21306C1)");
    check_field_offset(lv, s21306c1f0, ABISELECT(8,4), "S21306C1.s21306c1f0");
    check_field_offset(lv, s21306c1f1, ABISELECT(32,20), "S21306C1.s21306c1f1");
    test_class_info(&lv, &cd_S21306C1);
    dp->~S21306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21306C1(Test_S21306C1, "S21306C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN8S21306C1C1Ev();
extern void _ZN8S21306C1D1Ev();
Name_Map name_map_S21306C1[] = {
  NSPAIR(_ZN8S21306C1C1Ev),
  NSPAIR(_ZN8S21306C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21306C1[];
extern void _ZN8S21306C1D1Ev();
extern void _ZN8S21306C1D0Ev();
static  VTBL_ENTRY vtc_S21306C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21306C1[0]),
  (VTBL_ENTRY)&_ZN8S21306C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21306C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21306C1[];
extern  VTBL_ENTRY _ZTV8S21306C1[];
Class_Descriptor cd_S21306C1 = {  "S21306C1", // class name
  0,0,//no base classes
  &(vtc_S21306C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI8S21306C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21306C1),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  S8948C2  {
  void *s8948c2f0;
  int s8948c2f1;
  ::S7368C8 s8948c2f2;
  virtual  ~S8948C2(); // _ZN7S8948C2D1Ev
  virtual void  v2(); // _ZN7S8948C22v2Ev
  virtual void  v3(); // _ZN7S8948C22v3Ev
  virtual void  v4(); // _ZN7S8948C22v4Ev
  virtual void  v5(); // _ZN7S8948C22v5Ev
  S8948C2(); // tgen
};
//SIG(-1 S8948C2) C1{ vd v1 v2 v3 v4 Fp Fi FC2{ vd m Fc}}


 S8948C2 ::~S8948C2(){ note_dtor("S8948C2", this);}
void  S8948C2 ::v2(){vfunc_called(this, "_ZN7S8948C22v2Ev");}
void  S8948C2 ::v3(){vfunc_called(this, "_ZN7S8948C22v3Ev");}
void  S8948C2 ::v4(){vfunc_called(this, "_ZN7S8948C22v4Ev");}
void  S8948C2 ::v5(){vfunc_called(this, "_ZN7S8948C22v5Ev");}
S8948C2 ::S8948C2(){ note_ctor("S8948C2", this);} // tgen

static void Test_S8948C2()
{
  extern Class_Descriptor cd_S8948C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8948C2, buf);
    S8948C2 *dp, &lv = *(dp=new (buf) S8948C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8948C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8948C2)");
    check_field_offset(lv, s8948c2f0, ABISELECT(8,4), "S8948C2.s8948c2f0");
    check_field_offset(lv, s8948c2f1, ABISELECT(16,8), "S8948C2.s8948c2f1");
    check_field_offset(lv, s8948c2f2, ABISELECT(24,12), "S8948C2.s8948c2f2");
    test_class_info(&lv, &cd_S8948C2);
    dp->~S8948C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8948C2(Test_S8948C2, "S8948C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8948C2C1Ev();
extern void _ZN7S8948C2D1Ev();
Name_Map name_map_S8948C2[] = {
  NSPAIR(_ZN7S8948C2C1Ev),
  NSPAIR(_ZN7S8948C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8948C2[];
extern void _ZN7S8948C2D1Ev();
extern void _ZN7S8948C2D0Ev();
extern void _ZN7S8948C22v2Ev();
extern void _ZN7S8948C22v3Ev();
extern void _ZN7S8948C22v4Ev();
extern void _ZN7S8948C22v5Ev();
static  VTBL_ENTRY vtc_S8948C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8948C2[0]),
  (VTBL_ENTRY)&_ZN7S8948C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8948C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S8948C2[];
extern  VTBL_ENTRY _ZTV7S8948C2[];
Class_Descriptor cd_S8948C2 = {  "S8948C2", // class name
  0,0,//no base classes
  &(vtc_S8948C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8948C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8948C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8948C1  : S8948C2 {
  virtual  ~S8948C1(); // _ZN7S8948C1D1Ev
  virtual void  v1(); // _ZN7S8948C12v1Ev
  S8948C1(); // tgen
};
//SIG(1 S8948C1) C1{ BC2{ vd v2 v3 v4 v5 Fp Fi FC3{ vd m Fc}} vd v1}


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

static void Test_S8948C1()
{
  extern Class_Descriptor cd_S8948C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8948C1, buf);
    S8948C1 *dp, &lv = *(dp=new (buf) S8948C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8948C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8948C1)");
    check_base_class_offset(lv, (S8948C2*), 0, "S8948C1");
    test_class_info(&lv, &cd_S8948C1);
    dp->~S8948C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8948C1(Test_S8948C1, "S8948C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8948C1C1Ev();
extern void _ZN7S8948C1D1Ev();
Name_Map name_map_S8948C1[] = {
  NSPAIR(_ZN7S8948C1C1Ev),
  NSPAIR(_ZN7S8948C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8948C2;
extern VTBL_ENTRY _ZTI7S8948C2[];
extern  VTBL_ENTRY _ZTV7S8948C2[];
static Base_Class bases_S8948C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8948C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8948C1[];
extern void _ZN7S8948C1D1Ev();
extern void _ZN7S8948C1D0Ev();
extern void _ZN7S8948C22v2Ev();
extern void _ZN7S8948C22v3Ev();
extern void _ZN7S8948C22v4Ev();
extern void _ZN7S8948C22v5Ev();
extern void _ZN7S8948C12v1Ev();
static  VTBL_ENTRY vtc_S8948C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8948C1[0]),
  (VTBL_ENTRY)&_ZN7S8948C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8948C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8948C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8948C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8948C1[];
extern  VTBL_ENTRY _ZTV7S8948C1[];
Class_Descriptor cd_S8948C1 = {  "S8948C1", // class name
  bases_S8948C1, 1,
  &(vtc_S8948C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8948C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8948C1),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  S3918C3_nt  {
  __tsi64 s3918c3f0;
  void  mf3918c3(); // _ZN10S3918C3_nt8mf3918c3Ev
  virtual  ~S3918C3_nt(); // _ZN10S3918C3_ntD1Ev
  S3918C3_nt(); // tgen
};
//SIG(-1 S3918C3_nt) C1{ vd m FL}


void  S3918C3_nt ::mf3918c3(){}
 S3918C3_nt ::~S3918C3_nt(){ note_dtor("S3918C3_nt", this);}
S3918C3_nt ::S3918C3_nt(){ note_ctor("S3918C3_nt", this);} // tgen

//skip512 S3918C3_nt

#else // __cplusplus

extern void _ZN10S3918C3_ntC1Ev();
extern void _ZN10S3918C3_ntD1Ev();
Name_Map name_map_S3918C3_nt[] = {
  NSPAIR(_ZN10S3918C3_ntC1Ev),
  NSPAIR(_ZN10S3918C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3918C3_nt[];
extern void _ZN10S3918C3_ntD1Ev();
extern void _ZN10S3918C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3918C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3918C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3918C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3918C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3918C3_nt[];
VTBL_ENTRY *P__ZTI10S3918C3_nt = _ZTI10S3918C3_nt; 
extern  VTBL_ENTRY _ZTV10S3918C3_nt[];
Class_Descriptor cd_S3918C3_nt = {  "S3918C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3918C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3918C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3918C3_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  S3918C2_nt  : S3918C3_nt {
  int s3918c2f0[3];
  virtual  ~S3918C2_nt(); // _ZN10S3918C2_ntD1Ev
  S3918C2_nt(); // tgen
};
//SIG(-1 S3918C2_nt) C1{ BC2{ vd m FL} vd Fi[3]}


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

//skip512 S3918C2_nt

#else // __cplusplus

extern void _ZN10S3918C2_ntC1Ev();
extern void _ZN10S3918C2_ntD1Ev();
Name_Map name_map_S3918C2_nt[] = {
  NSPAIR(_ZN10S3918C2_ntC1Ev),
  NSPAIR(_ZN10S3918C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3918C3_nt;
extern VTBL_ENTRY _ZTI10S3918C3_nt[];
extern  VTBL_ENTRY _ZTV10S3918C3_nt[];
static Base_Class bases_S3918C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3918C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3918C2_nt[];
extern void _ZN10S3918C2_ntD1Ev();
extern void _ZN10S3918C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3918C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3918C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3918C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3918C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3918C2_nt[];
VTBL_ENTRY *P__ZTI10S3918C2_nt = _ZTI10S3918C2_nt; 
extern  VTBL_ENTRY _ZTV10S3918C2_nt[];
Class_Descriptor cd_S3918C2_nt = {  "S3918C2_nt", // class name
  bases_S3918C2_nt, 1,
  &(vtc_S3918C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI10S3918C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3918C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3918C1  : S3918C2_nt {
  ::S730C13 s3918c1f0;
  virtual  ~S3918C1(); // _ZN7S3918C1D1Ev
  S3918C1(); // tgen
};
//SIG(1 S3918C1) C1{ BC2{ BC3{ vd m FL} vd Fi[3]} vd FC4{ vd m Fi[4]}}


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

static void Test_S3918C1()
{
  extern Class_Descriptor cd_S3918C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S3918C1, buf);
    S3918C1 *dp, &lv = *(dp=new (buf) S3918C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S3918C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3918C1)");
    check_base_class_offset(lv, (S3918C3_nt*)(S3918C2_nt*), 0, "S3918C1");
    check_base_class_offset(lv, (S3918C2_nt*), 0, "S3918C1");
    check_field_offset(lv, s3918c1f0, ABISELECT(32,24), "S3918C1.s3918c1f0");
    test_class_info(&lv, &cd_S3918C1);
    dp->~S3918C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3918C1(Test_S3918C1, "S3918C1", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S3918C1C1Ev();
extern void _ZN7S3918C1D1Ev();
Name_Map name_map_S3918C1[] = {
  NSPAIR(_ZN7S3918C1C1Ev),
  NSPAIR(_ZN7S3918C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3918C3_nt;
extern VTBL_ENTRY _ZTI10S3918C3_nt[];
extern  VTBL_ENTRY _ZTV10S3918C3_nt[];
extern Class_Descriptor cd_S3918C2_nt;
extern VTBL_ENTRY _ZTI10S3918C2_nt[];
extern  VTBL_ENTRY _ZTV10S3918C2_nt[];
static Base_Class bases_S3918C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3918C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3918C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3918C1[];
extern void _ZN7S3918C1D1Ev();
extern void _ZN7S3918C1D0Ev();
static  VTBL_ENTRY vtc_S3918C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3918C1[0]),
  (VTBL_ENTRY)&_ZN7S3918C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3918C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3918C1[];
extern  VTBL_ENTRY _ZTV7S3918C1[];
Class_Descriptor cd_S3918C1 = {  "S3918C1", // class name
  bases_S3918C1, 2,
  &(vtc_S3918C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S3918C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3918C1),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  S12527C1  {
  int s12527c1f0;
  ::S2011C29_nt s12527c1f1;
  ::S11362C4_nt s12527c1f2;
  int s12527c1f3;
  char s12527c1f4[32];
};
//SIG(1 S12527C1) C1{ Fi FC2{ Fp[3] Fc[60] Fi} FC3{ Fc[12]} Fi Fc[32]}



static void Test_S12527C1()
{
  {
    init_simple_test("S12527C1");
    S12527C1 lv;
    check2(sizeof(lv), ABISELECT(144,128), "sizeof(S12527C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12527C1)");
    check_field_offset(lv, s12527c1f0, 0, "S12527C1.s12527c1f0");
    check_field_offset(lv, s12527c1f1, ABISELECT(8,4), "S12527C1.s12527c1f1");
    check_field_offset(lv, s12527c1f2, ABISELECT(96,80), "S12527C1.s12527c1f2");
    check_field_offset(lv, s12527c1f3, ABISELECT(108,92), "S12527C1.s12527c1f3");
    check_field_offset(lv, s12527c1f4, ABISELECT(112,96), "S12527C1.s12527c1f4");
  }
}
static Arrange_To_Call_Me vS12527C1(Test_S12527C1, "S12527C1", ABISELECT(144,128));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8370C2_nt  {
  void  mf8370c2(); // _ZN10S8370C2_nt8mf8370c2Ev
  virtual  ~S8370C2_nt(); // _ZN10S8370C2_ntD1Ev
  S8370C2_nt(); // tgen
};
//SIG(-1 S8370C2_nt) C1{ vd m}


void  S8370C2_nt ::mf8370c2(){}
 S8370C2_nt ::~S8370C2_nt(){ note_dtor("S8370C2_nt", this);}
S8370C2_nt ::S8370C2_nt(){ note_ctor("S8370C2_nt", this);} // tgen

//skip512 S8370C2_nt

#else // __cplusplus

extern void _ZN10S8370C2_ntC1Ev();
extern void _ZN10S8370C2_ntD1Ev();
Name_Map name_map_S8370C2_nt[] = {
  NSPAIR(_ZN10S8370C2_ntC1Ev),
  NSPAIR(_ZN10S8370C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8370C2_nt[];
extern void _ZN10S8370C2_ntD1Ev();
extern void _ZN10S8370C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8370C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8370C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8370C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8370C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8370C2_nt[];
VTBL_ENTRY *P__ZTI10S8370C2_nt = _ZTI10S8370C2_nt; 
extern  VTBL_ENTRY _ZTV10S8370C2_nt[];
Class_Descriptor cd_S8370C2_nt = {  "S8370C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8370C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8370C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8370C2_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  S8370C3  {
  char s8370c3f0;
  ::S7368C18_nt s8370c3f1;
  void  mf8370c3(); // _ZN7S8370C38mf8370c3Ev
};
//SIG(-1 S8370C3) C1{ m Fc FC2{ vd m Fp}}


void  S8370C3 ::mf8370c3(){}

static void Test_S8370C3()
{
  {
    init_simple_test("S8370C3");
    S8370C3 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8370C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8370C3)");
    check_field_offset(lv, s8370c3f0, 0, "S8370C3.s8370c3f0");
    check_field_offset(lv, s8370c3f1, ABISELECT(8,4), "S8370C3.s8370c3f1");
  }
}
static Arrange_To_Call_Me vS8370C3(Test_S8370C3, "S8370C3", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8370C1  : S8370C2_nt {
  void *s8370c1f0[2];
  ::S8370C3 s8370c1f1;
  ::S8370C3 s8370c1f2;
  virtual  ~S8370C1(); // _ZN7S8370C1D1Ev
  S8370C1(); // tgen
};
//SIG(1 S8370C1) C1{ BC2{ vd m} vd Fp[2] FC3{ m Fc FC4{ vd m Fp}} FC3}


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

static void Test_S8370C1()
{
  extern Class_Descriptor cd_S8370C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S8370C1, buf);
    S8370C1 *dp, &lv = *(dp=new (buf) S8370C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S8370C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8370C1)");
    check_base_class_offset(lv, (S8370C2_nt*), 0, "S8370C1");
    check_field_offset(lv, s8370c1f0, ABISELECT(8,4), "S8370C1.s8370c1f0");
    check_field_offset(lv, s8370c1f1, ABISELECT(24,12), "S8370C1.s8370c1f1");
    check_field_offset(lv, s8370c1f2, ABISELECT(48,24), "S8370C1.s8370c1f2");
    test_class_info(&lv, &cd_S8370C1);
    dp->~S8370C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8370C1(Test_S8370C1, "S8370C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S8370C1C1Ev();
extern void _ZN7S8370C1D1Ev();
Name_Map name_map_S8370C1[] = {
  NSPAIR(_ZN7S8370C1C1Ev),
  NSPAIR(_ZN7S8370C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8370C2_nt;
extern VTBL_ENTRY _ZTI10S8370C2_nt[];
extern  VTBL_ENTRY _ZTV10S8370C2_nt[];
static Base_Class bases_S8370C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8370C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8370C1[];
extern void _ZN7S8370C1D1Ev();
extern void _ZN7S8370C1D0Ev();
static  VTBL_ENTRY vtc_S8370C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8370C1[0]),
  (VTBL_ENTRY)&_ZN7S8370C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8370C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8370C1[];
extern  VTBL_ENTRY _ZTV7S8370C1[];
Class_Descriptor cd_S8370C1 = {  "S8370C1", // class name
  bases_S8370C1, 1,
  &(vtc_S8370C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S8370C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8370C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8213C1  : S7368C18_nt {
  ::S8210C22 s8213c1f0;
  ::S8210C20 s8213c1f1;
  ::S8210C18 s8213c1f2;
  virtual  ~S8213C1(); // _ZN7S8213C1D1Ev
  S8213C1(); // tgen
};
//SIG(1 S8213C1) C1{ BC2{ vd m Fp} vd FC3{ m Fp} FC4{ m Fp} FC5{ m Fp}}


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

static void Test_S8213C1()
{
  extern Class_Descriptor cd_S8213C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8213C1, buf);
    S8213C1 *dp, &lv = *(dp=new (buf) S8213C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8213C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8213C1)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S8213C1");
    check_field_offset(lv, s8213c1f0, ABISELECT(16,8), "S8213C1.s8213c1f0");
    check_field_offset(lv, s8213c1f1, ABISELECT(24,12), "S8213C1.s8213c1f1");
    check_field_offset(lv, s8213c1f2, ABISELECT(32,16), "S8213C1.s8213c1f2");
    test_class_info(&lv, &cd_S8213C1);
    dp->~S8213C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8213C1(Test_S8213C1, "S8213C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8213C1C1Ev();
extern void _ZN7S8213C1D1Ev();
Name_Map name_map_S8213C1[] = {
  NSPAIR(_ZN7S8213C1C1Ev),
  NSPAIR(_ZN7S8213C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S8213C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8213C1[];
extern void _ZN7S8213C1D1Ev();
extern void _ZN7S8213C1D0Ev();
static  VTBL_ENTRY vtc_S8213C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8213C1[0]),
  (VTBL_ENTRY)&_ZN7S8213C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8213C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8213C1[];
extern  VTBL_ENTRY _ZTV7S8213C1[];
Class_Descriptor cd_S8213C1 = {  "S8213C1", // class name
  bases_S8213C1, 1,
  &(vtc_S8213C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8213C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8213C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4617C3  {
  virtual  ~S4617C3(); // _ZN7S4617C3D1Ev
  virtual void  v2(); // _ZN7S4617C32v2Ev
  S4617C3(); // tgen
};
//SIG(-1 S4617C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4617C3C1Ev();
extern void _ZN7S4617C3D1Ev();
Name_Map name_map_S4617C3[] = {
  NSPAIR(_ZN7S4617C3C1Ev),
  NSPAIR(_ZN7S4617C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4617C3[];
extern void _ZN7S4617C3D1Ev();
extern void _ZN7S4617C3D0Ev();
extern void _ZN7S4617C32v2Ev();
static  VTBL_ENTRY vtc_S4617C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4617C3[0]),
  (VTBL_ENTRY)&_ZN7S4617C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4617C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4617C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4617C3[];
extern  VTBL_ENTRY _ZTV7S4617C3[];
Class_Descriptor cd_S4617C3 = {  "S4617C3", // class name
  0,0,//no base classes
  &(vtc_S4617C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4617C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4617C3),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  S4617C2  : S4617C3 {
  virtual  ~S4617C2(); // _ZN7S4617C2D1Ev
  S4617C2(); // tgen
};
//SIG(-1 S4617C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4617C2()
{
  extern Class_Descriptor cd_S4617C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4617C2, buf);
    S4617C2 *dp, &lv = *(dp=new (buf) S4617C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4617C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4617C2)");
    check_base_class_offset(lv, (S4617C3*), 0, "S4617C2");
    test_class_info(&lv, &cd_S4617C2);
    dp->~S4617C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4617C2(Test_S4617C2, "S4617C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4617C2C1Ev();
extern void _ZN7S4617C2D1Ev();
Name_Map name_map_S4617C2[] = {
  NSPAIR(_ZN7S4617C2C1Ev),
  NSPAIR(_ZN7S4617C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4617C3;
extern VTBL_ENTRY _ZTI7S4617C3[];
extern  VTBL_ENTRY _ZTV7S4617C3[];
static Base_Class bases_S4617C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4617C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4617C2[];
extern void _ZN7S4617C2D1Ev();
extern void _ZN7S4617C2D0Ev();
extern void _ZN7S4617C32v2Ev();
static  VTBL_ENTRY vtc_S4617C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4617C2[0]),
  (VTBL_ENTRY)&_ZN7S4617C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4617C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4617C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4617C2[];
extern  VTBL_ENTRY _ZTV7S4617C2[];
Class_Descriptor cd_S4617C2 = {  "S4617C2", // class name
  bases_S4617C2, 1,
  &(vtc_S4617C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4617C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4617C2),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  S4617C1  : S4617C2 {
  ::S499C36_nt s4617c1f0;
  int s4617c1f1[3];
  virtual  ~S4617C1(); // _ZN7S4617C1D1Ev
  virtual void  v1(); // _ZN7S4617C12v1Ev
  S4617C1(); // tgen
};
//SIG(1 S4617C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 FC4{ m Fp[2]} Fi[3]}


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

static void Test_S4617C1()
{
  extern Class_Descriptor cd_S4617C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4617C1, buf);
    S4617C1 *dp, &lv = *(dp=new (buf) S4617C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4617C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4617C1)");
    check_base_class_offset(lv, (S4617C3*)(S4617C2*), 0, "S4617C1");
    check_base_class_offset(lv, (S4617C2*), 0, "S4617C1");
    check_field_offset(lv, s4617c1f0, ABISELECT(8,4), "S4617C1.s4617c1f0");
    check_field_offset(lv, s4617c1f1, ABISELECT(24,12), "S4617C1.s4617c1f1");
    test_class_info(&lv, &cd_S4617C1);
    dp->~S4617C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4617C1(Test_S4617C1, "S4617C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S4617C1C1Ev();
extern void _ZN7S4617C1D1Ev();
Name_Map name_map_S4617C1[] = {
  NSPAIR(_ZN7S4617C1C1Ev),
  NSPAIR(_ZN7S4617C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4617C3;
extern VTBL_ENTRY _ZTI7S4617C3[];
extern  VTBL_ENTRY _ZTV7S4617C3[];
extern Class_Descriptor cd_S4617C2;
extern VTBL_ENTRY _ZTI7S4617C2[];
extern  VTBL_ENTRY _ZTV7S4617C2[];
static Base_Class bases_S4617C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4617C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4617C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4617C1[];
extern void _ZN7S4617C1D1Ev();
extern void _ZN7S4617C1D0Ev();
extern void _ZN7S4617C32v2Ev();
extern void _ZN7S4617C12v1Ev();
static  VTBL_ENTRY vtc_S4617C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4617C1[0]),
  (VTBL_ENTRY)&_ZN7S4617C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4617C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4617C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4617C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4617C1[];
extern  VTBL_ENTRY _ZTV7S4617C1[];
Class_Descriptor cd_S4617C1 = {  "S4617C1", // class name
  bases_S4617C1, 2,
  &(vtc_S4617C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S4617C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4617C1),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  S3925C2  : S3918C3_nt {
  int s3925c2f0[3];
  virtual  ~S3925C2(); // _ZN7S3925C2D1Ev
  S3925C2(); // tgen
};
//SIG(-1 S3925C2) C1{ BC2{ vd m FL} vd Fi[3]}


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

static void Test_S3925C2()
{
  extern Class_Descriptor cd_S3925C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S3925C2, buf);
    S3925C2 *dp, &lv = *(dp=new (buf) S3925C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S3925C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3925C2)");
    check_base_class_offset(lv, (S3918C3_nt*), 0, "S3925C2");
    check_field_offset(lv, s3925c2f0, ABISELECT(16,12), "S3925C2.s3925c2f0");
    test_class_info(&lv, &cd_S3925C2);
    dp->~S3925C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3925C2(Test_S3925C2, "S3925C2", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S3925C2C1Ev();
extern void _ZN7S3925C2D1Ev();
Name_Map name_map_S3925C2[] = {
  NSPAIR(_ZN7S3925C2C1Ev),
  NSPAIR(_ZN7S3925C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3918C3_nt;
extern VTBL_ENTRY _ZTI10S3918C3_nt[];
extern  VTBL_ENTRY _ZTV10S3918C3_nt[];
static Base_Class bases_S3925C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3918C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3925C2[];
extern void _ZN7S3925C2D1Ev();
extern void _ZN7S3925C2D0Ev();
static  VTBL_ENTRY vtc_S3925C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3925C2[0]),
  (VTBL_ENTRY)&_ZN7S3925C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3925C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3925C2[];
extern  VTBL_ENTRY _ZTV7S3925C2[];
Class_Descriptor cd_S3925C2 = {  "S3925C2", // class name
  bases_S3925C2, 1,
  &(vtc_S3925C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S3925C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3925C2),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  S3925C1  : S3925C2 {
  ::S7368C18_nt s3925c1f0;
  virtual  ~S3925C1(); // _ZN7S3925C1D1Ev
  S3925C1(); // tgen
};
//SIG(1 S3925C1) C1{ BC2{ BC3{ vd m FL} vd Fi[3]} vd FC4{ vd m Fp}}


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

static void Test_S3925C1()
{
  extern Class_Descriptor cd_S3925C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S3925C1, buf);
    S3925C1 *dp, &lv = *(dp=new (buf) S3925C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S3925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3925C1)");
    check_base_class_offset(lv, (S3918C3_nt*)(S3925C2*), 0, "S3925C1");
    check_base_class_offset(lv, (S3925C2*), 0, "S3925C1");
    check_field_offset(lv, s3925c1f0, ABISELECT(32,24), "S3925C1.s3925c1f0");
    test_class_info(&lv, &cd_S3925C1);
    dp->~S3925C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3925C1(Test_S3925C1, "S3925C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S3925C1C1Ev();
extern void _ZN7S3925C1D1Ev();
Name_Map name_map_S3925C1[] = {
  NSPAIR(_ZN7S3925C1C1Ev),
  NSPAIR(_ZN7S3925C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3918C3_nt;
extern VTBL_ENTRY _ZTI10S3918C3_nt[];
extern  VTBL_ENTRY _ZTV10S3918C3_nt[];
extern Class_Descriptor cd_S3925C2;
extern VTBL_ENTRY _ZTI7S3925C2[];
extern  VTBL_ENTRY _ZTV7S3925C2[];
static Base_Class bases_S3925C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3918C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3925C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3925C1[];
extern void _ZN7S3925C1D1Ev();
extern void _ZN7S3925C1D0Ev();
static  VTBL_ENTRY vtc_S3925C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3925C1[0]),
  (VTBL_ENTRY)&_ZN7S3925C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3925C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3925C1[];
extern  VTBL_ENTRY _ZTV7S3925C1[];
Class_Descriptor cd_S3925C1 = {  "S3925C1", // class name
  bases_S3925C1, 2,
  &(vtc_S3925C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S3925C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3925C1),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  S12525C1  {
  int s12525c1f0;
  ::S2011C29_nt s12525c1f1;
  char s12525c1f2[16];
  int s12525c1f3;
  char s12525c1f4[12];
};
//SIG(1 S12525C1) C1{ Fi FC2{ Fp[3] Fc[60] Fi} Fc[16] Fi Fc[12]}



static void Test_S12525C1()
{
  {
    init_simple_test("S12525C1");
    S12525C1 lv;
    check2(sizeof(lv), ABISELECT(128,112), "sizeof(S12525C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12525C1)");
    check_field_offset(lv, s12525c1f0, 0, "S12525C1.s12525c1f0");
    check_field_offset(lv, s12525c1f1, ABISELECT(8,4), "S12525C1.s12525c1f1");
    check_field_offset(lv, s12525c1f2, ABISELECT(96,80), "S12525C1.s12525c1f2");
    check_field_offset(lv, s12525c1f3, ABISELECT(112,96), "S12525C1.s12525c1f3");
    check_field_offset(lv, s12525c1f4, ABISELECT(116,100), "S12525C1.s12525c1f4");
  }
}
static Arrange_To_Call_Me vS12525C1(Test_S12525C1, "S12525C1", ABISELECT(128,112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6114C4  : virtual S7368C8 {
  virtual  ~S6114C4(); // _ZN7S6114C4D2Ev
  S6114C4(); // tgen
};
//SIG(-1 S6114C4) C1{ VBC2{ vd m Fc} vd}


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

static void Test_S6114C4()
{
  extern Class_Descriptor cd_S6114C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6114C4, buf);
    S6114C4 *dp, &lv = *(dp=new (buf) S6114C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6114C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6114C4)");
    check_base_class_offset(lv, (S7368C8*), ABISELECT(8,4), "S6114C4");
    test_class_info(&lv, &cd_S6114C4);
    dp->~S6114C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6114C4(Test_S6114C4, "S6114C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6114C4C1Ev();
extern void _ZN7S6114C4D2Ev();
Name_Map name_map_S6114C4[] = {
  NSPAIR(_ZN7S6114C4C1Ev),
  NSPAIR(_ZN7S6114C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
static Base_Class bases_S6114C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C8,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6114C4[];
extern void _ZN7S6114C4D1Ev();
extern void _ZN7S6114C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6114C4D1Ev,_ZTv0_n12_N7S6114C4D1Ev)();
extern void ABISELECT(_ZThn8_N7S6114C4D1Ev,_ZThn4_N7S6114C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6114C4D0Ev,_ZTv0_n12_N7S6114C4D0Ev)();
extern void ABISELECT(_ZThn8_N7S6114C4D0Ev,_ZThn4_N7S6114C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6114C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6114C4[0]),
  (VTBL_ENTRY)&_ZN7S6114C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6114C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6114C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6114C4D1Ev,_ZTv0_n12_N7S6114C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6114C4D0Ev,_ZTv0_n12_N7S6114C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S6114C4[];
static  VTT_ENTRY vtt_S6114C4[] = {
  {&(_ZTV7S6114C4[3]),  3,10},
  {&(_ZTV7S6114C4[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S6114C4[];
extern  VTBL_ENTRY _ZTV7S6114C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6114C4[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6114C4D0Ev,_ZTv0_n12_N7S6114C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S6114C4D0Ev,_ZThn4_N7S6114C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6114C4D1Ev,_ZTv0_n12_N7S6114C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S6114C4D1Ev,_ZThn4_N7S6114C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6114C4 = {  "S6114C4", // class name
  bases_S6114C4, 1,
  &(vtc_S6114C4[0]), // expected_vtbl_contents
  &(vtt_S6114C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6114C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6114C4),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6114C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6114C1  : S7368C78 , S7368C51 , virtual S6114C4 {
  long double s6114c1f0;
  virtual  ~S6114C1(); // _ZN7S6114C1D2Ev
  S6114C1(); // tgen
};
//SIG(1 S6114C1) C1{ BC2{ m} BC3{ m} VBC4{ VBC5{ vd m Fc} vd} vd FD}


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

static void Test_S6114C1()
{
  extern Class_Descriptor cd_S6114C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S6114C1, buf);
    S6114C1 *dp, &lv = *(dp=new (buf) S6114C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6114C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6114C1)");
    check_base_class_offset(lv, (S7368C78*), 0, "S6114C1");
    check_base_class_offset(lv, (S7368C51*), 0, "S6114C1");
    check_base_class_offset(lv, (S7368C8*)(S6114C4*), ABISELECT(32,16), "S6114C1");
    check_base_class_offset(lv, (S6114C4*), 0, "S6114C1");
    check_field_offset(lv, s6114c1f0, ABISELECT(16,4), "S6114C1.s6114c1f0");
    test_class_info(&lv, &cd_S6114C1);
    dp->~S6114C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6114C1(Test_S6114C1, "S6114C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6114C1C1Ev();
extern void _ZN7S6114C1D2Ev();
Name_Map name_map_S6114C1[] = {
  NSPAIR(_ZN7S6114C1C1Ev),
  NSPAIR(_ZN7S6114C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C78;
extern VTBL_ENTRY _ZTI8S7368C78[];
extern Class_Descriptor cd_S7368C51;
extern VTBL_ENTRY _ZTI8S7368C51[];
extern Class_Descriptor cd_S7368C8;
extern VTBL_ENTRY _ZTI7S7368C8[];
extern  VTBL_ENTRY _ZTV7S7368C8[];
extern Class_Descriptor cd_S6114C4;
extern VTBL_ENTRY _ZTI7S6114C4[];
extern  VTBL_ENTRY _ZTV7S6114C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6114C4[];
static Base_Class bases_S6114C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C78,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C51,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7368C8,    ABISELECT(32,16), //bcp->offset
    7, //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_S6114C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6114C1[];
extern void _ZN7S6114C1D1Ev();
extern void _ZN7S6114C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6114C1D1Ev,_ZTv0_n12_N7S6114C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S6114C1D1Ev,_ZThn16_N7S6114C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6114C1D0Ev,_ZTv0_n12_N7S6114C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S6114C1D0Ev,_ZThn16_N7S6114C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6114C1[] = {
  0,
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6114C1[0]),
  (VTBL_ENTRY)&_ZN7S6114C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6114C1D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6114C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6114C1D1Ev,_ZTv0_n12_N7S6114C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6114C1D0Ev,_ZTv0_n12_N7S6114C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6114C1[];
extern void _ZN7S6114C4D1Ev();
extern void _ZN7S6114C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6114C4__7S6114C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6114C4[0]),
  (VTBL_ENTRY)&_ZN7S6114C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6114C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6114C4D1Ev,_ZTv0_n12_N7S6114C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S6114C4D1Ev,_ZThn16_N7S6114C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6114C4D0Ev,_ZTv0_n12_N7S6114C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S6114C4D0Ev,_ZThn16_N7S6114C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7368C8__7S6114C4__7S6114C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6114C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6114C4D1Ev,_ZTv0_n12_N7S6114C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6114C4D0Ev,_ZTv0_n12_N7S6114C4D0Ev),
};
static  VTT_ENTRY vtt_S6114C1[] = {
  {&(_ZTV7S6114C1[5]),  5,12},
  {&(_ZTV7S6114C1[5]),  5,12},
  {&(_ZTV7S6114C1[10]),  10,12},
  {&(_tg__ZTV7S6114C4__7S6114C1[3]),  3,5},
  {&(_tg__ZTV7S7368C8__7S6114C4__7S6114C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6114C1[];
extern  VTBL_ENTRY _ZTV7S6114C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6114C1[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6114C4D0Ev,_ZTv0_n12_N7S6114C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6114C4D0Ev,_ZThn16_N7S6114C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6114C4D1Ev,_ZTv0_n12_N7S6114C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6114C4D1Ev,_ZThn16_N7S6114C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6114C1D0Ev,_ZTv0_n12_N7S6114C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6114C1D0Ev,_ZThn16_N7S6114C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6114C1D1Ev,_ZTv0_n12_N7S6114C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6114C1D1Ev,_ZThn16_N7S6114C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6114C1 = {  "S6114C1", // class name
  bases_S6114C1, 4,
  &(vtc_S6114C1[0]), // expected_vtbl_contents
  &(vtt_S6114C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6114C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6114C1),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6114C1),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1844C3  : S7368C18_nt {
  void *s1844c3f0;
  int s1844c3f1;
  char s1844c3f2;
  virtual  ~S1844C3(); // _ZN7S1844C3D1Ev
  S1844C3(); // tgen
};
//SIG(-1 S1844C3) C1{ BC2{ vd m Fp} vd Fp Fi Fc}


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

static void Test_S1844C3()
{
  extern Class_Descriptor cd_S1844C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1844C3, buf);
    S1844C3 *dp, &lv = *(dp=new (buf) S1844C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1844C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1844C3)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S1844C3");
    check_field_offset(lv, s1844c3f0, ABISELECT(16,8), "S1844C3.s1844c3f0");
    check_field_offset(lv, s1844c3f1, ABISELECT(24,12), "S1844C3.s1844c3f1");
    check_field_offset(lv, s1844c3f2, ABISELECT(28,16), "S1844C3.s1844c3f2");
    test_class_info(&lv, &cd_S1844C3);
    dp->~S1844C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1844C3(Test_S1844C3, "S1844C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1844C3C1Ev();
extern void _ZN7S1844C3D1Ev();
Name_Map name_map_S1844C3[] = {
  NSPAIR(_ZN7S1844C3C1Ev),
  NSPAIR(_ZN7S1844C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S1844C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1844C3[];
extern void _ZN7S1844C3D1Ev();
extern void _ZN7S1844C3D0Ev();
static  VTBL_ENTRY vtc_S1844C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1844C3[0]),
  (VTBL_ENTRY)&_ZN7S1844C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1844C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1844C3[];
extern  VTBL_ENTRY _ZTV7S1844C3[];
Class_Descriptor cd_S1844C3 = {  "S1844C3", // class name
  bases_S1844C3, 1,
  &(vtc_S1844C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1844C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1844C3),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  S1844C2  : S1844C3 {
  ~S1844C2(); // tgen
  S1844C2(); // tgen
};
//SIG(-1 S1844C2) C1{ BC2{ BC3{ vd m Fp} vd Fp Fi Fc}}


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

static void Test_S1844C2()
{
  extern Class_Descriptor cd_S1844C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1844C2, buf);
    S1844C2 *dp, &lv = *(dp=new (buf) S1844C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1844C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1844C2)");
    check_base_class_offset(lv, (S7368C18_nt*)(S1844C3*), 0, "S1844C2");
    check_base_class_offset(lv, (S1844C3*), 0, "S1844C2");
    test_class_info(&lv, &cd_S1844C2);
    dp->~S1844C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1844C2(Test_S1844C2, "S1844C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1844C2C1Ev();
extern void _ZN7S1844C2D1Ev();
Name_Map name_map_S1844C2[] = {
  NSPAIR(_ZN7S1844C2C1Ev),
  NSPAIR(_ZN7S1844C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
extern Class_Descriptor cd_S1844C3;
extern VTBL_ENTRY _ZTI7S1844C3[];
extern  VTBL_ENTRY _ZTV7S1844C3[];
static Base_Class bases_S1844C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1844C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1844C2[];
extern void _ZN7S1844C2D1Ev();
extern void _ZN7S1844C2D0Ev();
static  VTBL_ENTRY vtc_S1844C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1844C2[0]),
  (VTBL_ENTRY)&_ZN7S1844C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1844C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1844C2[];
extern  VTBL_ENTRY _ZTV7S1844C2[];
Class_Descriptor cd_S1844C2 = {  "S1844C2", // class name
  bases_S1844C2, 2,
  &(vtc_S1844C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1844C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1844C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1844C1  : S1844C2 {
  void *s1844c1f0;
  virtual  ~S1844C1(); // _ZN7S1844C1D1Ev
  S1844C1(); // tgen
};
//SIG(1 S1844C1) C1{ BC2{ BC3{ BC4{ vd m Fp} vd Fp Fi Fc}} vd Fp}


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

static void Test_S1844C1()
{
  extern Class_Descriptor cd_S1844C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S1844C1, buf);
    S1844C1 *dp, &lv = *(dp=new (buf) S1844C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S1844C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1844C1)");
    check_base_class_offset(lv, (S7368C18_nt*)(S1844C3*)(S1844C2*), 0, "S1844C1");
    check_base_class_offset(lv, (S1844C3*)(S1844C2*), 0, "S1844C1");
    check_base_class_offset(lv, (S1844C2*), 0, "S1844C1");
    check_field_offset(lv, s1844c1f0, ABISELECT(32,20), "S1844C1.s1844c1f0");
    test_class_info(&lv, &cd_S1844C1);
    dp->~S1844C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1844C1(Test_S1844C1, "S1844C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S1844C1C1Ev();
extern void _ZN7S1844C1D1Ev();
Name_Map name_map_S1844C1[] = {
  NSPAIR(_ZN7S1844C1C1Ev),
  NSPAIR(_ZN7S1844C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
extern Class_Descriptor cd_S1844C3;
extern VTBL_ENTRY _ZTI7S1844C3[];
extern  VTBL_ENTRY _ZTV7S1844C3[];
extern Class_Descriptor cd_S1844C2;
extern VTBL_ENTRY _ZTI7S1844C2[];
extern  VTBL_ENTRY _ZTV7S1844C2[];
static Base_Class bases_S1844C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1844C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1844C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1844C1[];
extern void _ZN7S1844C1D1Ev();
extern void _ZN7S1844C1D0Ev();
static  VTBL_ENTRY vtc_S1844C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1844C1[0]),
  (VTBL_ENTRY)&_ZN7S1844C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1844C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1844C1[];
extern  VTBL_ENTRY _ZTV7S1844C1[];
Class_Descriptor cd_S1844C1 = {  "S1844C1", // class name
  bases_S1844C1, 3,
  &(vtc_S1844C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S1844C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1844C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2130C4  {
  virtual  ~S2130C4(); // _ZN7S2130C4D1Ev
  virtual void  v2(); // _ZN7S2130C42v2Ev
  S2130C4(); // tgen
};
//SIG(-1 S2130C4) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S2130C4C1Ev();
extern void _ZN7S2130C4D1Ev();
Name_Map name_map_S2130C4[] = {
  NSPAIR(_ZN7S2130C4C1Ev),
  NSPAIR(_ZN7S2130C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2130C4[];
extern void _ZN7S2130C4D1Ev();
extern void _ZN7S2130C4D0Ev();
extern void _ZN7S2130C42v2Ev();
static  VTBL_ENTRY vtc_S2130C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2130C4[0]),
  (VTBL_ENTRY)&_ZN7S2130C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2130C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2130C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S2130C4[];
extern  VTBL_ENTRY _ZTV7S2130C4[];
Class_Descriptor cd_S2130C4 = {  "S2130C4", // class name
  0,0,//no base classes
  &(vtc_S2130C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2130C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2130C4),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  S2130C3  : S2130C4 {
  virtual  ~S2130C3(); // _ZN7S2130C3D1Ev
  S2130C3(); // tgen
};
//SIG(-1 S2130C3) C1{ BC2{ vd v1} vd}


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

static void Test_S2130C3()
{
  extern Class_Descriptor cd_S2130C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2130C3, buf);
    S2130C3 *dp, &lv = *(dp=new (buf) S2130C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2130C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2130C3)");
    check_base_class_offset(lv, (S2130C4*), 0, "S2130C3");
    test_class_info(&lv, &cd_S2130C3);
    dp->~S2130C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2130C3(Test_S2130C3, "S2130C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2130C3C1Ev();
extern void _ZN7S2130C3D1Ev();
Name_Map name_map_S2130C3[] = {
  NSPAIR(_ZN7S2130C3C1Ev),
  NSPAIR(_ZN7S2130C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2130C4;
extern VTBL_ENTRY _ZTI7S2130C4[];
extern  VTBL_ENTRY _ZTV7S2130C4[];
static Base_Class bases_S2130C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2130C3[];
extern void _ZN7S2130C3D1Ev();
extern void _ZN7S2130C3D0Ev();
extern void _ZN7S2130C42v2Ev();
static  VTBL_ENTRY vtc_S2130C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2130C3[0]),
  (VTBL_ENTRY)&_ZN7S2130C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2130C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2130C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S2130C3[];
extern  VTBL_ENTRY _ZTV7S2130C3[];
Class_Descriptor cd_S2130C3 = {  "S2130C3", // class name
  bases_S2130C3, 1,
  &(vtc_S2130C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2130C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2130C3),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  S2130C2  : S2130C3 {
  void *s2130c2f0[3];
  virtual  ~S2130C2(); // _ZN7S2130C2D1Ev
  virtual void  v3(); // _ZN7S2130C22v3Ev
  S2130C2(); // tgen
};
//SIG(-1 S2130C2) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp[3]}


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

static void Test_S2130C2()
{
  extern Class_Descriptor cd_S2130C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S2130C2, buf);
    S2130C2 *dp, &lv = *(dp=new (buf) S2130C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S2130C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2130C2)");
    check_base_class_offset(lv, (S2130C4*)(S2130C3*), 0, "S2130C2");
    check_base_class_offset(lv, (S2130C3*), 0, "S2130C2");
    check_field_offset(lv, s2130c2f0, ABISELECT(8,4), "S2130C2.s2130c2f0");
    test_class_info(&lv, &cd_S2130C2);
    dp->~S2130C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2130C2(Test_S2130C2, "S2130C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S2130C2C1Ev();
extern void _ZN7S2130C2D1Ev();
Name_Map name_map_S2130C2[] = {
  NSPAIR(_ZN7S2130C2C1Ev),
  NSPAIR(_ZN7S2130C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2130C4;
extern VTBL_ENTRY _ZTI7S2130C4[];
extern  VTBL_ENTRY _ZTV7S2130C4[];
extern Class_Descriptor cd_S2130C3;
extern VTBL_ENTRY _ZTI7S2130C3[];
extern  VTBL_ENTRY _ZTV7S2130C3[];
static Base_Class bases_S2130C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2130C2[];
extern void _ZN7S2130C2D1Ev();
extern void _ZN7S2130C2D0Ev();
extern void _ZN7S2130C42v2Ev();
extern void _ZN7S2130C22v3Ev();
static  VTBL_ENTRY vtc_S2130C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2130C2[0]),
  (VTBL_ENTRY)&_ZN7S2130C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2130C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2130C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2130C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S2130C2[];
extern  VTBL_ENTRY _ZTV7S2130C2[];
Class_Descriptor cd_S2130C2 = {  "S2130C2", // class name
  bases_S2130C2, 2,
  &(vtc_S2130C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S2130C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2130C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2130C1  : S2130C2 {
  virtual  ~S2130C1(); // _ZN7S2130C1D1Ev
  virtual void  v1(); // _ZN7S2130C12v1Ev
  S2130C1(); // tgen
};
//SIG(1 S2130C1) C1{ BC2{ BC3{ BC4{ vd v2} vd} vd v3 Fp[3]} vd v1}


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

static void Test_S2130C1()
{
  extern Class_Descriptor cd_S2130C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S2130C1, buf);
    S2130C1 *dp, &lv = *(dp=new (buf) S2130C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S2130C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2130C1)");
    check_base_class_offset(lv, (S2130C4*)(S2130C3*)(S2130C2*), 0, "S2130C1");
    check_base_class_offset(lv, (S2130C3*)(S2130C2*), 0, "S2130C1");
    check_base_class_offset(lv, (S2130C2*), 0, "S2130C1");
    test_class_info(&lv, &cd_S2130C1);
    dp->~S2130C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2130C1(Test_S2130C1, "S2130C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S2130C1C1Ev();
extern void _ZN7S2130C1D1Ev();
Name_Map name_map_S2130C1[] = {
  NSPAIR(_ZN7S2130C1C1Ev),
  NSPAIR(_ZN7S2130C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2130C4;
extern VTBL_ENTRY _ZTI7S2130C4[];
extern  VTBL_ENTRY _ZTV7S2130C4[];
extern Class_Descriptor cd_S2130C3;
extern VTBL_ENTRY _ZTI7S2130C3[];
extern  VTBL_ENTRY _ZTV7S2130C3[];
extern Class_Descriptor cd_S2130C2;
extern VTBL_ENTRY _ZTI7S2130C2[];
extern  VTBL_ENTRY _ZTV7S2130C2[];
static Base_Class bases_S2130C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2130C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2130C1[];
extern void _ZN7S2130C1D1Ev();
extern void _ZN7S2130C1D0Ev();
extern void _ZN7S2130C42v2Ev();
extern void _ZN7S2130C22v3Ev();
extern void _ZN7S2130C12v1Ev();
static  VTBL_ENTRY vtc_S2130C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2130C1[0]),
  (VTBL_ENTRY)&_ZN7S2130C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2130C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2130C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2130C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2130C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2130C1[];
extern  VTBL_ENTRY _ZTV7S2130C1[];
Class_Descriptor cd_S2130C1 = {  "S2130C1", // class name
  bases_S2130C1, 3,
  &(vtc_S2130C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S2130C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2130C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18053C1  {
  void *s18053c1f0[2];
  ::S7368C47 s18053c1f1;
  void  mf18053c1(); // _ZN8S18053C19mf18053c1Ev
};
//SIG(1 S18053C1) C1{ m Fp[2] FC2{ vd m FC3{ m Fp Fi FC4{ m}}}}


void  S18053C1 ::mf18053c1(){}

static void Test_S18053C1()
{
  {
    init_simple_test("S18053C1");
    S18053C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18053C1)");
    check_field_offset(lv, s18053c1f0, 0, "S18053C1.s18053c1f0");
    check_field_offset(lv, s18053c1f1, ABISELECT(16,8), "S18053C1.s18053c1f1");
  }
}
static Arrange_To_Call_Me vS18053C1(Test_S18053C1, "S18053C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12346C1  {
  int s12346c1f0;
  ::S7368C33 s12346c1f1;
  ::S499C36_nt s12346c1f2;
};
//SIG(1 S12346C1) C1{ Fi FC2{ BC3{ vd m Fc} vd FL} FC4{ m Fp[2]}}



static void Test_S12346C1()
{
  {
    init_simple_test("S12346C1");
    S12346C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S12346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12346C1)");
    check_field_offset(lv, s12346c1f0, 0, "S12346C1.s12346c1f0");
    check_field_offset(lv, s12346c1f1, ABISELECT(8,4), "S12346C1.s12346c1f1");
    check_field_offset(lv, s12346c1f2, ABISELECT(32,20), "S12346C1.s12346c1f2");
  }
}
static Arrange_To_Call_Me vS12346C1(Test_S12346C1, "S12346C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21304C1  {
  ::S7368C11 s21304c1f0;
  void *s21304c1f1[2];
  void  mf21304c1(); // _ZN8S21304C19mf21304c1Ev
  virtual  ~S21304C1(); // _ZN8S21304C1D1Ev
  S21304C1(); // tgen
};
//SIG(1 S21304C1) C1{ vd m FC2{ BC3{ vd m Fc} vd FL[2]} Fp[2]}


void  S21304C1 ::mf21304c1(){}
 S21304C1 ::~S21304C1(){ note_dtor("S21304C1", this);}
S21304C1 ::S21304C1(){ note_ctor("S21304C1", this);} // tgen

static void Test_S21304C1()
{
  extern Class_Descriptor cd_S21304C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S21304C1, buf);
    S21304C1 *dp, &lv = *(dp=new (buf) S21304C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S21304C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21304C1)");
    check_field_offset(lv, s21304c1f0, ABISELECT(8,4), "S21304C1.s21304c1f0");
    check_field_offset(lv, s21304c1f1, ABISELECT(40,28), "S21304C1.s21304c1f1");
    test_class_info(&lv, &cd_S21304C1);
    dp->~S21304C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21304C1(Test_S21304C1, "S21304C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S21304C1C1Ev();
extern void _ZN8S21304C1D1Ev();
Name_Map name_map_S21304C1[] = {
  NSPAIR(_ZN8S21304C1C1Ev),
  NSPAIR(_ZN8S21304C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21304C1[];
extern void _ZN8S21304C1D1Ev();
extern void _ZN8S21304C1D0Ev();
static  VTBL_ENTRY vtc_S21304C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21304C1[0]),
  (VTBL_ENTRY)&_ZN8S21304C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21304C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21304C1[];
extern  VTBL_ENTRY _ZTV8S21304C1[];
Class_Descriptor cd_S21304C1 = {  "S21304C1", // class name
  0,0,//no base classes
  &(vtc_S21304C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S21304C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21304C1),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  S2128C4  {
  virtual  ~S2128C4(); // _ZN7S2128C4D1Ev
  virtual void  v2(); // _ZN7S2128C42v2Ev
  S2128C4(); // tgen
};
//SIG(-1 S2128C4) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S2128C4C1Ev();
extern void _ZN7S2128C4D1Ev();
Name_Map name_map_S2128C4[] = {
  NSPAIR(_ZN7S2128C4C1Ev),
  NSPAIR(_ZN7S2128C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2128C4[];
extern void _ZN7S2128C4D1Ev();
extern void _ZN7S2128C4D0Ev();
extern void _ZN7S2128C42v2Ev();
static  VTBL_ENTRY vtc_S2128C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2128C4[0]),
  (VTBL_ENTRY)&_ZN7S2128C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2128C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2128C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S2128C4[];
extern  VTBL_ENTRY _ZTV7S2128C4[];
Class_Descriptor cd_S2128C4 = {  "S2128C4", // class name
  0,0,//no base classes
  &(vtc_S2128C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2128C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2128C4),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  S2128C3  : S2128C4 {
  virtual  ~S2128C3(); // _ZN7S2128C3D1Ev
  S2128C3(); // tgen
};
//SIG(-1 S2128C3) C1{ BC2{ vd v1} vd}


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

static void Test_S2128C3()
{
  extern Class_Descriptor cd_S2128C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2128C3, buf);
    S2128C3 *dp, &lv = *(dp=new (buf) S2128C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2128C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2128C3)");
    check_base_class_offset(lv, (S2128C4*), 0, "S2128C3");
    test_class_info(&lv, &cd_S2128C3);
    dp->~S2128C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2128C3(Test_S2128C3, "S2128C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2128C3C1Ev();
extern void _ZN7S2128C3D1Ev();
Name_Map name_map_S2128C3[] = {
  NSPAIR(_ZN7S2128C3C1Ev),
  NSPAIR(_ZN7S2128C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2128C4;
extern VTBL_ENTRY _ZTI7S2128C4[];
extern  VTBL_ENTRY _ZTV7S2128C4[];
static Base_Class bases_S2128C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2128C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2128C3[];
extern void _ZN7S2128C3D1Ev();
extern void _ZN7S2128C3D0Ev();
extern void _ZN7S2128C42v2Ev();
static  VTBL_ENTRY vtc_S2128C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2128C3[0]),
  (VTBL_ENTRY)&_ZN7S2128C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2128C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2128C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S2128C3[];
extern  VTBL_ENTRY _ZTV7S2128C3[];
Class_Descriptor cd_S2128C3 = {  "S2128C3", // class name
  bases_S2128C3, 1,
  &(vtc_S2128C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2128C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2128C3),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  S2128C2  : S2128C3 {
  void *s2128c2f0;
  virtual void  v3(); // _ZN7S2128C22v3Ev
  ~S2128C2(); // tgen
  S2128C2(); // tgen
};
//SIG(-1 S2128C2) C1{ BC2{ BC3{ vd v2} vd} v1 Fp}


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

static void Test_S2128C2()
{
  extern Class_Descriptor cd_S2128C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2128C2, buf);
    S2128C2 *dp, &lv = *(dp=new (buf) S2128C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2128C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2128C2)");
    check_base_class_offset(lv, (S2128C4*)(S2128C3*), 0, "S2128C2");
    check_base_class_offset(lv, (S2128C3*), 0, "S2128C2");
    check_field_offset(lv, s2128c2f0, ABISELECT(8,4), "S2128C2.s2128c2f0");
    test_class_info(&lv, &cd_S2128C2);
    dp->~S2128C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2128C2(Test_S2128C2, "S2128C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2128C2C1Ev();
extern void _ZN7S2128C2D1Ev();
Name_Map name_map_S2128C2[] = {
  NSPAIR(_ZN7S2128C2C1Ev),
  NSPAIR(_ZN7S2128C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2128C4;
extern VTBL_ENTRY _ZTI7S2128C4[];
extern  VTBL_ENTRY _ZTV7S2128C4[];
extern Class_Descriptor cd_S2128C3;
extern VTBL_ENTRY _ZTI7S2128C3[];
extern  VTBL_ENTRY _ZTV7S2128C3[];
static Base_Class bases_S2128C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2128C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2128C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2128C2[];
extern void _ZN7S2128C2D1Ev();
extern void _ZN7S2128C2D0Ev();
extern void _ZN7S2128C42v2Ev();
extern void _ZN7S2128C22v3Ev();
static  VTBL_ENTRY vtc_S2128C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2128C2[0]),
  (VTBL_ENTRY)&_ZN7S2128C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2128C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2128C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2128C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S2128C2[];
extern  VTBL_ENTRY _ZTV7S2128C2[];
Class_Descriptor cd_S2128C2 = {  "S2128C2", // class name
  bases_S2128C2, 2,
  &(vtc_S2128C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2128C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2128C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2128C1  : S2128C2 {
  char s2128c1f0[2];
  virtual void  v1(); // _ZN7S2128C12v1Ev
  ~S2128C1(); // tgen
  S2128C1(); // tgen
};
//SIG(1 S2128C1) C1{ BC2{ BC3{ BC4{ vd v2} vd} v3 Fp} v1 Fc[2]}


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

static void Test_S2128C1()
{
  extern Class_Descriptor cd_S2128C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2128C1, buf);
    S2128C1 *dp, &lv = *(dp=new (buf) S2128C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2128C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2128C1)");
    check_base_class_offset(lv, (S2128C4*)(S2128C3*)(S2128C2*), 0, "S2128C1");
    check_base_class_offset(lv, (S2128C3*)(S2128C2*), 0, "S2128C1");
    check_base_class_offset(lv, (S2128C2*), 0, "S2128C1");
    check_field_offset(lv, s2128c1f0, ABISELECT(16,8), "S2128C1.s2128c1f0");
    test_class_info(&lv, &cd_S2128C1);
    dp->~S2128C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2128C1(Test_S2128C1, "S2128C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S2128C1C1Ev();
extern void _ZN7S2128C1D1Ev();
Name_Map name_map_S2128C1[] = {
  NSPAIR(_ZN7S2128C1C1Ev),
  NSPAIR(_ZN7S2128C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2128C4;
extern VTBL_ENTRY _ZTI7S2128C4[];
extern  VTBL_ENTRY _ZTV7S2128C4[];
extern Class_Descriptor cd_S2128C3;
extern VTBL_ENTRY _ZTI7S2128C3[];
extern  VTBL_ENTRY _ZTV7S2128C3[];
extern Class_Descriptor cd_S2128C2;
extern VTBL_ENTRY _ZTI7S2128C2[];
extern  VTBL_ENTRY _ZTV7S2128C2[];
static Base_Class bases_S2128C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2128C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2128C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2128C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2128C1[];
extern void _ZN7S2128C1D1Ev();
extern void _ZN7S2128C1D0Ev();
extern void _ZN7S2128C42v2Ev();
extern void _ZN7S2128C22v3Ev();
extern void _ZN7S2128C12v1Ev();
static  VTBL_ENTRY vtc_S2128C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2128C1[0]),
  (VTBL_ENTRY)&_ZN7S2128C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2128C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2128C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2128C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2128C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2128C1[];
extern  VTBL_ENTRY _ZTV7S2128C1[];
Class_Descriptor cd_S2128C1 = {  "S2128C1", // class name
  bases_S2128C1, 3,
  &(vtc_S2128C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2128C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2128C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4618C3  {
  virtual  ~S4618C3(); // _ZN7S4618C3D1Ev
  virtual void  v2(); // _ZN7S4618C32v2Ev
  S4618C3(); // tgen
};
//SIG(-1 S4618C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4618C3C1Ev();
extern void _ZN7S4618C3D1Ev();
Name_Map name_map_S4618C3[] = {
  NSPAIR(_ZN7S4618C3C1Ev),
  NSPAIR(_ZN7S4618C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4618C3[];
extern void _ZN7S4618C3D1Ev();
extern void _ZN7S4618C3D0Ev();
extern void _ZN7S4618C32v2Ev();
static  VTBL_ENTRY vtc_S4618C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4618C3[0]),
  (VTBL_ENTRY)&_ZN7S4618C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4618C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4618C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4618C3[];
extern  VTBL_ENTRY _ZTV7S4618C3[];
Class_Descriptor cd_S4618C3 = {  "S4618C3", // class name
  0,0,//no base classes
  &(vtc_S4618C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4618C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4618C3),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  S4618C2  : S4618C3 {
  virtual  ~S4618C2(); // _ZN7S4618C2D1Ev
  S4618C2(); // tgen
};
//SIG(-1 S4618C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4618C2()
{
  extern Class_Descriptor cd_S4618C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4618C2, buf);
    S4618C2 *dp, &lv = *(dp=new (buf) S4618C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4618C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4618C2)");
    check_base_class_offset(lv, (S4618C3*), 0, "S4618C2");
    test_class_info(&lv, &cd_S4618C2);
    dp->~S4618C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4618C2(Test_S4618C2, "S4618C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4618C2C1Ev();
extern void _ZN7S4618C2D1Ev();
Name_Map name_map_S4618C2[] = {
  NSPAIR(_ZN7S4618C2C1Ev),
  NSPAIR(_ZN7S4618C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4618C3;
extern VTBL_ENTRY _ZTI7S4618C3[];
extern  VTBL_ENTRY _ZTV7S4618C3[];
static Base_Class bases_S4618C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4618C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4618C2[];
extern void _ZN7S4618C2D1Ev();
extern void _ZN7S4618C2D0Ev();
extern void _ZN7S4618C32v2Ev();
static  VTBL_ENTRY vtc_S4618C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4618C2[0]),
  (VTBL_ENTRY)&_ZN7S4618C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4618C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4618C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4618C2[];
extern  VTBL_ENTRY _ZTV7S4618C2[];
Class_Descriptor cd_S4618C2 = {  "S4618C2", // class name
  bases_S4618C2, 1,
  &(vtc_S4618C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4618C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4618C2),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  S4618C1  : S4618C2 {
  ::S499C36_nt s4618c1f0;
  virtual  ~S4618C1(); // _ZN7S4618C1D1Ev
  virtual void  v1(); // _ZN7S4618C12v1Ev
  S4618C1(); // tgen
};
//SIG(1 S4618C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 FC4{ m Fp[2]}}


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

static void Test_S4618C1()
{
  extern Class_Descriptor cd_S4618C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4618C1, buf);
    S4618C1 *dp, &lv = *(dp=new (buf) S4618C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4618C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4618C1)");
    check_base_class_offset(lv, (S4618C3*)(S4618C2*), 0, "S4618C1");
    check_base_class_offset(lv, (S4618C2*), 0, "S4618C1");
    check_field_offset(lv, s4618c1f0, ABISELECT(8,4), "S4618C1.s4618c1f0");
    test_class_info(&lv, &cd_S4618C1);
    dp->~S4618C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4618C1(Test_S4618C1, "S4618C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4618C1C1Ev();
extern void _ZN7S4618C1D1Ev();
Name_Map name_map_S4618C1[] = {
  NSPAIR(_ZN7S4618C1C1Ev),
  NSPAIR(_ZN7S4618C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4618C3;
extern VTBL_ENTRY _ZTI7S4618C3[];
extern  VTBL_ENTRY _ZTV7S4618C3[];
extern Class_Descriptor cd_S4618C2;
extern VTBL_ENTRY _ZTI7S4618C2[];
extern  VTBL_ENTRY _ZTV7S4618C2[];
static Base_Class bases_S4618C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4618C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4618C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4618C1[];
extern void _ZN7S4618C1D1Ev();
extern void _ZN7S4618C1D0Ev();
extern void _ZN7S4618C32v2Ev();
extern void _ZN7S4618C12v1Ev();
static  VTBL_ENTRY vtc_S4618C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4618C1[0]),
  (VTBL_ENTRY)&_ZN7S4618C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4618C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4618C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4618C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4618C1[];
extern  VTBL_ENTRY _ZTV7S4618C1[];
Class_Descriptor cd_S4618C1 = {  "S4618C1", // class name
  bases_S4618C1, 2,
  &(vtc_S4618C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4618C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4618C1),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  S4638C3  {
  virtual  ~S4638C3(); // _ZN7S4638C3D1Ev
  virtual void  v2(); // _ZN7S4638C32v2Ev
  S4638C3(); // tgen
};
//SIG(-1 S4638C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4638C3C1Ev();
extern void _ZN7S4638C3D1Ev();
Name_Map name_map_S4638C3[] = {
  NSPAIR(_ZN7S4638C3C1Ev),
  NSPAIR(_ZN7S4638C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4638C3[];
extern void _ZN7S4638C3D1Ev();
extern void _ZN7S4638C3D0Ev();
extern void _ZN7S4638C32v2Ev();
static  VTBL_ENTRY vtc_S4638C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4638C3[0]),
  (VTBL_ENTRY)&_ZN7S4638C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4638C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4638C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4638C3[];
extern  VTBL_ENTRY _ZTV7S4638C3[];
Class_Descriptor cd_S4638C3 = {  "S4638C3", // class name
  0,0,//no base classes
  &(vtc_S4638C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4638C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4638C3),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  S4638C2  : S4638C3 {
  virtual  ~S4638C2(); // _ZN7S4638C2D1Ev
  S4638C2(); // tgen
};
//SIG(-1 S4638C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4638C2()
{
  extern Class_Descriptor cd_S4638C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4638C2, buf);
    S4638C2 *dp, &lv = *(dp=new (buf) S4638C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4638C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4638C2)");
    check_base_class_offset(lv, (S4638C3*), 0, "S4638C2");
    test_class_info(&lv, &cd_S4638C2);
    dp->~S4638C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4638C2(Test_S4638C2, "S4638C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4638C2C1Ev();
extern void _ZN7S4638C2D1Ev();
Name_Map name_map_S4638C2[] = {
  NSPAIR(_ZN7S4638C2C1Ev),
  NSPAIR(_ZN7S4638C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4638C3;
extern VTBL_ENTRY _ZTI7S4638C3[];
extern  VTBL_ENTRY _ZTV7S4638C3[];
static Base_Class bases_S4638C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4638C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4638C2[];
extern void _ZN7S4638C2D1Ev();
extern void _ZN7S4638C2D0Ev();
extern void _ZN7S4638C32v2Ev();
static  VTBL_ENTRY vtc_S4638C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4638C2[0]),
  (VTBL_ENTRY)&_ZN7S4638C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4638C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4638C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4638C2[];
extern  VTBL_ENTRY _ZTV7S4638C2[];
Class_Descriptor cd_S4638C2 = {  "S4638C2", // class name
  bases_S4638C2, 1,
  &(vtc_S4638C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4638C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4638C2),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  S4638C1  : S4638C2 {
  void *s4638c1f0[2];
  int s4638c1f1[2];
  virtual  ~S4638C1(); // _ZN7S4638C1D1Ev
  virtual void  v1(); // _ZN7S4638C12v1Ev
  S4638C1(); // tgen
};
//SIG(1 S4638C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp[2] Fi[2]}


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

static void Test_S4638C1()
{
  extern Class_Descriptor cd_S4638C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4638C1, buf);
    S4638C1 *dp, &lv = *(dp=new (buf) S4638C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4638C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4638C1)");
    check_base_class_offset(lv, (S4638C3*)(S4638C2*), 0, "S4638C1");
    check_base_class_offset(lv, (S4638C2*), 0, "S4638C1");
    check_field_offset(lv, s4638c1f0, ABISELECT(8,4), "S4638C1.s4638c1f0");
    check_field_offset(lv, s4638c1f1, ABISELECT(24,12), "S4638C1.s4638c1f1");
    test_class_info(&lv, &cd_S4638C1);
    dp->~S4638C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4638C1(Test_S4638C1, "S4638C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4638C1C1Ev();
extern void _ZN7S4638C1D1Ev();
Name_Map name_map_S4638C1[] = {
  NSPAIR(_ZN7S4638C1C1Ev),
  NSPAIR(_ZN7S4638C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4638C3;
extern VTBL_ENTRY _ZTI7S4638C3[];
extern  VTBL_ENTRY _ZTV7S4638C3[];
extern Class_Descriptor cd_S4638C2;
extern VTBL_ENTRY _ZTI7S4638C2[];
extern  VTBL_ENTRY _ZTV7S4638C2[];
static Base_Class bases_S4638C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4638C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4638C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4638C1[];
extern void _ZN7S4638C1D1Ev();
extern void _ZN7S4638C1D0Ev();
extern void _ZN7S4638C32v2Ev();
extern void _ZN7S4638C12v1Ev();
static  VTBL_ENTRY vtc_S4638C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4638C1[0]),
  (VTBL_ENTRY)&_ZN7S4638C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4638C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4638C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4638C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4638C1[];
extern  VTBL_ENTRY _ZTV7S4638C1[];
Class_Descriptor cd_S4638C1 = {  "S4638C1", // class name
  bases_S4638C1, 2,
  &(vtc_S4638C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4638C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4638C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4633C3  {
  virtual  ~S4633C3(); // _ZN7S4633C3D1Ev
  virtual void  v2(); // _ZN7S4633C32v2Ev
  S4633C3(); // tgen
};
//SIG(-1 S4633C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4633C3C1Ev();
extern void _ZN7S4633C3D1Ev();
Name_Map name_map_S4633C3[] = {
  NSPAIR(_ZN7S4633C3C1Ev),
  NSPAIR(_ZN7S4633C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4633C3[];
extern void _ZN7S4633C3D1Ev();
extern void _ZN7S4633C3D0Ev();
extern void _ZN7S4633C32v2Ev();
static  VTBL_ENTRY vtc_S4633C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4633C3[0]),
  (VTBL_ENTRY)&_ZN7S4633C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4633C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4633C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4633C3[];
extern  VTBL_ENTRY _ZTV7S4633C3[];
Class_Descriptor cd_S4633C3 = {  "S4633C3", // class name
  0,0,//no base classes
  &(vtc_S4633C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4633C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4633C3),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  S4633C2  : S4633C3 {
  virtual  ~S4633C2(); // _ZN7S4633C2D1Ev
  S4633C2(); // tgen
};
//SIG(-1 S4633C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4633C2()
{
  extern Class_Descriptor cd_S4633C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4633C2, buf);
    S4633C2 *dp, &lv = *(dp=new (buf) S4633C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4633C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4633C2)");
    check_base_class_offset(lv, (S4633C3*), 0, "S4633C2");
    test_class_info(&lv, &cd_S4633C2);
    dp->~S4633C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4633C2(Test_S4633C2, "S4633C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4633C2C1Ev();
extern void _ZN7S4633C2D1Ev();
Name_Map name_map_S4633C2[] = {
  NSPAIR(_ZN7S4633C2C1Ev),
  NSPAIR(_ZN7S4633C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4633C3;
extern VTBL_ENTRY _ZTI7S4633C3[];
extern  VTBL_ENTRY _ZTV7S4633C3[];
static Base_Class bases_S4633C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4633C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4633C2[];
extern void _ZN7S4633C2D1Ev();
extern void _ZN7S4633C2D0Ev();
extern void _ZN7S4633C32v2Ev();
static  VTBL_ENTRY vtc_S4633C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4633C2[0]),
  (VTBL_ENTRY)&_ZN7S4633C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4633C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4633C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4633C2[];
extern  VTBL_ENTRY _ZTV7S4633C2[];
Class_Descriptor cd_S4633C2 = {  "S4633C2", // class name
  bases_S4633C2, 1,
  &(vtc_S4633C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4633C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4633C2),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  S4633C1  : S4633C2 {
  void *s4633c1f0;
  int s4633c1f1;
  char s4633c1f2[2];
  virtual  ~S4633C1(); // _ZN7S4633C1D1Ev
  virtual void  v1(); // _ZN7S4633C12v1Ev
  S4633C1(); // tgen
};
//SIG(1 S4633C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp Fi Fc[2]}


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

static void Test_S4633C1()
{
  extern Class_Descriptor cd_S4633C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4633C1, buf);
    S4633C1 *dp, &lv = *(dp=new (buf) S4633C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4633C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4633C1)");
    check_base_class_offset(lv, (S4633C3*)(S4633C2*), 0, "S4633C1");
    check_base_class_offset(lv, (S4633C2*), 0, "S4633C1");
    check_field_offset(lv, s4633c1f0, ABISELECT(8,4), "S4633C1.s4633c1f0");
    check_field_offset(lv, s4633c1f1, ABISELECT(16,8), "S4633C1.s4633c1f1");
    check_field_offset(lv, s4633c1f2, ABISELECT(20,12), "S4633C1.s4633c1f2");
    test_class_info(&lv, &cd_S4633C1);
    dp->~S4633C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4633C1(Test_S4633C1, "S4633C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4633C1C1Ev();
extern void _ZN7S4633C1D1Ev();
Name_Map name_map_S4633C1[] = {
  NSPAIR(_ZN7S4633C1C1Ev),
  NSPAIR(_ZN7S4633C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4633C3;
extern VTBL_ENTRY _ZTI7S4633C3[];
extern  VTBL_ENTRY _ZTV7S4633C3[];
extern Class_Descriptor cd_S4633C2;
extern VTBL_ENTRY _ZTI7S4633C2[];
extern  VTBL_ENTRY _ZTV7S4633C2[];
static Base_Class bases_S4633C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4633C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4633C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4633C1[];
extern void _ZN7S4633C1D1Ev();
extern void _ZN7S4633C1D0Ev();
extern void _ZN7S4633C32v2Ev();
extern void _ZN7S4633C12v1Ev();
static  VTBL_ENTRY vtc_S4633C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4633C1[0]),
  (VTBL_ENTRY)&_ZN7S4633C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4633C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4633C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4633C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4633C1[];
extern  VTBL_ENTRY _ZTV7S4633C1[];
Class_Descriptor cd_S4633C1 = {  "S4633C1", // class name
  bases_S4633C1, 2,
  &(vtc_S4633C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4633C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4633C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4628C3  {
  virtual  ~S4628C3(); // _ZN7S4628C3D1Ev
  virtual void  v2(); // _ZN7S4628C32v2Ev
  S4628C3(); // tgen
};
//SIG(-1 S4628C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4628C3C1Ev();
extern void _ZN7S4628C3D1Ev();
Name_Map name_map_S4628C3[] = {
  NSPAIR(_ZN7S4628C3C1Ev),
  NSPAIR(_ZN7S4628C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4628C3[];
extern void _ZN7S4628C3D1Ev();
extern void _ZN7S4628C3D0Ev();
extern void _ZN7S4628C32v2Ev();
static  VTBL_ENTRY vtc_S4628C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4628C3[0]),
  (VTBL_ENTRY)&_ZN7S4628C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4628C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4628C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4628C3[];
extern  VTBL_ENTRY _ZTV7S4628C3[];
Class_Descriptor cd_S4628C3 = {  "S4628C3", // class name
  0,0,//no base classes
  &(vtc_S4628C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4628C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4628C3),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  S4628C2  : S4628C3 {
  virtual  ~S4628C2(); // _ZN7S4628C2D1Ev
  S4628C2(); // tgen
};
//SIG(-1 S4628C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4628C2()
{
  extern Class_Descriptor cd_S4628C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4628C2, buf);
    S4628C2 *dp, &lv = *(dp=new (buf) S4628C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4628C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4628C2)");
    check_base_class_offset(lv, (S4628C3*), 0, "S4628C2");
    test_class_info(&lv, &cd_S4628C2);
    dp->~S4628C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4628C2(Test_S4628C2, "S4628C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4628C2C1Ev();
extern void _ZN7S4628C2D1Ev();
Name_Map name_map_S4628C2[] = {
  NSPAIR(_ZN7S4628C2C1Ev),
  NSPAIR(_ZN7S4628C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4628C3;
extern VTBL_ENTRY _ZTI7S4628C3[];
extern  VTBL_ENTRY _ZTV7S4628C3[];
static Base_Class bases_S4628C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4628C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4628C2[];
extern void _ZN7S4628C2D1Ev();
extern void _ZN7S4628C2D0Ev();
extern void _ZN7S4628C32v2Ev();
static  VTBL_ENTRY vtc_S4628C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4628C2[0]),
  (VTBL_ENTRY)&_ZN7S4628C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4628C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4628C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4628C2[];
extern  VTBL_ENTRY _ZTV7S4628C2[];
Class_Descriptor cd_S4628C2 = {  "S4628C2", // class name
  bases_S4628C2, 1,
  &(vtc_S4628C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4628C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4628C2),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  S4628C1  : S4628C2 {
  void *s4628c1f0;
  char s4628c1f1[3];
  int s4628c1f2;
  virtual  ~S4628C1(); // _ZN7S4628C1D1Ev
  virtual void  v1(); // _ZN7S4628C12v1Ev
  S4628C1(); // tgen
};
//SIG(1 S4628C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp Fc[3] Fi}


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

static void Test_S4628C1()
{
  extern Class_Descriptor cd_S4628C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4628C1, buf);
    S4628C1 *dp, &lv = *(dp=new (buf) S4628C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4628C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4628C1)");
    check_base_class_offset(lv, (S4628C3*)(S4628C2*), 0, "S4628C1");
    check_base_class_offset(lv, (S4628C2*), 0, "S4628C1");
    check_field_offset(lv, s4628c1f0, ABISELECT(8,4), "S4628C1.s4628c1f0");
    check_field_offset(lv, s4628c1f1, ABISELECT(16,8), "S4628C1.s4628c1f1");
    check_field_offset(lv, s4628c1f2, ABISELECT(20,12), "S4628C1.s4628c1f2");
    test_class_info(&lv, &cd_S4628C1);
    dp->~S4628C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4628C1(Test_S4628C1, "S4628C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4628C1C1Ev();
extern void _ZN7S4628C1D1Ev();
Name_Map name_map_S4628C1[] = {
  NSPAIR(_ZN7S4628C1C1Ev),
  NSPAIR(_ZN7S4628C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4628C3;
extern VTBL_ENTRY _ZTI7S4628C3[];
extern  VTBL_ENTRY _ZTV7S4628C3[];
extern Class_Descriptor cd_S4628C2;
extern VTBL_ENTRY _ZTI7S4628C2[];
extern  VTBL_ENTRY _ZTV7S4628C2[];
static Base_Class bases_S4628C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4628C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4628C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4628C1[];
extern void _ZN7S4628C1D1Ev();
extern void _ZN7S4628C1D0Ev();
extern void _ZN7S4628C32v2Ev();
extern void _ZN7S4628C12v1Ev();
static  VTBL_ENTRY vtc_S4628C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4628C1[0]),
  (VTBL_ENTRY)&_ZN7S4628C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4628C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4628C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4628C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4628C1[];
extern  VTBL_ENTRY _ZTV7S4628C1[];
Class_Descriptor cd_S4628C1 = {  "S4628C1", // class name
  bases_S4628C1, 2,
  &(vtc_S4628C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4628C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4628C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4624C3  {
  virtual  ~S4624C3(); // _ZN7S4624C3D1Ev
  virtual void  v2(); // _ZN7S4624C32v2Ev
  S4624C3(); // tgen
};
//SIG(-1 S4624C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4624C3C1Ev();
extern void _ZN7S4624C3D1Ev();
Name_Map name_map_S4624C3[] = {
  NSPAIR(_ZN7S4624C3C1Ev),
  NSPAIR(_ZN7S4624C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4624C3[];
extern void _ZN7S4624C3D1Ev();
extern void _ZN7S4624C3D0Ev();
extern void _ZN7S4624C32v2Ev();
static  VTBL_ENTRY vtc_S4624C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4624C3[0]),
  (VTBL_ENTRY)&_ZN7S4624C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4624C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4624C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4624C3[];
extern  VTBL_ENTRY _ZTV7S4624C3[];
Class_Descriptor cd_S4624C3 = {  "S4624C3", // class name
  0,0,//no base classes
  &(vtc_S4624C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4624C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4624C3),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  S4624C2  : S4624C3 {
  virtual  ~S4624C2(); // _ZN7S4624C2D1Ev
  S4624C2(); // tgen
};
//SIG(-1 S4624C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4624C2()
{
  extern Class_Descriptor cd_S4624C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4624C2, buf);
    S4624C2 *dp, &lv = *(dp=new (buf) S4624C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4624C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4624C2)");
    check_base_class_offset(lv, (S4624C3*), 0, "S4624C2");
    test_class_info(&lv, &cd_S4624C2);
    dp->~S4624C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4624C2(Test_S4624C2, "S4624C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4624C2C1Ev();
extern void _ZN7S4624C2D1Ev();
Name_Map name_map_S4624C2[] = {
  NSPAIR(_ZN7S4624C2C1Ev),
  NSPAIR(_ZN7S4624C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4624C3;
extern VTBL_ENTRY _ZTI7S4624C3[];
extern  VTBL_ENTRY _ZTV7S4624C3[];
static Base_Class bases_S4624C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4624C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4624C2[];
extern void _ZN7S4624C2D1Ev();
extern void _ZN7S4624C2D0Ev();
extern void _ZN7S4624C32v2Ev();
static  VTBL_ENTRY vtc_S4624C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4624C2[0]),
  (VTBL_ENTRY)&_ZN7S4624C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4624C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4624C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4624C2[];
extern  VTBL_ENTRY _ZTV7S4624C2[];
Class_Descriptor cd_S4624C2 = {  "S4624C2", // class name
  bases_S4624C2, 1,
  &(vtc_S4624C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4624C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4624C2),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  S4624C1  : S4624C2 {
  __tsi64 s4624c1f0[3];
  void *s4624c1f1[2];
  virtual  ~S4624C1(); // _ZN7S4624C1D1Ev
  virtual void  v1(); // _ZN7S4624C12v1Ev
  S4624C1(); // tgen
};
//SIG(1 S4624C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 FL[3] Fp[2]}


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

static void Test_S4624C1()
{
  extern Class_Descriptor cd_S4624C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S4624C1, buf);
    S4624C1 *dp, &lv = *(dp=new (buf) S4624C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S4624C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4624C1)");
    check_base_class_offset(lv, (S4624C3*)(S4624C2*), 0, "S4624C1");
    check_base_class_offset(lv, (S4624C2*), 0, "S4624C1");
    check_field_offset(lv, s4624c1f0, ABISELECT(8,4), "S4624C1.s4624c1f0");
    check_field_offset(lv, s4624c1f1, ABISELECT(32,28), "S4624C1.s4624c1f1");
    test_class_info(&lv, &cd_S4624C1);
    dp->~S4624C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4624C1(Test_S4624C1, "S4624C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S4624C1C1Ev();
extern void _ZN7S4624C1D1Ev();
Name_Map name_map_S4624C1[] = {
  NSPAIR(_ZN7S4624C1C1Ev),
  NSPAIR(_ZN7S4624C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4624C3;
extern VTBL_ENTRY _ZTI7S4624C3[];
extern  VTBL_ENTRY _ZTV7S4624C3[];
extern Class_Descriptor cd_S4624C2;
extern VTBL_ENTRY _ZTI7S4624C2[];
extern  VTBL_ENTRY _ZTV7S4624C2[];
static Base_Class bases_S4624C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4624C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4624C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4624C1[];
extern void _ZN7S4624C1D1Ev();
extern void _ZN7S4624C1D0Ev();
extern void _ZN7S4624C32v2Ev();
extern void _ZN7S4624C12v1Ev();
static  VTBL_ENTRY vtc_S4624C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4624C1[0]),
  (VTBL_ENTRY)&_ZN7S4624C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4624C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4624C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4624C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4624C1[];
extern  VTBL_ENTRY _ZTV7S4624C1[];
Class_Descriptor cd_S4624C1 = {  "S4624C1", // class name
  bases_S4624C1, 2,
  &(vtc_S4624C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S4624C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4624C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4621C3  {
  virtual  ~S4621C3(); // _ZN7S4621C3D1Ev
  virtual void  v2(); // _ZN7S4621C32v2Ev
  S4621C3(); // tgen
};
//SIG(-1 S4621C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4621C3C1Ev();
extern void _ZN7S4621C3D1Ev();
Name_Map name_map_S4621C3[] = {
  NSPAIR(_ZN7S4621C3C1Ev),
  NSPAIR(_ZN7S4621C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4621C3[];
extern void _ZN7S4621C3D1Ev();
extern void _ZN7S4621C3D0Ev();
extern void _ZN7S4621C32v2Ev();
static  VTBL_ENTRY vtc_S4621C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4621C3[0]),
  (VTBL_ENTRY)&_ZN7S4621C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4621C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4621C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4621C3[];
extern  VTBL_ENTRY _ZTV7S4621C3[];
Class_Descriptor cd_S4621C3 = {  "S4621C3", // class name
  0,0,//no base classes
  &(vtc_S4621C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4621C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4621C3),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  S4621C2  : S4621C3 {
  virtual  ~S4621C2(); // _ZN7S4621C2D1Ev
  S4621C2(); // tgen
};
//SIG(-1 S4621C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4621C2()
{
  extern Class_Descriptor cd_S4621C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4621C2, buf);
    S4621C2 *dp, &lv = *(dp=new (buf) S4621C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4621C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4621C2)");
    check_base_class_offset(lv, (S4621C3*), 0, "S4621C2");
    test_class_info(&lv, &cd_S4621C2);
    dp->~S4621C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4621C2(Test_S4621C2, "S4621C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4621C2C1Ev();
extern void _ZN7S4621C2D1Ev();
Name_Map name_map_S4621C2[] = {
  NSPAIR(_ZN7S4621C2C1Ev),
  NSPAIR(_ZN7S4621C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4621C3;
extern VTBL_ENTRY _ZTI7S4621C3[];
extern  VTBL_ENTRY _ZTV7S4621C3[];
static Base_Class bases_S4621C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4621C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4621C2[];
extern void _ZN7S4621C2D1Ev();
extern void _ZN7S4621C2D0Ev();
extern void _ZN7S4621C32v2Ev();
static  VTBL_ENTRY vtc_S4621C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4621C2[0]),
  (VTBL_ENTRY)&_ZN7S4621C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4621C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4621C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4621C2[];
extern  VTBL_ENTRY _ZTV7S4621C2[];
Class_Descriptor cd_S4621C2 = {  "S4621C2", // class name
  bases_S4621C2, 1,
  &(vtc_S4621C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4621C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4621C2),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  S4621C1  : S4621C2 {
  int s4621c1f0[2];
  char s4621c1f1[2];
  virtual  ~S4621C1(); // _ZN7S4621C1D1Ev
  virtual void  v1(); // _ZN7S4621C12v1Ev
  S4621C1(); // tgen
};
//SIG(1 S4621C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fi[2] Fc[2]}


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

static void Test_S4621C1()
{
  extern Class_Descriptor cd_S4621C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4621C1, buf);
    S4621C1 *dp, &lv = *(dp=new (buf) S4621C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4621C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4621C1)");
    check_base_class_offset(lv, (S4621C3*)(S4621C2*), 0, "S4621C1");
    check_base_class_offset(lv, (S4621C2*), 0, "S4621C1");
    check_field_offset(lv, s4621c1f0, ABISELECT(8,4), "S4621C1.s4621c1f0");
    check_field_offset(lv, s4621c1f1, ABISELECT(16,12), "S4621C1.s4621c1f1");
    test_class_info(&lv, &cd_S4621C1);
    dp->~S4621C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4621C1(Test_S4621C1, "S4621C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4621C1C1Ev();
extern void _ZN7S4621C1D1Ev();
Name_Map name_map_S4621C1[] = {
  NSPAIR(_ZN7S4621C1C1Ev),
  NSPAIR(_ZN7S4621C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4621C3;
extern VTBL_ENTRY _ZTI7S4621C3[];
extern  VTBL_ENTRY _ZTV7S4621C3[];
extern Class_Descriptor cd_S4621C2;
extern VTBL_ENTRY _ZTI7S4621C2[];
extern  VTBL_ENTRY _ZTV7S4621C2[];
static Base_Class bases_S4621C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4621C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4621C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4621C1[];
extern void _ZN7S4621C1D1Ev();
extern void _ZN7S4621C1D0Ev();
extern void _ZN7S4621C32v2Ev();
extern void _ZN7S4621C12v1Ev();
static  VTBL_ENTRY vtc_S4621C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4621C1[0]),
  (VTBL_ENTRY)&_ZN7S4621C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4621C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4621C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4621C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4621C1[];
extern  VTBL_ENTRY _ZTV7S4621C1[];
Class_Descriptor cd_S4621C1 = {  "S4621C1", // class name
  bases_S4621C1, 2,
  &(vtc_S4621C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4621C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4621C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14189C1  {
  void *s14189c1f0;
  int s14189c1f1;
  ::S2011C29_nt s14189c1f2;
  __tsi64 s14189c1f3;
  int s14189c1f4[2];
};
//SIG(1 S14189C1) C1{ Fp Fi FC2{ Fp[3] Fc[60] Fi} FL Fi[2]}



static void Test_S14189C1()
{
  {
    init_simple_test("S14189C1");
    S14189C1 lv;
    check2(sizeof(lv), ABISELECT(120,100), "sizeof(S14189C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14189C1)");
    check_field_offset(lv, s14189c1f0, 0, "S14189C1.s14189c1f0");
    check_field_offset(lv, s14189c1f1, ABISELECT(8,4), "S14189C1.s14189c1f1");
    check_field_offset(lv, s14189c1f2, ABISELECT(16,8), "S14189C1.s14189c1f2");
    check_field_offset(lv, s14189c1f3, ABISELECT(104,84), "S14189C1.s14189c1f3");
    check_field_offset(lv, s14189c1f4, ABISELECT(112,92), "S14189C1.s14189c1f4");
  }
}
static Arrange_To_Call_Me vS14189C1(Test_S14189C1, "S14189C1", ABISELECT(120,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14188C1  {
  void *s14188c1f0;
  int s14188c1f1;
  ::S2011C29_nt s14188c1f2;
  long s14188c1f3;
  int s14188c1f4[2];
};
//SIG(1 S14188C1) C1{ Fp Fi FC2{ Fp[3] Fc[60] Fi} Fl Fi[2]}



static void Test_S14188C1()
{
  {
    init_simple_test("S14188C1");
    S14188C1 lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S14188C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14188C1)");
    check_field_offset(lv, s14188c1f0, 0, "S14188C1.s14188c1f0");
    check_field_offset(lv, s14188c1f1, ABISELECT(8,4), "S14188C1.s14188c1f1");
    check_field_offset(lv, s14188c1f2, ABISELECT(16,8), "S14188C1.s14188c1f2");
    check_field_offset(lv, s14188c1f3, ABISELECT(104,84), "S14188C1.s14188c1f3");
    check_field_offset(lv, s14188c1f4, ABISELECT(112,88), "S14188C1.s14188c1f4");
  }
}
static Arrange_To_Call_Me vS14188C1(Test_S14188C1, "S14188C1", ABISELECT(120,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1845C3  : S7368C18_nt {
  void *s1845c3f0;
  int s1845c3f1;
  char s1845c3f2;
  virtual  ~S1845C3(); // _ZN7S1845C3D1Ev
  S1845C3(); // tgen
};
//SIG(-1 S1845C3) C1{ BC2{ vd m Fp} vd Fp Fi Fc}


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

static void Test_S1845C3()
{
  extern Class_Descriptor cd_S1845C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1845C3, buf);
    S1845C3 *dp, &lv = *(dp=new (buf) S1845C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1845C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1845C3)");
    check_base_class_offset(lv, (S7368C18_nt*), 0, "S1845C3");
    check_field_offset(lv, s1845c3f0, ABISELECT(16,8), "S1845C3.s1845c3f0");
    check_field_offset(lv, s1845c3f1, ABISELECT(24,12), "S1845C3.s1845c3f1");
    check_field_offset(lv, s1845c3f2, ABISELECT(28,16), "S1845C3.s1845c3f2");
    test_class_info(&lv, &cd_S1845C3);
    dp->~S1845C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1845C3(Test_S1845C3, "S1845C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1845C3C1Ev();
extern void _ZN7S1845C3D1Ev();
Name_Map name_map_S1845C3[] = {
  NSPAIR(_ZN7S1845C3C1Ev),
  NSPAIR(_ZN7S1845C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
static Base_Class bases_S1845C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1845C3[];
extern void _ZN7S1845C3D1Ev();
extern void _ZN7S1845C3D0Ev();
static  VTBL_ENTRY vtc_S1845C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1845C3[0]),
  (VTBL_ENTRY)&_ZN7S1845C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1845C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1845C3[];
extern  VTBL_ENTRY _ZTV7S1845C3[];
Class_Descriptor cd_S1845C3 = {  "S1845C3", // class name
  bases_S1845C3, 1,
  &(vtc_S1845C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1845C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1845C3),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  S1845C2  : S1845C3 {
  ~S1845C2(); // tgen
  S1845C2(); // tgen
};
//SIG(-1 S1845C2) C1{ BC2{ BC3{ vd m Fp} vd Fp Fi Fc}}


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

static void Test_S1845C2()
{
  extern Class_Descriptor cd_S1845C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1845C2, buf);
    S1845C2 *dp, &lv = *(dp=new (buf) S1845C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1845C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1845C2)");
    check_base_class_offset(lv, (S7368C18_nt*)(S1845C3*), 0, "S1845C2");
    check_base_class_offset(lv, (S1845C3*), 0, "S1845C2");
    test_class_info(&lv, &cd_S1845C2);
    dp->~S1845C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1845C2(Test_S1845C2, "S1845C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1845C2C1Ev();
extern void _ZN7S1845C2D1Ev();
Name_Map name_map_S1845C2[] = {
  NSPAIR(_ZN7S1845C2C1Ev),
  NSPAIR(_ZN7S1845C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
extern Class_Descriptor cd_S1845C3;
extern VTBL_ENTRY _ZTI7S1845C3[];
extern  VTBL_ENTRY _ZTV7S1845C3[];
static Base_Class bases_S1845C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1845C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1845C2[];
extern void _ZN7S1845C2D1Ev();
extern void _ZN7S1845C2D0Ev();
static  VTBL_ENTRY vtc_S1845C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1845C2[0]),
  (VTBL_ENTRY)&_ZN7S1845C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1845C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1845C2[];
extern  VTBL_ENTRY _ZTV7S1845C2[];
Class_Descriptor cd_S1845C2 = {  "S1845C2", // class name
  bases_S1845C2, 2,
  &(vtc_S1845C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1845C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1845C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1845C1  : S1845C2 {
  ~S1845C1(); // tgen
  S1845C1(); // tgen
};
//SIG(1 S1845C1) C1{ BC2{ BC3{ BC4{ vd m Fp} vd Fp Fi Fc}}}


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

static void Test_S1845C1()
{
  extern Class_Descriptor cd_S1845C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1845C1, buf);
    S1845C1 *dp, &lv = *(dp=new (buf) S1845C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1845C1)");
    check_base_class_offset(lv, (S7368C18_nt*)(S1845C3*)(S1845C2*), 0, "S1845C1");
    check_base_class_offset(lv, (S1845C3*)(S1845C2*), 0, "S1845C1");
    check_base_class_offset(lv, (S1845C2*), 0, "S1845C1");
    test_class_info(&lv, &cd_S1845C1);
    dp->~S1845C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1845C1(Test_S1845C1, "S1845C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1845C1C1Ev();
extern void _ZN7S1845C1D1Ev();
Name_Map name_map_S1845C1[] = {
  NSPAIR(_ZN7S1845C1C1Ev),
  NSPAIR(_ZN7S1845C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7368C18_nt;
extern VTBL_ENTRY _ZTI11S7368C18_nt[];
extern  VTBL_ENTRY _ZTV11S7368C18_nt[];
extern Class_Descriptor cd_S1845C3;
extern VTBL_ENTRY _ZTI7S1845C3[];
extern  VTBL_ENTRY _ZTV7S1845C3[];
extern Class_Descriptor cd_S1845C2;
extern VTBL_ENTRY _ZTI7S1845C2[];
extern  VTBL_ENTRY _ZTV7S1845C2[];
static Base_Class bases_S1845C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7368C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1845C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1845C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1845C1[];
extern void _ZN7S1845C1D1Ev();
extern void _ZN7S1845C1D0Ev();
static  VTBL_ENTRY vtc_S1845C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1845C1[0]),
  (VTBL_ENTRY)&_ZN7S1845C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1845C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1845C1[];
extern  VTBL_ENTRY _ZTV7S1845C1[];
Class_Descriptor cd_S1845C1 = {  "S1845C1", // class name
  bases_S1845C1, 3,
  &(vtc_S1845C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1845C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1845C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4631C3  {
  virtual  ~S4631C3(); // _ZN7S4631C3D1Ev
  virtual void  v2(); // _ZN7S4631C32v2Ev
  S4631C3(); // tgen
};
//SIG(-1 S4631C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4631C3C1Ev();
extern void _ZN7S4631C3D1Ev();
Name_Map name_map_S4631C3[] = {
  NSPAIR(_ZN7S4631C3C1Ev),
  NSPAIR(_ZN7S4631C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4631C3[];
extern void _ZN7S4631C3D1Ev();
extern void _ZN7S4631C3D0Ev();
extern void _ZN7S4631C32v2Ev();
static  VTBL_ENTRY vtc_S4631C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4631C3[0]),
  (VTBL_ENTRY)&_ZN7S4631C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4631C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4631C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4631C3[];
extern  VTBL_ENTRY _ZTV7S4631C3[];
Class_Descriptor cd_S4631C3 = {  "S4631C3", // class name
  0,0,//no base classes
  &(vtc_S4631C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4631C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4631C3),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  S4631C2  : S4631C3 {
  virtual  ~S4631C2(); // _ZN7S4631C2D1Ev
  S4631C2(); // tgen
};
//SIG(-1 S4631C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4631C2()
{
  extern Class_Descriptor cd_S4631C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4631C2, buf);
    S4631C2 *dp, &lv = *(dp=new (buf) S4631C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4631C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4631C2)");
    check_base_class_offset(lv, (S4631C3*), 0, "S4631C2");
    test_class_info(&lv, &cd_S4631C2);
    dp->~S4631C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4631C2(Test_S4631C2, "S4631C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4631C2C1Ev();
extern void _ZN7S4631C2D1Ev();
Name_Map name_map_S4631C2[] = {
  NSPAIR(_ZN7S4631C2C1Ev),
  NSPAIR(_ZN7S4631C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4631C3;
extern VTBL_ENTRY _ZTI7S4631C3[];
extern  VTBL_ENTRY _ZTV7S4631C3[];
static Base_Class bases_S4631C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4631C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4631C2[];
extern void _ZN7S4631C2D1Ev();
extern void _ZN7S4631C2D0Ev();
extern void _ZN7S4631C32v2Ev();
static  VTBL_ENTRY vtc_S4631C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4631C2[0]),
  (VTBL_ENTRY)&_ZN7S4631C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4631C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4631C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4631C2[];
extern  VTBL_ENTRY _ZTV7S4631C2[];
Class_Descriptor cd_S4631C2 = {  "S4631C2", // class name
  bases_S4631C2, 1,
  &(vtc_S4631C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4631C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4631C2),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  S4631C1  : S4631C2 {
  void *s4631c1f0;
  ::S7179C3_nt s4631c1f1;
  void *s4631c1f2;
  virtual  ~S4631C1(); // _ZN7S4631C1D1Ev
  virtual void  v1(); // _ZN7S4631C12v1Ev
  S4631C1(); // tgen
};
//SIG(1 S4631C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp FC4{} Fp}


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

static void Test_S4631C1()
{
  extern Class_Descriptor cd_S4631C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4631C1, buf);
    S4631C1 *dp, &lv = *(dp=new (buf) S4631C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4631C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4631C1)");
    check_base_class_offset(lv, (S4631C3*)(S4631C2*), 0, "S4631C1");
    check_base_class_offset(lv, (S4631C2*), 0, "S4631C1");
    check_field_offset(lv, s4631c1f0, ABISELECT(8,4), "S4631C1.s4631c1f0");
    check_field_offset(lv, s4631c1f1, ABISELECT(16,8), "S4631C1.s4631c1f1");
    check_field_offset(lv, s4631c1f2, ABISELECT(24,12), "S4631C1.s4631c1f2");
    test_class_info(&lv, &cd_S4631C1);
    dp->~S4631C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4631C1(Test_S4631C1, "S4631C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4631C1C1Ev();
extern void _ZN7S4631C1D1Ev();
Name_Map name_map_S4631C1[] = {
  NSPAIR(_ZN7S4631C1C1Ev),
  NSPAIR(_ZN7S4631C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4631C3;
extern VTBL_ENTRY _ZTI7S4631C3[];
extern  VTBL_ENTRY _ZTV7S4631C3[];
extern Class_Descriptor cd_S4631C2;
extern VTBL_ENTRY _ZTI7S4631C2[];
extern  VTBL_ENTRY _ZTV7S4631C2[];
static Base_Class bases_S4631C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4631C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4631C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4631C1[];
extern void _ZN7S4631C1D1Ev();
extern void _ZN7S4631C1D0Ev();
extern void _ZN7S4631C32v2Ev();
extern void _ZN7S4631C12v1Ev();
static  VTBL_ENTRY vtc_S4631C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4631C1[0]),
  (VTBL_ENTRY)&_ZN7S4631C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4631C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4631C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4631C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4631C1[];
extern  VTBL_ENTRY _ZTV7S4631C1[];
Class_Descriptor cd_S4631C1 = {  "S4631C1", // class name
  bases_S4631C1, 2,
  &(vtc_S4631C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4631C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4631C1),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  S16675C1  {
  int s16675c1f0;
  ::S2152C10_nt s16675c1f1;
  ::S2152C11_nt s16675c1f2;
  void  mf16675c1(); // _ZN8S16675C19mf16675c1Ev
};
//SIG(1 S16675C1) C1{ m Fi FC2{ FL[3] Fi[4] FC3{ FL}} FC3}


void  S16675C1 ::mf16675c1(){}

static void Test_S16675C1()
{
  {
    init_simple_test("S16675C1");
    S16675C1 lv;
    check2(sizeof(lv), ABISELECT(64,60), "sizeof(S16675C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16675C1)");
    check_field_offset(lv, s16675c1f0, 0, "S16675C1.s16675c1f0");
    check_field_offset(lv, s16675c1f1, ABISELECT(8,4), "S16675C1.s16675c1f1");
    check_field_offset(lv, s16675c1f2, ABISELECT(56,52), "S16675C1.s16675c1f2");
  }
}
static Arrange_To_Call_Me vS16675C1(Test_S16675C1, "S16675C1", ABISELECT(64,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16674C1  {
  int s16674c1f0;
  ::S2151C10_nt s16674c1f1;
  ::S2151C11_nt s16674c1f2;
  void  mf16674c1(); // _ZN8S16674C19mf16674c1Ev
};
//SIG(1 S16674C1) C1{ m Fi FC2{ FL[3] Fi[4] FC3{ Fl}} FC3}


void  S16674C1 ::mf16674c1(){}

static void Test_S16674C1()
{
  {
    init_simple_test("S16674C1");
    S16674C1 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S16674C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16674C1)");
    check_field_offset(lv, s16674c1f0, 0, "S16674C1.s16674c1f0");
    check_field_offset(lv, s16674c1f1, ABISELECT(8,4), "S16674C1.s16674c1f1");
    check_field_offset(lv, s16674c1f2, ABISELECT(56,48), "S16674C1.s16674c1f2");
  }
}
static Arrange_To_Call_Me vS16674C1(Test_S16674C1, "S16674C1", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17904C1  {
  void *s17904c1f0[2];
  ::S4469C9 s17904c1f1;
  void  mf17904c1(); // _ZN8S17904C19mf17904c1Ev
};
//SIG(1 S17904C1) C1{ m Fp[2] FC2{ FC3{ m Fp Fi FC4{ m}}}}


void  S17904C1 ::mf17904c1(){}

static void Test_S17904C1()
{
  {
    init_simple_test("S17904C1");
    S17904C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17904C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17904C1)");
    check_field_offset(lv, s17904c1f0, 0, "S17904C1.s17904c1f0");
    check_field_offset(lv, s17904c1f1, ABISELECT(16,8), "S17904C1.s17904c1f1");
  }
}
static Arrange_To_Call_Me vS17904C1(Test_S17904C1, "S17904C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4627C3  {
  virtual  ~S4627C3(); // _ZN7S4627C3D1Ev
  virtual void  v2(); // _ZN7S4627C32v2Ev
  S4627C3(); // tgen
};
//SIG(-1 S4627C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4627C3C1Ev();
extern void _ZN7S4627C3D1Ev();
Name_Map name_map_S4627C3[] = {
  NSPAIR(_ZN7S4627C3C1Ev),
  NSPAIR(_ZN7S4627C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4627C3[];
extern void _ZN7S4627C3D1Ev();
extern void _ZN7S4627C3D0Ev();
extern void _ZN7S4627C32v2Ev();
static  VTBL_ENTRY vtc_S4627C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4627C3[0]),
  (VTBL_ENTRY)&_ZN7S4627C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4627C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4627C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4627C3[];
extern  VTBL_ENTRY _ZTV7S4627C3[];
Class_Descriptor cd_S4627C3 = {  "S4627C3", // class name
  0,0,//no base classes
  &(vtc_S4627C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4627C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4627C3),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  S4627C2  : S4627C3 {
  virtual  ~S4627C2(); // _ZN7S4627C2D1Ev
  S4627C2(); // tgen
};
//SIG(-1 S4627C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4627C2()
{
  extern Class_Descriptor cd_S4627C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4627C2, buf);
    S4627C2 *dp, &lv = *(dp=new (buf) S4627C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4627C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4627C2)");
    check_base_class_offset(lv, (S4627C3*), 0, "S4627C2");
    test_class_info(&lv, &cd_S4627C2);
    dp->~S4627C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4627C2(Test_S4627C2, "S4627C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4627C2C1Ev();
extern void _ZN7S4627C2D1Ev();
Name_Map name_map_S4627C2[] = {
  NSPAIR(_ZN7S4627C2C1Ev),
  NSPAIR(_ZN7S4627C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4627C3;
extern VTBL_ENTRY _ZTI7S4627C3[];
extern  VTBL_ENTRY _ZTV7S4627C3[];
static Base_Class bases_S4627C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4627C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4627C2[];
extern void _ZN7S4627C2D1Ev();
extern void _ZN7S4627C2D0Ev();
extern void _ZN7S4627C32v2Ev();
static  VTBL_ENTRY vtc_S4627C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4627C2[0]),
  (VTBL_ENTRY)&_ZN7S4627C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4627C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4627C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4627C2[];
extern  VTBL_ENTRY _ZTV7S4627C2[];
Class_Descriptor cd_S4627C2 = {  "S4627C2", // class name
  bases_S4627C2, 1,
  &(vtc_S4627C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4627C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4627C2),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  S4627C1  : S4627C2 {
  void *s4627c1f0;
  char s4627c1f1[2];
  virtual  ~S4627C1(); // _ZN7S4627C1D1Ev
  virtual void  v1(); // _ZN7S4627C12v1Ev
  S4627C1(); // tgen
};
//SIG(1 S4627C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp Fc[2]}


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

static void Test_S4627C1()
{
  extern Class_Descriptor cd_S4627C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4627C1, buf);
    S4627C1 *dp, &lv = *(dp=new (buf) S4627C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4627C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4627C1)");
    check_base_class_offset(lv, (S4627C3*)(S4627C2*), 0, "S4627C1");
    check_base_class_offset(lv, (S4627C2*), 0, "S4627C1");
    check_field_offset(lv, s4627c1f0, ABISELECT(8,4), "S4627C1.s4627c1f0");
    check_field_offset(lv, s4627c1f1, ABISELECT(16,8), "S4627C1.s4627c1f1");
    test_class_info(&lv, &cd_S4627C1);
    dp->~S4627C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4627C1(Test_S4627C1, "S4627C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4627C1C1Ev();
extern void _ZN7S4627C1D1Ev();
Name_Map name_map_S4627C1[] = {
  NSPAIR(_ZN7S4627C1C1Ev),
  NSPAIR(_ZN7S4627C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4627C3;
extern VTBL_ENTRY _ZTI7S4627C3[];
extern  VTBL_ENTRY _ZTV7S4627C3[];
extern Class_Descriptor cd_S4627C2;
extern VTBL_ENTRY _ZTI7S4627C2[];
extern  VTBL_ENTRY _ZTV7S4627C2[];
static Base_Class bases_S4627C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4627C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4627C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4627C1[];
extern void _ZN7S4627C1D1Ev();
extern void _ZN7S4627C1D0Ev();
extern void _ZN7S4627C32v2Ev();
extern void _ZN7S4627C12v1Ev();
static  VTBL_ENTRY vtc_S4627C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4627C1[0]),
  (VTBL_ENTRY)&_ZN7S4627C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4627C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4627C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4627C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4627C1[];
extern  VTBL_ENTRY _ZTV7S4627C1[];
Class_Descriptor cd_S4627C1 = {  "S4627C1", // class name
  bases_S4627C1, 2,
  &(vtc_S4627C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4627C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4627C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12526C1  {
  int s12526c1f0;
  ::S2011C29_nt s12526c1f1;
  char s12526c1f2[288];
};
//SIG(1 S12526C1) C1{ Fi FC2{ Fp[3] Fc[60] Fi} Fc[288]}



static void Test_S12526C1()
{
  {
    init_simple_test("S12526C1");
    S12526C1 lv;
    check2(sizeof(lv), ABISELECT(384,368), "sizeof(S12526C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12526C1)");
    check_field_offset(lv, s12526c1f0, 0, "S12526C1.s12526c1f0");
    check_field_offset(lv, s12526c1f1, ABISELECT(8,4), "S12526C1.s12526c1f1");
    check_field_offset(lv, s12526c1f2, ABISELECT(96,80), "S12526C1.s12526c1f2");
  }
}
static Arrange_To_Call_Me vS12526C1(Test_S12526C1, "S12526C1", ABISELECT(384,368));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2129C4  {
  virtual  ~S2129C4(); // _ZN7S2129C4D1Ev
  virtual void  v2(); // _ZN7S2129C42v2Ev
  S2129C4(); // tgen
};
//SIG(-1 S2129C4) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S2129C4C1Ev();
extern void _ZN7S2129C4D1Ev();
Name_Map name_map_S2129C4[] = {
  NSPAIR(_ZN7S2129C4C1Ev),
  NSPAIR(_ZN7S2129C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2129C4[];
extern void _ZN7S2129C4D1Ev();
extern void _ZN7S2129C4D0Ev();
extern void _ZN7S2129C42v2Ev();
static  VTBL_ENTRY vtc_S2129C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2129C4[0]),
  (VTBL_ENTRY)&_ZN7S2129C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2129C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2129C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S2129C4[];
extern  VTBL_ENTRY _ZTV7S2129C4[];
Class_Descriptor cd_S2129C4 = {  "S2129C4", // class name
  0,0,//no base classes
  &(vtc_S2129C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2129C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2129C4),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  S2129C3  : S2129C4 {
  virtual  ~S2129C3(); // _ZN7S2129C3D1Ev
  S2129C3(); // tgen
};
//SIG(-1 S2129C3) C1{ BC2{ vd v1} vd}


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

static void Test_S2129C3()
{
  extern Class_Descriptor cd_S2129C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2129C3, buf);
    S2129C3 *dp, &lv = *(dp=new (buf) S2129C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2129C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2129C3)");
    check_base_class_offset(lv, (S2129C4*), 0, "S2129C3");
    test_class_info(&lv, &cd_S2129C3);
    dp->~S2129C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2129C3(Test_S2129C3, "S2129C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2129C3C1Ev();
extern void _ZN7S2129C3D1Ev();
Name_Map name_map_S2129C3[] = {
  NSPAIR(_ZN7S2129C3C1Ev),
  NSPAIR(_ZN7S2129C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2129C4;
extern VTBL_ENTRY _ZTI7S2129C4[];
extern  VTBL_ENTRY _ZTV7S2129C4[];
static Base_Class bases_S2129C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2129C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2129C3[];
extern void _ZN7S2129C3D1Ev();
extern void _ZN7S2129C3D0Ev();
extern void _ZN7S2129C42v2Ev();
static  VTBL_ENTRY vtc_S2129C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2129C3[0]),
  (VTBL_ENTRY)&_ZN7S2129C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2129C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2129C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S2129C3[];
extern  VTBL_ENTRY _ZTV7S2129C3[];
Class_Descriptor cd_S2129C3 = {  "S2129C3", // class name
  bases_S2129C3, 1,
  &(vtc_S2129C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2129C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2129C3),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  S2129C2  : S2129C3 {
  void *s2129c2f0;
  virtual void  v3(); // _ZN7S2129C22v3Ev
  ~S2129C2(); // tgen
  S2129C2(); // tgen
};
//SIG(-1 S2129C2) C1{ BC2{ BC3{ vd v2} vd} v1 Fp}


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

static void Test_S2129C2()
{
  extern Class_Descriptor cd_S2129C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2129C2, buf);
    S2129C2 *dp, &lv = *(dp=new (buf) S2129C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2129C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2129C2)");
    check_base_class_offset(lv, (S2129C4*)(S2129C3*), 0, "S2129C2");
    check_base_class_offset(lv, (S2129C3*), 0, "S2129C2");
    check_field_offset(lv, s2129c2f0, ABISELECT(8,4), "S2129C2.s2129c2f0");
    test_class_info(&lv, &cd_S2129C2);
    dp->~S2129C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2129C2(Test_S2129C2, "S2129C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2129C2C1Ev();
extern void _ZN7S2129C2D1Ev();
Name_Map name_map_S2129C2[] = {
  NSPAIR(_ZN7S2129C2C1Ev),
  NSPAIR(_ZN7S2129C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2129C4;
extern VTBL_ENTRY _ZTI7S2129C4[];
extern  VTBL_ENTRY _ZTV7S2129C4[];
extern Class_Descriptor cd_S2129C3;
extern VTBL_ENTRY _ZTI7S2129C3[];
extern  VTBL_ENTRY _ZTV7S2129C3[];
static Base_Class bases_S2129C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2129C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2129C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2129C2[];
extern void _ZN7S2129C2D1Ev();
extern void _ZN7S2129C2D0Ev();
extern void _ZN7S2129C42v2Ev();
extern void _ZN7S2129C22v3Ev();
static  VTBL_ENTRY vtc_S2129C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2129C2[0]),
  (VTBL_ENTRY)&_ZN7S2129C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2129C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2129C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2129C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S2129C2[];
extern  VTBL_ENTRY _ZTV7S2129C2[];
Class_Descriptor cd_S2129C2 = {  "S2129C2", // class name
  bases_S2129C2, 2,
  &(vtc_S2129C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2129C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2129C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2129C1  : S2129C2 {
  virtual void  v1(); // _ZN7S2129C12v1Ev
  ~S2129C1(); // tgen
  S2129C1(); // tgen
};
//SIG(1 S2129C1) C1{ BC2{ BC3{ BC4{ vd v2} vd} v3 Fp} v1}


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

static void Test_S2129C1()
{
  extern Class_Descriptor cd_S2129C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2129C1, buf);
    S2129C1 *dp, &lv = *(dp=new (buf) S2129C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2129C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2129C1)");
    check_base_class_offset(lv, (S2129C4*)(S2129C3*)(S2129C2*), 0, "S2129C1");
    check_base_class_offset(lv, (S2129C3*)(S2129C2*), 0, "S2129C1");
    check_base_class_offset(lv, (S2129C2*), 0, "S2129C1");
    test_class_info(&lv, &cd_S2129C1);
    dp->~S2129C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2129C1(Test_S2129C1, "S2129C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2129C1C1Ev();
extern void _ZN7S2129C1D1Ev();
Name_Map name_map_S2129C1[] = {
  NSPAIR(_ZN7S2129C1C1Ev),
  NSPAIR(_ZN7S2129C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2129C4;
extern VTBL_ENTRY _ZTI7S2129C4[];
extern  VTBL_ENTRY _ZTV7S2129C4[];
extern Class_Descriptor cd_S2129C3;
extern VTBL_ENTRY _ZTI7S2129C3[];
extern  VTBL_ENTRY _ZTV7S2129C3[];
extern Class_Descriptor cd_S2129C2;
extern VTBL_ENTRY _ZTI7S2129C2[];
extern  VTBL_ENTRY _ZTV7S2129C2[];
static Base_Class bases_S2129C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2129C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2129C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2129C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2129C1[];
extern void _ZN7S2129C1D1Ev();
extern void _ZN7S2129C1D0Ev();
extern void _ZN7S2129C42v2Ev();
extern void _ZN7S2129C22v3Ev();
extern void _ZN7S2129C12v1Ev();
static  VTBL_ENTRY vtc_S2129C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2129C1[0]),
  (VTBL_ENTRY)&_ZN7S2129C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2129C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2129C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2129C22v3Ev,
  (VTBL_ENTRY)&_ZN7S2129C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2129C1[];
extern  VTBL_ENTRY _ZTV7S2129C1[];
Class_Descriptor cd_S2129C1 = {  "S2129C1", // class name
  bases_S2129C1, 3,
  &(vtc_S2129C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2129C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2129C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4634C3  {
  virtual  ~S4634C3(); // _ZN7S4634C3D1Ev
  virtual void  v2(); // _ZN7S4634C32v2Ev
  S4634C3(); // tgen
};
//SIG(-1 S4634C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4634C3C1Ev();
extern void _ZN7S4634C3D1Ev();
Name_Map name_map_S4634C3[] = {
  NSPAIR(_ZN7S4634C3C1Ev),
  NSPAIR(_ZN7S4634C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4634C3[];
extern void _ZN7S4634C3D1Ev();
extern void _ZN7S4634C3D0Ev();
extern void _ZN7S4634C32v2Ev();
static  VTBL_ENTRY vtc_S4634C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4634C3[0]),
  (VTBL_ENTRY)&_ZN7S4634C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4634C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4634C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4634C3[];
extern  VTBL_ENTRY _ZTV7S4634C3[];
Class_Descriptor cd_S4634C3 = {  "S4634C3", // class name
  0,0,//no base classes
  &(vtc_S4634C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4634C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4634C3),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  S4634C2  : S4634C3 {
  virtual  ~S4634C2(); // _ZN7S4634C2D1Ev
  S4634C2(); // tgen
};
//SIG(-1 S4634C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4634C2()
{
  extern Class_Descriptor cd_S4634C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4634C2, buf);
    S4634C2 *dp, &lv = *(dp=new (buf) S4634C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4634C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4634C2)");
    check_base_class_offset(lv, (S4634C3*), 0, "S4634C2");
    test_class_info(&lv, &cd_S4634C2);
    dp->~S4634C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4634C2(Test_S4634C2, "S4634C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4634C2C1Ev();
extern void _ZN7S4634C2D1Ev();
Name_Map name_map_S4634C2[] = {
  NSPAIR(_ZN7S4634C2C1Ev),
  NSPAIR(_ZN7S4634C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4634C3;
extern VTBL_ENTRY _ZTI7S4634C3[];
extern  VTBL_ENTRY _ZTV7S4634C3[];
static Base_Class bases_S4634C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4634C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4634C2[];
extern void _ZN7S4634C2D1Ev();
extern void _ZN7S4634C2D0Ev();
extern void _ZN7S4634C32v2Ev();
static  VTBL_ENTRY vtc_S4634C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4634C2[0]),
  (VTBL_ENTRY)&_ZN7S4634C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4634C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4634C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4634C2[];
extern  VTBL_ENTRY _ZTV7S4634C2[];
Class_Descriptor cd_S4634C2 = {  "S4634C2", // class name
  bases_S4634C2, 1,
  &(vtc_S4634C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4634C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4634C2),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  S4634C1  : S4634C2 {
  void *s4634c1f0;
  int s4634c1f1;
  virtual  ~S4634C1(); // _ZN7S4634C1D1Ev
  virtual void  v1(); // _ZN7S4634C12v1Ev
  S4634C1(); // tgen
};
//SIG(1 S4634C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp Fi}


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

static void Test_S4634C1()
{
  extern Class_Descriptor cd_S4634C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4634C1, buf);
    S4634C1 *dp, &lv = *(dp=new (buf) S4634C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4634C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4634C1)");
    check_base_class_offset(lv, (S4634C3*)(S4634C2*), 0, "S4634C1");
    check_base_class_offset(lv, (S4634C2*), 0, "S4634C1");
    check_field_offset(lv, s4634c1f0, ABISELECT(8,4), "S4634C1.s4634c1f0");
    check_field_offset(lv, s4634c1f1, ABISELECT(16,8), "S4634C1.s4634c1f1");
    test_class_info(&lv, &cd_S4634C1);
    dp->~S4634C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4634C1(Test_S4634C1, "S4634C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4634C1C1Ev();
extern void _ZN7S4634C1D1Ev();
Name_Map name_map_S4634C1[] = {
  NSPAIR(_ZN7S4634C1C1Ev),
  NSPAIR(_ZN7S4634C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4634C3;
extern VTBL_ENTRY _ZTI7S4634C3[];
extern  VTBL_ENTRY _ZTV7S4634C3[];
extern Class_Descriptor cd_S4634C2;
extern VTBL_ENTRY _ZTI7S4634C2[];
extern  VTBL_ENTRY _ZTV7S4634C2[];
static Base_Class bases_S4634C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4634C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4634C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4634C1[];
extern void _ZN7S4634C1D1Ev();
extern void _ZN7S4634C1D0Ev();
extern void _ZN7S4634C32v2Ev();
extern void _ZN7S4634C12v1Ev();
static  VTBL_ENTRY vtc_S4634C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4634C1[0]),
  (VTBL_ENTRY)&_ZN7S4634C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4634C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4634C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4634C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4634C1[];
extern  VTBL_ENTRY _ZTV7S4634C1[];
Class_Descriptor cd_S4634C1 = {  "S4634C1", // class name
  bases_S4634C1, 2,
  &(vtc_S4634C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4634C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4634C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4629C3  {
  virtual  ~S4629C3(); // _ZN7S4629C3D1Ev
  virtual void  v2(); // _ZN7S4629C32v2Ev
  S4629C3(); // tgen
};
//SIG(-1 S4629C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4629C3C1Ev();
extern void _ZN7S4629C3D1Ev();
Name_Map name_map_S4629C3[] = {
  NSPAIR(_ZN7S4629C3C1Ev),
  NSPAIR(_ZN7S4629C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4629C3[];
extern void _ZN7S4629C3D1Ev();
extern void _ZN7S4629C3D0Ev();
extern void _ZN7S4629C32v2Ev();
static  VTBL_ENTRY vtc_S4629C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4629C3[0]),
  (VTBL_ENTRY)&_ZN7S4629C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4629C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4629C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4629C3[];
extern  VTBL_ENTRY _ZTV7S4629C3[];
Class_Descriptor cd_S4629C3 = {  "S4629C3", // class name
  0,0,//no base classes
  &(vtc_S4629C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4629C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4629C3),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  S4629C2  : S4629C3 {
  virtual  ~S4629C2(); // _ZN7S4629C2D1Ev
  S4629C2(); // tgen
};
//SIG(-1 S4629C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4629C2()
{
  extern Class_Descriptor cd_S4629C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4629C2, buf);
    S4629C2 *dp, &lv = *(dp=new (buf) S4629C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4629C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4629C2)");
    check_base_class_offset(lv, (S4629C3*), 0, "S4629C2");
    test_class_info(&lv, &cd_S4629C2);
    dp->~S4629C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4629C2(Test_S4629C2, "S4629C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4629C2C1Ev();
extern void _ZN7S4629C2D1Ev();
Name_Map name_map_S4629C2[] = {
  NSPAIR(_ZN7S4629C2C1Ev),
  NSPAIR(_ZN7S4629C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4629C3;
extern VTBL_ENTRY _ZTI7S4629C3[];
extern  VTBL_ENTRY _ZTV7S4629C3[];
static Base_Class bases_S4629C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4629C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4629C2[];
extern void _ZN7S4629C2D1Ev();
extern void _ZN7S4629C2D0Ev();
extern void _ZN7S4629C32v2Ev();
static  VTBL_ENTRY vtc_S4629C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4629C2[0]),
  (VTBL_ENTRY)&_ZN7S4629C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4629C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4629C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4629C2[];
extern  VTBL_ENTRY _ZTV7S4629C2[];
Class_Descriptor cd_S4629C2 = {  "S4629C2", // class name
  bases_S4629C2, 1,
  &(vtc_S4629C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4629C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4629C2),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  S4629C1  : S4629C2 {
  void *s4629c1f0;
  char s4629c1f1;
  virtual  ~S4629C1(); // _ZN7S4629C1D1Ev
  virtual void  v1(); // _ZN7S4629C12v1Ev
  S4629C1(); // tgen
};
//SIG(1 S4629C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp Fc}


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

static void Test_S4629C1()
{
  extern Class_Descriptor cd_S4629C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4629C1, buf);
    S4629C1 *dp, &lv = *(dp=new (buf) S4629C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4629C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4629C1)");
    check_base_class_offset(lv, (S4629C3*)(S4629C2*), 0, "S4629C1");
    check_base_class_offset(lv, (S4629C2*), 0, "S4629C1");
    check_field_offset(lv, s4629c1f0, ABISELECT(8,4), "S4629C1.s4629c1f0");
    check_field_offset(lv, s4629c1f1, ABISELECT(16,8), "S4629C1.s4629c1f1");
    test_class_info(&lv, &cd_S4629C1);
    dp->~S4629C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4629C1(Test_S4629C1, "S4629C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4629C1C1Ev();
extern void _ZN7S4629C1D1Ev();
Name_Map name_map_S4629C1[] = {
  NSPAIR(_ZN7S4629C1C1Ev),
  NSPAIR(_ZN7S4629C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4629C3;
extern VTBL_ENTRY _ZTI7S4629C3[];
extern  VTBL_ENTRY _ZTV7S4629C3[];
extern Class_Descriptor cd_S4629C2;
extern VTBL_ENTRY _ZTI7S4629C2[];
extern  VTBL_ENTRY _ZTV7S4629C2[];
static Base_Class bases_S4629C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4629C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4629C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4629C1[];
extern void _ZN7S4629C1D1Ev();
extern void _ZN7S4629C1D0Ev();
extern void _ZN7S4629C32v2Ev();
extern void _ZN7S4629C12v1Ev();
static  VTBL_ENTRY vtc_S4629C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4629C1[0]),
  (VTBL_ENTRY)&_ZN7S4629C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4629C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4629C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4629C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4629C1[];
extern  VTBL_ENTRY _ZTV7S4629C1[];
Class_Descriptor cd_S4629C1 = {  "S4629C1", // class name
  bases_S4629C1, 2,
  &(vtc_S4629C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4629C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4629C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4640C3  {
  virtual  ~S4640C3(); // _ZN7S4640C3D1Ev
  virtual void  v2(); // _ZN7S4640C32v2Ev
  S4640C3(); // tgen
};
//SIG(-1 S4640C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4640C3C1Ev();
extern void _ZN7S4640C3D1Ev();
Name_Map name_map_S4640C3[] = {
  NSPAIR(_ZN7S4640C3C1Ev),
  NSPAIR(_ZN7S4640C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4640C3[];
extern void _ZN7S4640C3D1Ev();
extern void _ZN7S4640C3D0Ev();
extern void _ZN7S4640C32v2Ev();
static  VTBL_ENTRY vtc_S4640C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4640C3[0]),
  (VTBL_ENTRY)&_ZN7S4640C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4640C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4640C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4640C3[];
extern  VTBL_ENTRY _ZTV7S4640C3[];
Class_Descriptor cd_S4640C3 = {  "S4640C3", // class name
  0,0,//no base classes
  &(vtc_S4640C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4640C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4640C3),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  S4640C2  : S4640C3 {
  virtual  ~S4640C2(); // _ZN7S4640C2D1Ev
  S4640C2(); // tgen
};
//SIG(-1 S4640C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4640C2()
{
  extern Class_Descriptor cd_S4640C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4640C2, buf);
    S4640C2 *dp, &lv = *(dp=new (buf) S4640C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4640C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4640C2)");
    check_base_class_offset(lv, (S4640C3*), 0, "S4640C2");
    test_class_info(&lv, &cd_S4640C2);
    dp->~S4640C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4640C2(Test_S4640C2, "S4640C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4640C2C1Ev();
extern void _ZN7S4640C2D1Ev();
Name_Map name_map_S4640C2[] = {
  NSPAIR(_ZN7S4640C2C1Ev),
  NSPAIR(_ZN7S4640C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4640C3;
extern VTBL_ENTRY _ZTI7S4640C3[];
extern  VTBL_ENTRY _ZTV7S4640C3[];
static Base_Class bases_S4640C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4640C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4640C2[];
extern void _ZN7S4640C2D1Ev();
extern void _ZN7S4640C2D0Ev();
extern void _ZN7S4640C32v2Ev();
static  VTBL_ENTRY vtc_S4640C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4640C2[0]),
  (VTBL_ENTRY)&_ZN7S4640C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4640C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4640C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4640C2[];
extern  VTBL_ENTRY _ZTV7S4640C2[];
Class_Descriptor cd_S4640C2 = {  "S4640C2", // class name
  bases_S4640C2, 1,
  &(vtc_S4640C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4640C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4640C2),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  S4640C1  : S4640C2 {
  void *s4640c1f0[2];
  virtual  ~S4640C1(); // _ZN7S4640C1D1Ev
  virtual void  v1(); // _ZN7S4640C12v1Ev
  S4640C1(); // tgen
};
//SIG(1 S4640C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp[2]}


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

static void Test_S4640C1()
{
  extern Class_Descriptor cd_S4640C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4640C1, buf);
    S4640C1 *dp, &lv = *(dp=new (buf) S4640C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4640C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4640C1)");
    check_base_class_offset(lv, (S4640C3*)(S4640C2*), 0, "S4640C1");
    check_base_class_offset(lv, (S4640C2*), 0, "S4640C1");
    check_field_offset(lv, s4640c1f0, ABISELECT(8,4), "S4640C1.s4640c1f0");
    test_class_info(&lv, &cd_S4640C1);
    dp->~S4640C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4640C1(Test_S4640C1, "S4640C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4640C1C1Ev();
extern void _ZN7S4640C1D1Ev();
Name_Map name_map_S4640C1[] = {
  NSPAIR(_ZN7S4640C1C1Ev),
  NSPAIR(_ZN7S4640C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4640C3;
extern VTBL_ENTRY _ZTI7S4640C3[];
extern  VTBL_ENTRY _ZTV7S4640C3[];
extern Class_Descriptor cd_S4640C2;
extern VTBL_ENTRY _ZTI7S4640C2[];
extern  VTBL_ENTRY _ZTV7S4640C2[];
static Base_Class bases_S4640C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4640C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4640C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4640C1[];
extern void _ZN7S4640C1D1Ev();
extern void _ZN7S4640C1D0Ev();
extern void _ZN7S4640C32v2Ev();
extern void _ZN7S4640C12v1Ev();
static  VTBL_ENTRY vtc_S4640C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4640C1[0]),
  (VTBL_ENTRY)&_ZN7S4640C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4640C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4640C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4640C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4640C1[];
extern  VTBL_ENTRY _ZTV7S4640C1[];
Class_Descriptor cd_S4640C1 = {  "S4640C1", // class name
  bases_S4640C1, 2,
  &(vtc_S4640C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4640C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4640C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4642C3  {
  virtual  ~S4642C3(); // _ZN7S4642C3D1Ev
  virtual void  v2(); // _ZN7S4642C32v2Ev
  S4642C3(); // tgen
};
//SIG(-1 S4642C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4642C3C1Ev();
extern void _ZN7S4642C3D1Ev();
Name_Map name_map_S4642C3[] = {
  NSPAIR(_ZN7S4642C3C1Ev),
  NSPAIR(_ZN7S4642C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4642C3[];
extern void _ZN7S4642C3D1Ev();
extern void _ZN7S4642C3D0Ev();
extern void _ZN7S4642C32v2Ev();
static  VTBL_ENTRY vtc_S4642C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4642C3[0]),
  (VTBL_ENTRY)&_ZN7S4642C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4642C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4642C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4642C3[];
extern  VTBL_ENTRY _ZTV7S4642C3[];
Class_Descriptor cd_S4642C3 = {  "S4642C3", // class name
  0,0,//no base classes
  &(vtc_S4642C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4642C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4642C3),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  S4642C2  : S4642C3 {
  virtual  ~S4642C2(); // _ZN7S4642C2D1Ev
  S4642C2(); // tgen
};
//SIG(-1 S4642C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4642C2()
{
  extern Class_Descriptor cd_S4642C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4642C2, buf);
    S4642C2 *dp, &lv = *(dp=new (buf) S4642C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4642C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4642C2)");
    check_base_class_offset(lv, (S4642C3*), 0, "S4642C2");
    test_class_info(&lv, &cd_S4642C2);
    dp->~S4642C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4642C2(Test_S4642C2, "S4642C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4642C2C1Ev();
extern void _ZN7S4642C2D1Ev();
Name_Map name_map_S4642C2[] = {
  NSPAIR(_ZN7S4642C2C1Ev),
  NSPAIR(_ZN7S4642C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4642C3;
extern VTBL_ENTRY _ZTI7S4642C3[];
extern  VTBL_ENTRY _ZTV7S4642C3[];
static Base_Class bases_S4642C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4642C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4642C2[];
extern void _ZN7S4642C2D1Ev();
extern void _ZN7S4642C2D0Ev();
extern void _ZN7S4642C32v2Ev();
static  VTBL_ENTRY vtc_S4642C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4642C2[0]),
  (VTBL_ENTRY)&_ZN7S4642C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4642C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4642C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4642C2[];
extern  VTBL_ENTRY _ZTV7S4642C2[];
Class_Descriptor cd_S4642C2 = {  "S4642C2", // class name
  bases_S4642C2, 1,
  &(vtc_S4642C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4642C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4642C2),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  S4642C1  : S4642C2 {
  void *s4642c1f0;
  virtual  ~S4642C1(); // _ZN7S4642C1D1Ev
  virtual void  v1(); // _ZN7S4642C12v1Ev
  S4642C1(); // tgen
};
//SIG(1 S4642C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp}


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

static void Test_S4642C1()
{
  extern Class_Descriptor cd_S4642C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4642C1, buf);
    S4642C1 *dp, &lv = *(dp=new (buf) S4642C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4642C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4642C1)");
    check_base_class_offset(lv, (S4642C3*)(S4642C2*), 0, "S4642C1");
    check_base_class_offset(lv, (S4642C2*), 0, "S4642C1");
    check_field_offset(lv, s4642c1f0, ABISELECT(8,4), "S4642C1.s4642c1f0");
    test_class_info(&lv, &cd_S4642C1);
    dp->~S4642C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4642C1(Test_S4642C1, "S4642C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4642C1C1Ev();
extern void _ZN7S4642C1D1Ev();
Name_Map name_map_S4642C1[] = {
  NSPAIR(_ZN7S4642C1C1Ev),
  NSPAIR(_ZN7S4642C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4642C3;
extern VTBL_ENTRY _ZTI7S4642C3[];
extern  VTBL_ENTRY _ZTV7S4642C3[];
extern Class_Descriptor cd_S4642C2;
extern VTBL_ENTRY _ZTI7S4642C2[];
extern  VTBL_ENTRY _ZTV7S4642C2[];
static Base_Class bases_S4642C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4642C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4642C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4642C1[];
extern void _ZN7S4642C1D1Ev();
extern void _ZN7S4642C1D0Ev();
extern void _ZN7S4642C32v2Ev();
extern void _ZN7S4642C12v1Ev();
static  VTBL_ENTRY vtc_S4642C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4642C1[0]),
  (VTBL_ENTRY)&_ZN7S4642C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4642C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4642C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4642C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4642C1[];
extern  VTBL_ENTRY _ZTV7S4642C1[];
Class_Descriptor cd_S4642C1 = {  "S4642C1", // class name
  bases_S4642C1, 2,
  &(vtc_S4642C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4642C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4642C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4625C3  {
  virtual  ~S4625C3(); // _ZN7S4625C3D1Ev
  virtual void  v2(); // _ZN7S4625C32v2Ev
  S4625C3(); // tgen
};
//SIG(-1 S4625C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4625C3C1Ev();
extern void _ZN7S4625C3D1Ev();
Name_Map name_map_S4625C3[] = {
  NSPAIR(_ZN7S4625C3C1Ev),
  NSPAIR(_ZN7S4625C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4625C3[];
extern void _ZN7S4625C3D1Ev();
extern void _ZN7S4625C3D0Ev();
extern void _ZN7S4625C32v2Ev();
static  VTBL_ENTRY vtc_S4625C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4625C3[0]),
  (VTBL_ENTRY)&_ZN7S4625C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4625C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4625C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4625C3[];
extern  VTBL_ENTRY _ZTV7S4625C3[];
Class_Descriptor cd_S4625C3 = {  "S4625C3", // class name
  0,0,//no base classes
  &(vtc_S4625C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4625C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4625C3),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  S4625C2  : S4625C3 {
  virtual  ~S4625C2(); // _ZN7S4625C2D1Ev
  S4625C2(); // tgen
};
//SIG(-1 S4625C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4625C2()
{
  extern Class_Descriptor cd_S4625C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4625C2, buf);
    S4625C2 *dp, &lv = *(dp=new (buf) S4625C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4625C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4625C2)");
    check_base_class_offset(lv, (S4625C3*), 0, "S4625C2");
    test_class_info(&lv, &cd_S4625C2);
    dp->~S4625C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4625C2(Test_S4625C2, "S4625C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4625C2C1Ev();
extern void _ZN7S4625C2D1Ev();
Name_Map name_map_S4625C2[] = {
  NSPAIR(_ZN7S4625C2C1Ev),
  NSPAIR(_ZN7S4625C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4625C3;
extern VTBL_ENTRY _ZTI7S4625C3[];
extern  VTBL_ENTRY _ZTV7S4625C3[];
static Base_Class bases_S4625C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4625C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4625C2[];
extern void _ZN7S4625C2D1Ev();
extern void _ZN7S4625C2D0Ev();
extern void _ZN7S4625C32v2Ev();
static  VTBL_ENTRY vtc_S4625C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4625C2[0]),
  (VTBL_ENTRY)&_ZN7S4625C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4625C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4625C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4625C2[];
extern  VTBL_ENTRY _ZTV7S4625C2[];
Class_Descriptor cd_S4625C2 = {  "S4625C2", // class name
  bases_S4625C2, 1,
  &(vtc_S4625C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4625C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4625C2),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  S4625C1  : S4625C2 {
  __tsi64 s4625c1f0;
  virtual  ~S4625C1(); // _ZN7S4625C1D1Ev
  virtual void  v1(); // _ZN7S4625C12v1Ev
  S4625C1(); // tgen
};
//SIG(1 S4625C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 FL}


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

static void Test_S4625C1()
{
  extern Class_Descriptor cd_S4625C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S4625C1, buf);
    S4625C1 *dp, &lv = *(dp=new (buf) S4625C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S4625C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4625C1)");
    check_base_class_offset(lv, (S4625C3*)(S4625C2*), 0, "S4625C1");
    check_base_class_offset(lv, (S4625C2*), 0, "S4625C1");
    check_field_offset(lv, s4625c1f0, ABISELECT(8,4), "S4625C1.s4625c1f0");
    test_class_info(&lv, &cd_S4625C1);
    dp->~S4625C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4625C1(Test_S4625C1, "S4625C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S4625C1C1Ev();
extern void _ZN7S4625C1D1Ev();
Name_Map name_map_S4625C1[] = {
  NSPAIR(_ZN7S4625C1C1Ev),
  NSPAIR(_ZN7S4625C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4625C3;
extern VTBL_ENTRY _ZTI7S4625C3[];
extern  VTBL_ENTRY _ZTV7S4625C3[];
extern Class_Descriptor cd_S4625C2;
extern VTBL_ENTRY _ZTI7S4625C2[];
extern  VTBL_ENTRY _ZTV7S4625C2[];
static Base_Class bases_S4625C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4625C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4625C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4625C1[];
extern void _ZN7S4625C1D1Ev();
extern void _ZN7S4625C1D0Ev();
extern void _ZN7S4625C32v2Ev();
extern void _ZN7S4625C12v1Ev();
static  VTBL_ENTRY vtc_S4625C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4625C1[0]),
  (VTBL_ENTRY)&_ZN7S4625C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4625C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4625C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4625C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4625C1[];
extern  VTBL_ENTRY _ZTV7S4625C1[];
Class_Descriptor cd_S4625C1 = {  "S4625C1", // class name
  bases_S4625C1, 2,
  &(vtc_S4625C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S4625C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4625C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4622C3  {
  virtual  ~S4622C3(); // _ZN7S4622C3D1Ev
  virtual void  v2(); // _ZN7S4622C32v2Ev
  S4622C3(); // tgen
};
//SIG(-1 S4622C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4622C3C1Ev();
extern void _ZN7S4622C3D1Ev();
Name_Map name_map_S4622C3[] = {
  NSPAIR(_ZN7S4622C3C1Ev),
  NSPAIR(_ZN7S4622C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4622C3[];
extern void _ZN7S4622C3D1Ev();
extern void _ZN7S4622C3D0Ev();
extern void _ZN7S4622C32v2Ev();
static  VTBL_ENTRY vtc_S4622C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4622C3[0]),
  (VTBL_ENTRY)&_ZN7S4622C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4622C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4622C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4622C3[];
extern  VTBL_ENTRY _ZTV7S4622C3[];
Class_Descriptor cd_S4622C3 = {  "S4622C3", // class name
  0,0,//no base classes
  &(vtc_S4622C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4622C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4622C3),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  S4622C2  : S4622C3 {
  virtual  ~S4622C2(); // _ZN7S4622C2D1Ev
  S4622C2(); // tgen
};
//SIG(-1 S4622C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4622C2()
{
  extern Class_Descriptor cd_S4622C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4622C2, buf);
    S4622C2 *dp, &lv = *(dp=new (buf) S4622C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4622C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4622C2)");
    check_base_class_offset(lv, (S4622C3*), 0, "S4622C2");
    test_class_info(&lv, &cd_S4622C2);
    dp->~S4622C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4622C2(Test_S4622C2, "S4622C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4622C2C1Ev();
extern void _ZN7S4622C2D1Ev();
Name_Map name_map_S4622C2[] = {
  NSPAIR(_ZN7S4622C2C1Ev),
  NSPAIR(_ZN7S4622C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4622C3;
extern VTBL_ENTRY _ZTI7S4622C3[];
extern  VTBL_ENTRY _ZTV7S4622C3[];
static Base_Class bases_S4622C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4622C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4622C2[];
extern void _ZN7S4622C2D1Ev();
extern void _ZN7S4622C2D0Ev();
extern void _ZN7S4622C32v2Ev();
static  VTBL_ENTRY vtc_S4622C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4622C2[0]),
  (VTBL_ENTRY)&_ZN7S4622C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4622C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4622C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4622C2[];
extern  VTBL_ENTRY _ZTV7S4622C2[];
Class_Descriptor cd_S4622C2 = {  "S4622C2", // class name
  bases_S4622C2, 1,
  &(vtc_S4622C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4622C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4622C2),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  S4622C1  : S4622C2 {
  int s4622c1f0;
  virtual  ~S4622C1(); // _ZN7S4622C1D1Ev
  virtual void  v1(); // _ZN7S4622C12v1Ev
  S4622C1(); // tgen
};
//SIG(1 S4622C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fi}


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

static void Test_S4622C1()
{
  extern Class_Descriptor cd_S4622C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4622C1, buf);
    S4622C1 *dp, &lv = *(dp=new (buf) S4622C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4622C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4622C1)");
    check_base_class_offset(lv, (S4622C3*)(S4622C2*), 0, "S4622C1");
    check_base_class_offset(lv, (S4622C2*), 0, "S4622C1");
    check_field_offset(lv, s4622c1f0, ABISELECT(8,4), "S4622C1.s4622c1f0");
    test_class_info(&lv, &cd_S4622C1);
    dp->~S4622C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4622C1(Test_S4622C1, "S4622C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4622C1C1Ev();
extern void _ZN7S4622C1D1Ev();
Name_Map name_map_S4622C1[] = {
  NSPAIR(_ZN7S4622C1C1Ev),
  NSPAIR(_ZN7S4622C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4622C3;
extern VTBL_ENTRY _ZTI7S4622C3[];
extern  VTBL_ENTRY _ZTV7S4622C3[];
extern Class_Descriptor cd_S4622C2;
extern VTBL_ENTRY _ZTI7S4622C2[];
extern  VTBL_ENTRY _ZTV7S4622C2[];
static Base_Class bases_S4622C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4622C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4622C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4622C1[];
extern void _ZN7S4622C1D1Ev();
extern void _ZN7S4622C1D0Ev();
extern void _ZN7S4622C32v2Ev();
extern void _ZN7S4622C12v1Ev();
static  VTBL_ENTRY vtc_S4622C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4622C1[0]),
  (VTBL_ENTRY)&_ZN7S4622C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4622C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4622C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4622C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4622C1[];
extern  VTBL_ENTRY _ZTV7S4622C1[];
Class_Descriptor cd_S4622C1 = {  "S4622C1", // class name
  bases_S4622C1, 2,
  &(vtc_S4622C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4622C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4622C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4613C3  {
  virtual  ~S4613C3(); // _ZN7S4613C3D1Ev
  virtual void  v2(); // _ZN7S4613C32v2Ev
  S4613C3(); // tgen
};
//SIG(-1 S4613C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4613C3C1Ev();
extern void _ZN7S4613C3D1Ev();
Name_Map name_map_S4613C3[] = {
  NSPAIR(_ZN7S4613C3C1Ev),
  NSPAIR(_ZN7S4613C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4613C3[];
extern void _ZN7S4613C3D1Ev();
extern void _ZN7S4613C3D0Ev();
extern void _ZN7S4613C32v2Ev();
static  VTBL_ENTRY vtc_S4613C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4613C3[0]),
  (VTBL_ENTRY)&_ZN7S4613C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4613C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4613C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4613C3[];
extern  VTBL_ENTRY _ZTV7S4613C3[];
Class_Descriptor cd_S4613C3 = {  "S4613C3", // class name
  0,0,//no base classes
  &(vtc_S4613C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4613C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4613C3),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  S4613C2  : S4613C3 {
  virtual  ~S4613C2(); // _ZN7S4613C2D1Ev
  S4613C2(); // tgen
};
//SIG(-1 S4613C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4613C2()
{
  extern Class_Descriptor cd_S4613C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4613C2, buf);
    S4613C2 *dp, &lv = *(dp=new (buf) S4613C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4613C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4613C2)");
    check_base_class_offset(lv, (S4613C3*), 0, "S4613C2");
    test_class_info(&lv, &cd_S4613C2);
    dp->~S4613C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4613C2(Test_S4613C2, "S4613C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4613C2C1Ev();
extern void _ZN7S4613C2D1Ev();
Name_Map name_map_S4613C2[] = {
  NSPAIR(_ZN7S4613C2C1Ev),
  NSPAIR(_ZN7S4613C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4613C3;
extern VTBL_ENTRY _ZTI7S4613C3[];
extern  VTBL_ENTRY _ZTV7S4613C3[];
static Base_Class bases_S4613C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4613C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4613C2[];
extern void _ZN7S4613C2D1Ev();
extern void _ZN7S4613C2D0Ev();
extern void _ZN7S4613C32v2Ev();
static  VTBL_ENTRY vtc_S4613C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4613C2[0]),
  (VTBL_ENTRY)&_ZN7S4613C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4613C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4613C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4613C2[];
extern  VTBL_ENTRY _ZTV7S4613C2[];
Class_Descriptor cd_S4613C2 = {  "S4613C2", // class name
  bases_S4613C2, 1,
  &(vtc_S4613C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4613C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4613C2),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  S4613C1  : S4613C2 {
  char s4613c1f0;
  virtual  ~S4613C1(); // _ZN7S4613C1D1Ev
  virtual void  v1(); // _ZN7S4613C12v1Ev
  S4613C1(); // tgen
};
//SIG(1 S4613C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fc}


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

static void Test_S4613C1()
{
  extern Class_Descriptor cd_S4613C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4613C1, buf);
    S4613C1 *dp, &lv = *(dp=new (buf) S4613C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4613C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4613C1)");
    check_base_class_offset(lv, (S4613C3*)(S4613C2*), 0, "S4613C1");
    check_base_class_offset(lv, (S4613C2*), 0, "S4613C1");
    check_field_offset(lv, s4613c1f0, ABISELECT(8,4), "S4613C1.s4613c1f0");
    test_class_info(&lv, &cd_S4613C1);
    dp->~S4613C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4613C1(Test_S4613C1, "S4613C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4613C1C1Ev();
extern void _ZN7S4613C1D1Ev();
Name_Map name_map_S4613C1[] = {
  NSPAIR(_ZN7S4613C1C1Ev),
  NSPAIR(_ZN7S4613C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4613C3;
extern VTBL_ENTRY _ZTI7S4613C3[];
extern  VTBL_ENTRY _ZTV7S4613C3[];
extern Class_Descriptor cd_S4613C2;
extern VTBL_ENTRY _ZTI7S4613C2[];
extern  VTBL_ENTRY _ZTV7S4613C2[];
static Base_Class bases_S4613C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4613C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4613C1[];
extern void _ZN7S4613C1D1Ev();
extern void _ZN7S4613C1D0Ev();
extern void _ZN7S4613C32v2Ev();
extern void _ZN7S4613C12v1Ev();
static  VTBL_ENTRY vtc_S4613C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4613C1[0]),
  (VTBL_ENTRY)&_ZN7S4613C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4613C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4613C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4613C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4613C1[];
extern  VTBL_ENTRY _ZTV7S4613C1[];
Class_Descriptor cd_S4613C1 = {  "S4613C1", // class name
  bases_S4613C1, 2,
  &(vtc_S4613C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4613C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4613C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4608C3  {
  virtual  ~S4608C3(); // _ZN7S4608C3D1Ev
  virtual void  v2(); // _ZN7S4608C32v2Ev
  S4608C3(); // tgen
};
//SIG(-1 S4608C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4608C3C1Ev();
extern void _ZN7S4608C3D1Ev();
Name_Map name_map_S4608C3[] = {
  NSPAIR(_ZN7S4608C3C1Ev),
  NSPAIR(_ZN7S4608C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4608C3[];
extern void _ZN7S4608C3D1Ev();
extern void _ZN7S4608C3D0Ev();
extern void _ZN7S4608C32v2Ev();
static  VTBL_ENTRY vtc_S4608C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4608C3[0]),
  (VTBL_ENTRY)&_ZN7S4608C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4608C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4608C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4608C3[];
extern  VTBL_ENTRY _ZTV7S4608C3[];
Class_Descriptor cd_S4608C3 = {  "S4608C3", // class name
  0,0,//no base classes
  &(vtc_S4608C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4608C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4608C3),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  S4608C2  : S4608C3 {
  virtual  ~S4608C2(); // _ZN7S4608C2D1Ev
  S4608C2(); // tgen
};
//SIG(-1 S4608C2) C1{ BC2{ vd v1} vd}


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

static void Test_S4608C2()
{
  extern Class_Descriptor cd_S4608C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4608C2, buf);
    S4608C2 *dp, &lv = *(dp=new (buf) S4608C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4608C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4608C2)");
    check_base_class_offset(lv, (S4608C3*), 0, "S4608C2");
    test_class_info(&lv, &cd_S4608C2);
    dp->~S4608C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4608C2(Test_S4608C2, "S4608C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4608C2C1Ev();
extern void _ZN7S4608C2D1Ev();
Name_Map name_map_S4608C2[] = {
  NSPAIR(_ZN7S4608C2C1Ev),
  NSPAIR(_ZN7S4608C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4608C3;
extern VTBL_ENTRY _ZTI7S4608C3[];
extern  VTBL_ENTRY _ZTV7S4608C3[];
static Base_Class bases_S4608C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4608C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4608C2[];
extern void _ZN7S4608C2D1Ev();
extern void _ZN7S4608C2D0Ev();
extern void _ZN7S4608C32v2Ev();
static  VTBL_ENTRY vtc_S4608C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4608C2[0]),
  (VTBL_ENTRY)&_ZN7S4608C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4608C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4608C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4608C2[];
extern  VTBL_ENTRY _ZTV7S4608C2[];
Class_Descriptor cd_S4608C2 = {  "S4608C2", // class name
  bases_S4608C2, 1,
  &(vtc_S4608C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4608C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4608C2),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  S4608C1  : S4608C2 {
  void *s4608c1f0;
  virtual  ~S4608C1(); // _ZN7S4608C1D1Ev
  virtual void  v1(); // _ZN7S4608C12v1Ev
  S4608C1(); // tgen
};
//SIG(1 S4608C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fp}


 S4608C1 ::~S4608C1(){ note_dtor("S4608C1", this);}
void  S4608C1 ::v1(){vfunc_called(this, "_ZN7S4608C12v1Ev");}
S4608C1 ::S4608C1(){ note_ctor("S4608C1", this);} // tgen

static void Test_S4608C1()
{
  extern Class_Descriptor cd_S4608C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4608C1, buf);
    S4608C1 *dp, &lv = *(dp=new (buf) S4608C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4608C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4608C1)");
    check_base_class_offset(lv, (S4608C3*)(S4608C2*), 0, "S4608C1");
    check_base_class_offset(lv, (S4608C2*), 0, "S4608C1");
    check_field_offset(lv, s4608c1f0, ABISELECT(8,4), "S4608C1.s4608c1f0");
    test_class_info(&lv, &cd_S4608C1);
    dp->~S4608C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4608C1(Test_S4608C1, "S4608C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4608C1C1Ev();
extern void _ZN7S4608C1D1Ev();
Name_Map name_map_S4608C1[] = {
  NSPAIR(_ZN7S4608C1C1Ev),
  NSPAIR(_ZN7S4608C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4608C3;
extern VTBL_ENTRY _ZTI7S4608C3[];
extern  VTBL_ENTRY _ZTV7S4608C3[];
extern Class_Descriptor cd_S4608C2;
extern VTBL_ENTRY _ZTI7S4608C2[];
extern  VTBL_ENTRY _ZTV7S4608C2[];
static Base_Class bases_S4608C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4608C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4608C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4608C1[];
extern void _ZN7S4608C1D1Ev();
extern void _ZN7S4608C1D0Ev();
extern void _ZN7S4608C32v2Ev();
extern void _ZN7S4608C12v1Ev();
static  VTBL_ENTRY vtc_S4608C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4608C1[0]),
  (VTBL_ENTRY)&_ZN7S4608C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4608C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4608C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4608C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4608C1[];
extern  VTBL_ENTRY _ZTV7S4608C1[];
Class_Descriptor cd_S4608C1 = {  "S4608C1", // class name
  bases_S4608C1, 2,
  &(vtc_S4608C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4608C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4608C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4600C3  {
  virtual  ~S4600C3(); // _ZN7S4600C3D1Ev
  virtual void  v2(); // _ZN7S4600C32v2Ev
  S4600C3(); // tgen
};
//SIG(-1 S4600C3) C1{ vd v1}


 S4600C3 ::~S4600C3(){ note_dtor("S4600C3", this);}
void  S4600C3 ::v2(){vfunc_called(this, "_ZN7S4600C32v2Ev");}
S4600C3 ::S4600C3(){ note_ctor("S4600C3", this);} // tgen

static void Test_S4600C3()
{
  extern Class_Descriptor cd_S4600C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4600C3, buf);
    S4600C3 *dp, &lv = *(dp=new (buf) S4600C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4600C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4600C3)");
    test_class_info(&lv, &cd_S4600C3);
    dp->~S4600C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4600C3(Test_S4600C3, "S4600C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4600C3C1Ev();
extern void _ZN7S4600C3D1Ev();
Name_Map name_map_S4600C3[] = {
  NSPAIR(_ZN7S4600C3C1Ev),
  NSPAIR(_ZN7S4600C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4600C3[];
extern void _ZN7S4600C3D1Ev();
extern void _ZN7S4600C3D0Ev();
extern void _ZN7S4600C32v2Ev();
static  VTBL_ENTRY vtc_S4600C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4600C3[0]),
  (VTBL_ENTRY)&_ZN7S4600C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4600C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4600C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4600C3[];
extern  VTBL_ENTRY _ZTV7S4600C3[];
Class_Descriptor cd_S4600C3 = {  "S4600C3", // class name
  0,0,//no base classes
  &(vtc_S4600C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4600C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4600C3),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  S4600C2  : S4600C3 {
  virtual  ~S4600C2(); // _ZN7S4600C2D1Ev
  S4600C2(); // tgen
};
//SIG(-1 S4600C2) C1{ BC2{ vd v1} vd}


 S4600C2 ::~S4600C2(){ note_dtor("S4600C2", this);}
S4600C2 ::S4600C2(){ note_ctor("S4600C2", this);} // tgen

static void Test_S4600C2()
{
  extern Class_Descriptor cd_S4600C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4600C2, buf);
    S4600C2 *dp, &lv = *(dp=new (buf) S4600C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4600C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4600C2)");
    check_base_class_offset(lv, (S4600C3*), 0, "S4600C2");
    test_class_info(&lv, &cd_S4600C2);
    dp->~S4600C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4600C2(Test_S4600C2, "S4600C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4600C2C1Ev();
extern void _ZN7S4600C2D1Ev();
Name_Map name_map_S4600C2[] = {
  NSPAIR(_ZN7S4600C2C1Ev),
  NSPAIR(_ZN7S4600C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4600C3;
extern VTBL_ENTRY _ZTI7S4600C3[];
extern  VTBL_ENTRY _ZTV7S4600C3[];
static Base_Class bases_S4600C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4600C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4600C2[];
extern void _ZN7S4600C2D1Ev();
extern void _ZN7S4600C2D0Ev();
extern void _ZN7S4600C32v2Ev();
static  VTBL_ENTRY vtc_S4600C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4600C2[0]),
  (VTBL_ENTRY)&_ZN7S4600C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4600C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4600C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4600C2[];
extern  VTBL_ENTRY _ZTV7S4600C2[];
Class_Descriptor cd_S4600C2 = {  "S4600C2", // class name
  bases_S4600C2, 1,
  &(vtc_S4600C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4600C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4600C2),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  S4600C1  : S4600C2 {
  void *s4600c1f0[2];
  virtual void  v1(); // _ZN7S4600C12v1Ev
  ~S4600C1(); // tgen
  S4600C1(); // tgen
};
//SIG(1 S4600C1) C1{ BC2{ BC3{ vd v2} vd} v1 Fp[2]}


void  S4600C1 ::v1(){vfunc_called(this, "_ZN7S4600C12v1Ev");}
S4600C1 ::~S4600C1(){ note_dtor("S4600C1", this);} // tgen
S4600C1 ::S4600C1(){ note_ctor("S4600C1", this);} // tgen

static void Test_S4600C1()
{
  extern Class_Descriptor cd_S4600C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4600C1, buf);
    S4600C1 *dp, &lv = *(dp=new (buf) S4600C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4600C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4600C1)");
    check_base_class_offset(lv, (S4600C3*)(S4600C2*), 0, "S4600C1");
    check_base_class_offset(lv, (S4600C2*), 0, "S4600C1");
    check_field_offset(lv, s4600c1f0, ABISELECT(8,4), "S4600C1.s4600c1f0");
    test_class_info(&lv, &cd_S4600C1);
    dp->~S4600C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4600C1(Test_S4600C1, "S4600C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4600C1C1Ev();
extern void _ZN7S4600C1D1Ev();
Name_Map name_map_S4600C1[] = {
  NSPAIR(_ZN7S4600C1C1Ev),
  NSPAIR(_ZN7S4600C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4600C3;
extern VTBL_ENTRY _ZTI7S4600C3[];
extern  VTBL_ENTRY _ZTV7S4600C3[];
extern Class_Descriptor cd_S4600C2;
extern VTBL_ENTRY _ZTI7S4600C2[];
extern  VTBL_ENTRY _ZTV7S4600C2[];
static Base_Class bases_S4600C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4600C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4600C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4600C1[];
extern void _ZN7S4600C1D1Ev();
extern void _ZN7S4600C1D0Ev();
extern void _ZN7S4600C32v2Ev();
extern void _ZN7S4600C12v1Ev();
static  VTBL_ENTRY vtc_S4600C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4600C1[0]),
  (VTBL_ENTRY)&_ZN7S4600C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4600C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4600C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4600C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4600C1[];
extern  VTBL_ENTRY _ZTV7S4600C1[];
Class_Descriptor cd_S4600C1 = {  "S4600C1", // class name
  bases_S4600C1, 2,
  &(vtc_S4600C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4600C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4600C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8198C1  : S2060C10_nt {
  void *s8198c1f0[4];
  virtual  ~S8198C1(); // _ZN7S8198C1D1Ev
  S8198C1(); // tgen
};
//SIG(1 S8198C1) C1{ BC2{ vd m Fp[2]} vd Fp[4]}


 S8198C1 ::~S8198C1(){ note_dtor("S8198C1", this);}
S8198C1 ::S8198C1(){ note_ctor("S8198C1", this);} // tgen

static void Test_S8198C1()
{
  extern Class_Descriptor cd_S8198C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S8198C1, buf);
    S8198C1 *dp, &lv = *(dp=new (buf) S8198C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S8198C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8198C1)");
    check_base_class_offset(lv, (S2060C10_nt*), 0, "S8198C1");
    check_field_offset(lv, s8198c1f0, ABISELECT(24,12), "S8198C1.s8198c1f0");
    test_class_info(&lv, &cd_S8198C1);
    dp->~S8198C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8198C1(Test_S8198C1, "S8198C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S8198C1C1Ev();
extern void _ZN7S8198C1D1Ev();
Name_Map name_map_S8198C1[] = {
  NSPAIR(_ZN7S8198C1C1Ev),
  NSPAIR(_ZN7S8198C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2060C10_nt;
extern VTBL_ENTRY _ZTI11S2060C10_nt[];
extern  VTBL_ENTRY _ZTV11S2060C10_nt[];
static Base_Class bases_S8198C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2060C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8198C1[];
extern void _ZN7S8198C1D1Ev();
extern void _ZN7S8198C1D0Ev();
static  VTBL_ENTRY vtc_S8198C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8198C1[0]),
  (VTBL_ENTRY)&_ZN7S8198C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8198C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8198C1[];
extern  VTBL_ENTRY _ZTV7S8198C1[];
Class_Descriptor cd_S8198C1 = {  "S8198C1", // class name
  bases_S8198C1, 1,
  &(vtc_S8198C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S8198C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8198C1),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  S8197C1  : S2060C10_nt {
  void *s8197c1f0[3];
  virtual  ~S8197C1(); // _ZN7S8197C1D1Ev
  S8197C1(); // tgen
};
//SIG(1 S8197C1) C1{ BC2{ vd m Fp[2]} vd Fp[3]}


 S8197C1 ::~S8197C1(){ note_dtor("S8197C1", this);}
S8197C1 ::S8197C1(){ note_ctor("S8197C1", this);} // tgen

static void Test_S8197C1()
{
  extern Class_Descriptor cd_S8197C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S8197C1, buf);
    S8197C1 *dp, &lv = *(dp=new (buf) S8197C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S8197C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8197C1)");
    check_base_class_offset(lv, (S2060C10_nt*), 0, "S8197C1");
    check_field_offset(lv, s8197c1f0, ABISELECT(24,12), "S8197C1.s8197c1f0");
    test_class_info(&lv, &cd_S8197C1);
    dp->~S8197C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8197C1(Test_S8197C1, "S8197C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S8197C1C1Ev();
extern void _ZN7S8197C1D1Ev();
Name_Map name_map_S8197C1[] = {
  NSPAIR(_ZN7S8197C1C1Ev),
  NSPAIR(_ZN7S8197C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2060C10_nt;
extern VTBL_ENTRY _ZTI11S2060C10_nt[];
extern  VTBL_ENTRY _ZTV11S2060C10_nt[];
static Base_Class bases_S8197C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2060C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8197C1[];
extern void _ZN7S8197C1D1Ev();
extern void _ZN7S8197C1D0Ev();
static  VTBL_ENTRY vtc_S8197C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8197C1[0]),
  (VTBL_ENTRY)&_ZN7S8197C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8197C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8197C1[];
extern  VTBL_ENTRY _ZTV7S8197C1[];
Class_Descriptor cd_S8197C1 = {  "S8197C1", // class name
  bases_S8197C1, 1,
  &(vtc_S8197C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S8197C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8197C1),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  S4643C3  {
  virtual  ~S4643C3(); // _ZN7S4643C3D1Ev
  virtual void  v2(); // _ZN7S4643C32v2Ev
  S4643C3(); // tgen
};
//SIG(-1 S4643C3) C1{ vd v1}


 S4643C3 ::~S4643C3(){ note_dtor("S4643C3", this);}
void  S4643C3 ::v2(){vfunc_called(this, "_ZN7S4643C32v2Ev");}
S4643C3 ::S4643C3(){ note_ctor("S4643C3", this);} // tgen

static void Test_S4643C3()
{
  extern Class_Descriptor cd_S4643C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4643C3, buf);
    S4643C3 *dp, &lv = *(dp=new (buf) S4643C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4643C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4643C3)");
    test_class_info(&lv, &cd_S4643C3);
    dp->~S4643C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4643C3(Test_S4643C3, "S4643C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4643C3C1Ev();
extern void _ZN7S4643C3D1Ev();
Name_Map name_map_S4643C3[] = {
  NSPAIR(_ZN7S4643C3C1Ev),
  NSPAIR(_ZN7S4643C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4643C3[];
extern void _ZN7S4643C3D1Ev();
extern void _ZN7S4643C3D0Ev();
extern void _ZN7S4643C32v2Ev();
static  VTBL_ENTRY vtc_S4643C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4643C3[0]),
  (VTBL_ENTRY)&_ZN7S4643C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4643C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4643C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4643C3[];
extern  VTBL_ENTRY _ZTV7S4643C3[];
Class_Descriptor cd_S4643C3 = {  "S4643C3", // class name
  0,0,//no base classes
  &(vtc_S4643C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4643C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4643C3),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  S4643C2  : S4643C3 {
  virtual  ~S4643C2(); // _ZN7S4643C2D1Ev
  S4643C2(); // tgen
};
//SIG(-1 S4643C2) C1{ BC2{ vd v1} vd}


 S4643C2 ::~S4643C2(){ note_dtor("S4643C2", this);}
S4643C2 ::S4643C2(){ note_ctor("S4643C2", this);} // tgen

static void Test_S4643C2()
{
  extern Class_Descriptor cd_S4643C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4643C2, buf);
    S4643C2 *dp, &lv = *(dp=new (buf) S4643C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4643C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4643C2)");
    check_base_class_offset(lv, (S4643C3*), 0, "S4643C2");
    test_class_info(&lv, &cd_S4643C2);
    dp->~S4643C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4643C2(Test_S4643C2, "S4643C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4643C2C1Ev();
extern void _ZN7S4643C2D1Ev();
Name_Map name_map_S4643C2[] = {
  NSPAIR(_ZN7S4643C2C1Ev),
  NSPAIR(_ZN7S4643C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4643C3;
extern VTBL_ENTRY _ZTI7S4643C3[];
extern  VTBL_ENTRY _ZTV7S4643C3[];
static Base_Class bases_S4643C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4643C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4643C2[];
extern void _ZN7S4643C2D1Ev();
extern void _ZN7S4643C2D0Ev();
extern void _ZN7S4643C32v2Ev();
static  VTBL_ENTRY vtc_S4643C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4643C2[0]),
  (VTBL_ENTRY)&_ZN7S4643C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4643C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4643C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4643C2[];
extern  VTBL_ENTRY _ZTV7S4643C2[];
Class_Descriptor cd_S4643C2 = {  "S4643C2", // class name
  bases_S4643C2, 1,
  &(vtc_S4643C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4643C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4643C2),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  S4643C1  : S4643C2 {
  virtual  ~S4643C1(); // _ZN7S4643C1D1Ev
  virtual void  v1(); // _ZN7S4643C12v1Ev
  S4643C1(); // tgen
};
//SIG(1 S4643C1) C1{ BC2{ BC3{ vd v2} vd} vd v1}


 S4643C1 ::~S4643C1(){ note_dtor("S4643C1", this);}
void  S4643C1 ::v1(){vfunc_called(this, "_ZN7S4643C12v1Ev");}
S4643C1 ::S4643C1(){ note_ctor("S4643C1", this);} // tgen

static void Test_S4643C1()
{
  extern Class_Descriptor cd_S4643C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4643C1, buf);
    S4643C1 *dp, &lv = *(dp=new (buf) S4643C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4643C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4643C1)");
    check_base_class_offset(lv, (S4643C3*)(S4643C2*), 0, "S4643C1");
    check_base_class_offset(lv, (S4643C2*), 0, "S4643C1");
    test_class_info(&lv, &cd_S4643C1);
    dp->~S4643C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4643C1(Test_S4643C1, "S4643C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4643C1C1Ev();
extern void _ZN7S4643C1D1Ev();
Name_Map name_map_S4643C1[] = {
  NSPAIR(_ZN7S4643C1C1Ev),
  NSPAIR(_ZN7S4643C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4643C3;
extern VTBL_ENTRY _ZTI7S4643C3[];
extern  VTBL_ENTRY _ZTV7S4643C3[];
extern Class_Descriptor cd_S4643C2;
extern VTBL_ENTRY _ZTI7S4643C2[];
extern  VTBL_ENTRY _ZTV7S4643C2[];
static Base_Class bases_S4643C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4643C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4643C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4643C1[];
extern void _ZN7S4643C1D1Ev();
extern void _ZN7S4643C1D0Ev();
extern void _ZN7S4643C32v2Ev();
extern void _ZN7S4643C12v1Ev();
static  VTBL_ENTRY vtc_S4643C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4643C1[0]),
  (VTBL_ENTRY)&_ZN7S4643C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4643C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4643C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4643C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4643C1[];
extern  VTBL_ENTRY _ZTV7S4643C1[];
Class_Descriptor cd_S4643C1 = {  "S4643C1", // class name
  bases_S4643C1, 2,
  &(vtc_S4643C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4643C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4643C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4598C3  {
  virtual  ~S4598C3(); // _ZN7S4598C3D1Ev
  virtual void  v2(); // _ZN7S4598C32v2Ev
  S4598C3(); // tgen
};
//SIG(-1 S4598C3) C1{ vd v1}


 S4598C3 ::~S4598C3(){ note_dtor("S4598C3", this);}
void  S4598C3 ::v2(){vfunc_called(this, "_ZN7S4598C32v2Ev");}
S4598C3 ::S4598C3(){ note_ctor("S4598C3", this);} // tgen

static void Test_S4598C3()
{
  extern Class_Descriptor cd_S4598C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4598C3, buf);
    S4598C3 *dp, &lv = *(dp=new (buf) S4598C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4598C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4598C3)");
    test_class_info(&lv, &cd_S4598C3);
    dp->~S4598C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4598C3(Test_S4598C3, "S4598C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4598C3C1Ev();
extern void _ZN7S4598C3D1Ev();
Name_Map name_map_S4598C3[] = {
  NSPAIR(_ZN7S4598C3C1Ev),
  NSPAIR(_ZN7S4598C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4598C3[];
extern void _ZN7S4598C3D1Ev();
extern void _ZN7S4598C3D0Ev();
extern void _ZN7S4598C32v2Ev();
static  VTBL_ENTRY vtc_S4598C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4598C3[0]),
  (VTBL_ENTRY)&_ZN7S4598C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4598C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4598C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4598C3[];
extern  VTBL_ENTRY _ZTV7S4598C3[];
Class_Descriptor cd_S4598C3 = {  "S4598C3", // class name
  0,0,//no base classes
  &(vtc_S4598C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4598C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4598C3),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  S4598C2  : S4598C3 {
  virtual  ~S4598C2(); // _ZN7S4598C2D1Ev
  S4598C2(); // tgen
};
//SIG(-1 S4598C2) C1{ BC2{ vd v1} vd}


 S4598C2 ::~S4598C2(){ note_dtor("S4598C2", this);}
S4598C2 ::S4598C2(){ note_ctor("S4598C2", this);} // tgen

static void Test_S4598C2()
{
  extern Class_Descriptor cd_S4598C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4598C2, buf);
    S4598C2 *dp, &lv = *(dp=new (buf) S4598C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4598C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4598C2)");
    check_base_class_offset(lv, (S4598C3*), 0, "S4598C2");
    test_class_info(&lv, &cd_S4598C2);
    dp->~S4598C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4598C2(Test_S4598C2, "S4598C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4598C2C1Ev();
extern void _ZN7S4598C2D1Ev();
Name_Map name_map_S4598C2[] = {
  NSPAIR(_ZN7S4598C2C1Ev),
  NSPAIR(_ZN7S4598C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4598C3;
extern VTBL_ENTRY _ZTI7S4598C3[];
extern  VTBL_ENTRY _ZTV7S4598C3[];
static Base_Class bases_S4598C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4598C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4598C2[];
extern void _ZN7S4598C2D1Ev();
extern void _ZN7S4598C2D0Ev();
extern void _ZN7S4598C32v2Ev();
static  VTBL_ENTRY vtc_S4598C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4598C2[0]),
  (VTBL_ENTRY)&_ZN7S4598C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4598C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4598C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4598C2[];
extern  VTBL_ENTRY _ZTV7S4598C2[];
Class_Descriptor cd_S4598C2 = {  "S4598C2", // class name
  bases_S4598C2, 1,
  &(vtc_S4598C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4598C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4598C2),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  S4598C1  : S4598C2 {
  int s4598c1f0;
  virtual void  v1(); // _ZN7S4598C12v1Ev
  ~S4598C1(); // tgen
  S4598C1(); // tgen
};
//SIG(1 S4598C1) C1{ BC2{ BC3{ vd v2} vd} v1 Fi}


void  S4598C1 ::v1(){vfunc_called(this, "_ZN7S4598C12v1Ev");}
S4598C1 ::~S4598C1(){ note_dtor("S4598C1", this);} // tgen
S4598C1 ::S4598C1(){ note_ctor("S4598C1", this);} // tgen

static void Test_S4598C1()
{
  extern Class_Descriptor cd_S4598C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4598C1, buf);
    S4598C1 *dp, &lv = *(dp=new (buf) S4598C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4598C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4598C1)");
    check_base_class_offset(lv, (S4598C3*)(S4598C2*), 0, "S4598C1");
    check_base_class_offset(lv, (S4598C2*), 0, "S4598C1");
    check_field_offset(lv, s4598c1f0, ABISELECT(8,4), "S4598C1.s4598c1f0");
    test_class_info(&lv, &cd_S4598C1);
    dp->~S4598C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4598C1(Test_S4598C1, "S4598C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4598C1C1Ev();
extern void _ZN7S4598C1D1Ev();
Name_Map name_map_S4598C1[] = {
  NSPAIR(_ZN7S4598C1C1Ev),
  NSPAIR(_ZN7S4598C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4598C3;
extern VTBL_ENTRY _ZTI7S4598C3[];
extern  VTBL_ENTRY _ZTV7S4598C3[];
extern Class_Descriptor cd_S4598C2;
extern VTBL_ENTRY _ZTI7S4598C2[];
extern  VTBL_ENTRY _ZTV7S4598C2[];
static Base_Class bases_S4598C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4598C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4598C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4598C1[];
extern void _ZN7S4598C1D1Ev();
extern void _ZN7S4598C1D0Ev();
extern void _ZN7S4598C32v2Ev();
extern void _ZN7S4598C12v1Ev();
static  VTBL_ENTRY vtc_S4598C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4598C1[0]),
  (VTBL_ENTRY)&_ZN7S4598C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4598C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4598C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4598C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4598C1[];
extern  VTBL_ENTRY _ZTV7S4598C1[];
Class_Descriptor cd_S4598C1 = {  "S4598C1", // class name
  bases_S4598C1, 2,
  &(vtc_S4598C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4598C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4598C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4595C3  {
  virtual  ~S4595C3(); // _ZN7S4595C3D1Ev
  virtual void  v2(); // _ZN7S4595C32v2Ev
  S4595C3(); // tgen
};
//SIG(-1 S4595C3) C1{ vd v1}


 S4595C3 ::~S4595C3(){ note_dtor("S4595C3", this);}
void  S4595C3 ::v2(){vfunc_called(this, "_ZN7S4595C32v2Ev");}
S4595C3 ::S4595C3(){ note_ctor("S4595C3", this);} // tgen

static void Test_S4595C3()
{
  extern Class_Descriptor cd_S4595C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4595C3, buf);
    S4595C3 *dp, &lv = *(dp=new (buf) S4595C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4595C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4595C3)");
    test_class_info(&lv, &cd_S4595C3);
    dp->~S4595C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4595C3(Test_S4595C3, "S4595C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4595C3C1Ev();
extern void _ZN7S4595C3D1Ev();
Name_Map name_map_S4595C3[] = {
  NSPAIR(_ZN7S4595C3C1Ev),
  NSPAIR(_ZN7S4595C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4595C3[];
extern void _ZN7S4595C3D1Ev();
extern void _ZN7S4595C3D0Ev();
extern void _ZN7S4595C32v2Ev();
static  VTBL_ENTRY vtc_S4595C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4595C3[0]),
  (VTBL_ENTRY)&_ZN7S4595C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4595C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4595C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4595C3[];
extern  VTBL_ENTRY _ZTV7S4595C3[];
Class_Descriptor cd_S4595C3 = {  "S4595C3", // class name
  0,0,//no base classes
  &(vtc_S4595C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4595C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4595C3),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  S4595C2  : S4595C3 {
  virtual  ~S4595C2(); // _ZN7S4595C2D1Ev
  S4595C2(); // tgen
};
//SIG(-1 S4595C2) C1{ BC2{ vd v1} vd}


 S4595C2 ::~S4595C2(){ note_dtor("S4595C2", this);}
S4595C2 ::S4595C2(){ note_ctor("S4595C2", this);} // tgen

static void Test_S4595C2()
{
  extern Class_Descriptor cd_S4595C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4595C2, buf);
    S4595C2 *dp, &lv = *(dp=new (buf) S4595C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4595C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4595C2)");
    check_base_class_offset(lv, (S4595C3*), 0, "S4595C2");
    test_class_info(&lv, &cd_S4595C2);
    dp->~S4595C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4595C2(Test_S4595C2, "S4595C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4595C2C1Ev();
extern void _ZN7S4595C2D1Ev();
Name_Map name_map_S4595C2[] = {
  NSPAIR(_ZN7S4595C2C1Ev),
  NSPAIR(_ZN7S4595C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4595C3;
extern VTBL_ENTRY _ZTI7S4595C3[];
extern  VTBL_ENTRY _ZTV7S4595C3[];
static Base_Class bases_S4595C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4595C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4595C2[];
extern void _ZN7S4595C2D1Ev();
extern void _ZN7S4595C2D0Ev();
extern void _ZN7S4595C32v2Ev();
static  VTBL_ENTRY vtc_S4595C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4595C2[0]),
  (VTBL_ENTRY)&_ZN7S4595C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4595C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4595C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4595C2[];
extern  VTBL_ENTRY _ZTV7S4595C2[];
Class_Descriptor cd_S4595C2 = {  "S4595C2", // class name
  bases_S4595C2, 1,
  &(vtc_S4595C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4595C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4595C2),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  S4595C1  : S4595C2 {
  char s4595c1f0;
  virtual void  v1(); // _ZN7S4595C12v1Ev
  ~S4595C1(); // tgen
  S4595C1(); // tgen
};
//SIG(1 S4595C1) C1{ BC2{ BC3{ vd v2} vd} v1 Fc}


void  S4595C1 ::v1(){vfunc_called(this, "_ZN7S4595C12v1Ev");}
S4595C1 ::~S4595C1(){ note_dtor("S4595C1", this);} // tgen
S4595C1 ::S4595C1(){ note_ctor("S4595C1", this);} // tgen

static void Test_S4595C1()
{
  extern Class_Descriptor cd_S4595C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4595C1, buf);
    S4595C1 *dp, &lv = *(dp=new (buf) S4595C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4595C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4595C1)");
    check_base_class_offset(lv, (S4595C3*)(S4595C2*), 0, "S4595C1");
    check_base_class_offset(lv, (S4595C2*), 0, "S4595C1");
    check_field_offset(lv, s4595c1f0, ABISELECT(8,4), "S4595C1.s4595c1f0");
    test_class_info(&lv, &cd_S4595C1);
    dp->~S4595C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4595C1(Test_S4595C1, "S4595C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4595C1C1Ev();
extern void _ZN7S4595C1D1Ev();
Name_Map name_map_S4595C1[] = {
  NSPAIR(_ZN7S4595C1C1Ev),
  NSPAIR(_ZN7S4595C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4595C3;
extern VTBL_ENTRY _ZTI7S4595C3[];
extern  VTBL_ENTRY _ZTV7S4595C3[];
extern Class_Descriptor cd_S4595C2;
extern VTBL_ENTRY _ZTI7S4595C2[];
extern  VTBL_ENTRY _ZTV7S4595C2[];
static Base_Class bases_S4595C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4595C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4595C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4595C1[];
extern void _ZN7S4595C1D1Ev();
extern void _ZN7S4595C1D0Ev();
extern void _ZN7S4595C32v2Ev();
extern void _ZN7S4595C12v1Ev();
static  VTBL_ENTRY vtc_S4595C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4595C1[0]),
  (VTBL_ENTRY)&_ZN7S4595C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4595C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4595C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4595C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4595C1[];
extern  VTBL_ENTRY _ZTV7S4595C1[];
Class_Descriptor cd_S4595C1 = {  "S4595C1", // class name
  bases_S4595C1, 2,
  &(vtc_S4595C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4595C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4595C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18060C1  {
  void *s18060c1f0[2];
  ::S7368C18_nt s18060c1f1;
  void  mf18060c1(); // _ZN8S18060C19mf18060c1Ev
};
//SIG(1 S18060C1) C1{ m Fp[2] FC2{ vd m Fp}}


void  S18060C1 ::mf18060c1(){}

static void Test_S18060C1()
{
  {
    init_simple_test("S18060C1");
    S18060C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18060C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18060C1)");
    check_field_offset(lv, s18060c1f0, 0, "S18060C1.s18060c1f0");
    check_field_offset(lv, s18060c1f1, ABISELECT(16,8), "S18060C1.s18060c1f1");
  }
}
static Arrange_To_Call_Me vS18060C1(Test_S18060C1, "S18060C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4609C3  {
  virtual  ~S4609C3(); // _ZN7S4609C3D1Ev
  virtual void  v2(); // _ZN7S4609C32v2Ev
  S4609C3(); // tgen
};
//SIG(-1 S4609C3) C1{ vd v1}


 S4609C3 ::~S4609C3(){ note_dtor("S4609C3", this);}
void  S4609C3 ::v2(){vfunc_called(this, "_ZN7S4609C32v2Ev");}
S4609C3 ::S4609C3(){ note_ctor("S4609C3", this);} // tgen

static void Test_S4609C3()
{
  extern Class_Descriptor cd_S4609C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4609C3, buf);
    S4609C3 *dp, &lv = *(dp=new (buf) S4609C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4609C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4609C3)");
    test_class_info(&lv, &cd_S4609C3);
    dp->~S4609C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4609C3(Test_S4609C3, "S4609C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4609C3C1Ev();
extern void _ZN7S4609C3D1Ev();
Name_Map name_map_S4609C3[] = {
  NSPAIR(_ZN7S4609C3C1Ev),
  NSPAIR(_ZN7S4609C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4609C3[];
extern void _ZN7S4609C3D1Ev();
extern void _ZN7S4609C3D0Ev();
extern void _ZN7S4609C32v2Ev();
static  VTBL_ENTRY vtc_S4609C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4609C3[0]),
  (VTBL_ENTRY)&_ZN7S4609C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4609C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4609C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4609C3[];
extern  VTBL_ENTRY _ZTV7S4609C3[];
Class_Descriptor cd_S4609C3 = {  "S4609C3", // class name
  0,0,//no base classes
  &(vtc_S4609C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4609C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4609C3),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  S4609C2  : S4609C3 {
  virtual  ~S4609C2(); // _ZN7S4609C2D1Ev
  S4609C2(); // tgen
};
//SIG(-1 S4609C2) C1{ BC2{ vd v1} vd}


 S4609C2 ::~S4609C2(){ note_dtor("S4609C2", this);}
S4609C2 ::S4609C2(){ note_ctor("S4609C2", this);} // tgen

static void Test_S4609C2()
{
  extern Class_Descriptor cd_S4609C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4609C2, buf);
    S4609C2 *dp, &lv = *(dp=new (buf) S4609C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4609C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4609C2)");
    check_base_class_offset(lv, (S4609C3*), 0, "S4609C2");
    test_class_info(&lv, &cd_S4609C2);
    dp->~S4609C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4609C2(Test_S4609C2, "S4609C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4609C2C1Ev();
extern void _ZN7S4609C2D1Ev();
Name_Map name_map_S4609C2[] = {
  NSPAIR(_ZN7S4609C2C1Ev),
  NSPAIR(_ZN7S4609C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4609C3;
extern VTBL_ENTRY _ZTI7S4609C3[];
extern  VTBL_ENTRY _ZTV7S4609C3[];
static Base_Class bases_S4609C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4609C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4609C2[];
extern void _ZN7S4609C2D1Ev();
extern void _ZN7S4609C2D0Ev();
extern void _ZN7S4609C32v2Ev();
static  VTBL_ENTRY vtc_S4609C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4609C2[0]),
  (VTBL_ENTRY)&_ZN7S4609C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4609C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4609C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4609C2[];
extern  VTBL_ENTRY _ZTV7S4609C2[];
Class_Descriptor cd_S4609C2 = {  "S4609C2", // class name
  bases_S4609C2, 1,
  &(vtc_S4609C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4609C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4609C2),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  S4609C1  : S4609C2 {
  virtual void  v1(); // _ZN7S4609C12v1Ev
  ~S4609C1(); // tgen
  S4609C1(); // tgen
};
//SIG(1 S4609C1) C1{ BC2{ BC3{ vd v2} vd} v1}


void  S4609C1 ::v1(){vfunc_called(this, "_ZN7S4609C12v1Ev");}
S4609C1 ::~S4609C1(){ note_dtor("S4609C1", this);} // tgen
S4609C1 ::S4609C1(){ note_ctor("S4609C1", this);} // tgen

static void Test_S4609C1()
{
  extern Class_Descriptor cd_S4609C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4609C1, buf);
    S4609C1 *dp, &lv = *(dp=new (buf) S4609C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4609C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4609C1)");
    check_base_class_offset(lv, (S4609C3*)(S4609C2*), 0, "S4609C1");
    check_base_class_offset(lv, (S4609C2*), 0, "S4609C1");
    test_class_info(&lv, &cd_S4609C1);
    dp->~S4609C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4609C1(Test_S4609C1, "S4609C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4609C1C1Ev();
extern void _ZN7S4609C1D1Ev();
Name_Map name_map_S4609C1[] = {
  NSPAIR(_ZN7S4609C1C1Ev),
  NSPAIR(_ZN7S4609C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4609C3;
extern VTBL_ENTRY _ZTI7S4609C3[];
extern  VTBL_ENTRY _ZTV7S4609C3[];
extern Class_Descriptor cd_S4609C2;
extern VTBL_ENTRY _ZTI7S4609C2[];
extern  VTBL_ENTRY _ZTV7S4609C2[];
static Base_Class bases_S4609C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4609C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4609C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4609C1[];
extern void _ZN7S4609C1D1Ev();
extern void _ZN7S4609C1D0Ev();
extern void _ZN7S4609C32v2Ev();
extern void _ZN7S4609C12v1Ev();
static  VTBL_ENTRY vtc_S4609C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4609C1[0]),
  (VTBL_ENTRY)&_ZN7S4609C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4609C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4609C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4609C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4609C1[];
extern  VTBL_ENTRY _ZTV7S4609C1[];
Class_Descriptor cd_S4609C1 = {  "S4609C1", // class name
  bases_S4609C1, 2,
  &(vtc_S4609C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4609C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4609C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21537C1  {
  ::S7368C8 s21537c1f0;
  void  mf21537c1(); // _ZN8S21537C19mf21537c1Ev
  virtual  ~S21537C1(); // _ZN8S21537C1D1Ev
  S21537C1(); // tgen
};
//SIG(1 S21537C1) C1{ vd m FC2{ vd m Fc}}


void  S21537C1 ::mf21537c1(){}
 S21537C1 ::~S21537C1(){ note_dtor("S21537C1", this);}
S21537C1 ::S21537C1(){ note_ctor("S21537C1", this);} // tgen

static void Test_S21537C1()
{
  extern Class_Descriptor cd_S21537C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21537C1, buf);
    S21537C1 *dp, &lv = *(dp=new (buf) S21537C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21537C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21537C1)");
    check_field_offset(lv, s21537c1f0, ABISELECT(8,4), "S21537C1.s21537c1f0");
    test_class_info(&lv, &cd_S21537C1);
    dp->~S21537C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21537C1(Test_S21537C1, "S21537C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21537C1C1Ev();
extern void _ZN8S21537C1D1Ev();
Name_Map name_map_S21537C1[] = {
  NSPAIR(_ZN8S21537C1C1Ev),
  NSPAIR(_ZN8S21537C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21537C1[];
extern void _ZN8S21537C1D1Ev();
extern void _ZN8S21537C1D0Ev();
static  VTBL_ENTRY vtc_S21537C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21537C1[0]),
  (VTBL_ENTRY)&_ZN8S21537C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21537C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21537C1[];
extern  VTBL_ENTRY _ZTV8S21537C1[];
Class_Descriptor cd_S21537C1 = {  "S21537C1", // class name
  0,0,//no base classes
  &(vtc_S21537C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21537C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21537C1),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  S10329C1  : S7891C5 , S7891C4_nt {
  virtual  ~S10329C1(); // _ZN8S10329C1D1Ev
  S10329C1(); // tgen
};
//SIG(1 S10329C1) C1{ BC2{ vd} BC3{ vd} vd}


 S10329C1 ::~S10329C1(){ note_dtor("S10329C1", this);}
S10329C1 ::S10329C1(){ note_ctor("S10329C1", this);} // tgen

static void Test_S10329C1()
{
  extern Class_Descriptor cd_S10329C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10329C1, buf);
    S10329C1 *dp, &lv = *(dp=new (buf) S10329C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10329C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10329C1)");
    check_base_class_offset(lv, (S7891C5*), 0, "S10329C1");
    check_base_class_offset(lv, (S7891C4_nt*), ABISELECT(8,4), "S10329C1");
    test_class_info(&lv, &cd_S10329C1);
    dp->~S10329C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10329C1(Test_S10329C1, "S10329C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10329C1C1Ev();
extern void _ZN8S10329C1D1Ev();
Name_Map name_map_S10329C1[] = {
  NSPAIR(_ZN8S10329C1C1Ev),
  NSPAIR(_ZN8S10329C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
extern Class_Descriptor cd_S7891C4_nt;
extern VTBL_ENTRY _ZTI10S7891C4_nt[];
extern  VTBL_ENTRY _ZTV10S7891C4_nt[];
static Base_Class bases_S10329C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7891C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7891C4_nt,    ABISELECT(8,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10329C1[];
extern void _ZN8S10329C1D1Ev();
extern void _ZN8S10329C1D0Ev();
extern void ABISELECT(_ZThn8_N8S10329C1D1Ev,_ZThn4_N8S10329C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S10329C1D0Ev,_ZThn4_N8S10329C1D0Ev)();
static  VTBL_ENTRY vtc_S10329C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10329C1[0]),
  (VTBL_ENTRY)&_ZN8S10329C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10329C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S10329C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10329C1D1Ev,_ZThn4_N8S10329C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S10329C1D0Ev,_ZThn4_N8S10329C1D0Ev),
};
extern VTBL_ENTRY _ZTI8S10329C1[];
extern  VTBL_ENTRY _ZTV8S10329C1[];
Class_Descriptor cd_S10329C1 = {  "S10329C1", // class name
  bases_S10329C1, 2,
  &(vtc_S10329C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10329C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10329C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5442C2  : S7891C5 {
  virtual  ~S5442C2(); // _ZN7S5442C2D1Ev
  S5442C2(); // tgen
};
//SIG(-1 S5442C2) C1{ BC2{ vd} vd}


 S5442C2 ::~S5442C2(){ note_dtor("S5442C2", this);}
S5442C2 ::S5442C2(){ note_ctor("S5442C2", this);} // tgen

static void Test_S5442C2()
{
  extern Class_Descriptor cd_S5442C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5442C2, buf);
    S5442C2 *dp, &lv = *(dp=new (buf) S5442C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5442C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5442C2)");
    check_base_class_offset(lv, (S7891C5*), 0, "S5442C2");
    test_class_info(&lv, &cd_S5442C2);
    dp->~S5442C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5442C2(Test_S5442C2, "S5442C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5442C2C1Ev();
extern void _ZN7S5442C2D1Ev();
Name_Map name_map_S5442C2[] = {
  NSPAIR(_ZN7S5442C2C1Ev),
  NSPAIR(_ZN7S5442C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
static Base_Class bases_S5442C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7891C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5442C2[];
extern void _ZN7S5442C2D1Ev();
extern void _ZN7S5442C2D0Ev();
static  VTBL_ENTRY vtc_S5442C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5442C2[0]),
  (VTBL_ENTRY)&_ZN7S5442C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5442C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S5442C2[];
extern  VTBL_ENTRY _ZTV7S5442C2[];
Class_Descriptor cd_S5442C2 = {  "S5442C2", // class name
  bases_S5442C2, 1,
  &(vtc_S5442C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5442C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5442C2),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  S5442C1  : S5442C2 {
  virtual  ~S5442C1(); // _ZN7S5442C1D1Ev
  S5442C1(); // tgen
};
//SIG(1 S5442C1) C1{ BC2{ BC3{ vd} vd} vd}


 S5442C1 ::~S5442C1(){ note_dtor("S5442C1", this);}
S5442C1 ::S5442C1(){ note_ctor("S5442C1", this);} // tgen

static void Test_S5442C1()
{
  extern Class_Descriptor cd_S5442C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5442C1, buf);
    S5442C1 *dp, &lv = *(dp=new (buf) S5442C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5442C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5442C1)");
    check_base_class_offset(lv, (S7891C5*)(S5442C2*), 0, "S5442C1");
    check_base_class_offset(lv, (S5442C2*), 0, "S5442C1");
    test_class_info(&lv, &cd_S5442C1);
    dp->~S5442C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5442C1(Test_S5442C1, "S5442C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5442C1C1Ev();
extern void _ZN7S5442C1D1Ev();
Name_Map name_map_S5442C1[] = {
  NSPAIR(_ZN7S5442C1C1Ev),
  NSPAIR(_ZN7S5442C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
extern Class_Descriptor cd_S5442C2;
extern VTBL_ENTRY _ZTI7S5442C2[];
extern  VTBL_ENTRY _ZTV7S5442C2[];
static Base_Class bases_S5442C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7891C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5442C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5442C1[];
extern void _ZN7S5442C1D1Ev();
extern void _ZN7S5442C1D0Ev();
static  VTBL_ENTRY vtc_S5442C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5442C1[0]),
  (VTBL_ENTRY)&_ZN7S5442C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5442C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S5442C1[];
extern  VTBL_ENTRY _ZTV7S5442C1[];
Class_Descriptor cd_S5442C1 = {  "S5442C1", // class name
  bases_S5442C1, 2,
  &(vtc_S5442C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5442C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5442C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16501C1  {
  ::S7368C18_nt s16501c1f0;
  void  mf16501c1(); // _ZN8S16501C19mf16501c1Ev
};
//SIG(1 S16501C1) C1{ m FC2{ vd m Fp}}


void  S16501C1 ::mf16501c1(){}

static void Test_S16501C1()
{
  {
    init_simple_test("S16501C1");
    S16501C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S16501C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16501C1)");
    check_field_offset(lv, s16501c1f0, 0, "S16501C1.s16501c1f0");
  }
}
static Arrange_To_Call_Me vS16501C1(Test_S16501C1, "S16501C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5443C2  : S7891C5 {
  virtual  ~S5443C2(); // _ZN7S5443C2D1Ev
  S5443C2(); // tgen
};
//SIG(-1 S5443C2) C1{ BC2{ vd} vd}


 S5443C2 ::~S5443C2(){ note_dtor("S5443C2", this);}
S5443C2 ::S5443C2(){ note_ctor("S5443C2", this);} // tgen

static void Test_S5443C2()
{
  extern Class_Descriptor cd_S5443C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5443C2, buf);
    S5443C2 *dp, &lv = *(dp=new (buf) S5443C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5443C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5443C2)");
    check_base_class_offset(lv, (S7891C5*), 0, "S5443C2");
    test_class_info(&lv, &cd_S5443C2);
    dp->~S5443C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5443C2(Test_S5443C2, "S5443C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5443C2C1Ev();
extern void _ZN7S5443C2D1Ev();
Name_Map name_map_S5443C2[] = {
  NSPAIR(_ZN7S5443C2C1Ev),
  NSPAIR(_ZN7S5443C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
static Base_Class bases_S5443C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7891C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5443C2[];
extern void _ZN7S5443C2D1Ev();
extern void _ZN7S5443C2D0Ev();
static  VTBL_ENTRY vtc_S5443C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5443C2[0]),
  (VTBL_ENTRY)&_ZN7S5443C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5443C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S5443C2[];
extern  VTBL_ENTRY _ZTV7S5443C2[];
Class_Descriptor cd_S5443C2 = {  "S5443C2", // class name
  bases_S5443C2, 1,
  &(vtc_S5443C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5443C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5443C2),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  S5443C1  : S5443C2 {
  ~S5443C1(); // tgen
  S5443C1(); // tgen
};
//SIG(1 S5443C1) C1{ BC2{ BC3{ vd} vd}}


S5443C1 ::~S5443C1(){ note_dtor("S5443C1", this);} // tgen
S5443C1 ::S5443C1(){ note_ctor("S5443C1", this);} // tgen

static void Test_S5443C1()
{
  extern Class_Descriptor cd_S5443C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5443C1, buf);
    S5443C1 *dp, &lv = *(dp=new (buf) S5443C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5443C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5443C1)");
    check_base_class_offset(lv, (S7891C5*)(S5443C2*), 0, "S5443C1");
    check_base_class_offset(lv, (S5443C2*), 0, "S5443C1");
    test_class_info(&lv, &cd_S5443C1);
    dp->~S5443C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5443C1(Test_S5443C1, "S5443C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5443C1C1Ev();
extern void _ZN7S5443C1D1Ev();
Name_Map name_map_S5443C1[] = {
  NSPAIR(_ZN7S5443C1C1Ev),
  NSPAIR(_ZN7S5443C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
extern Class_Descriptor cd_S5443C2;
extern VTBL_ENTRY _ZTI7S5443C2[];
extern  VTBL_ENTRY _ZTV7S5443C2[];
static Base_Class bases_S5443C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7891C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5443C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5443C1[];
extern void _ZN7S5443C1D1Ev();
extern void _ZN7S5443C1D0Ev();
static  VTBL_ENTRY vtc_S5443C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5443C1[0]),
  (VTBL_ENTRY)&_ZN7S5443C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5443C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S5443C1[];
extern  VTBL_ENTRY _ZTV7S5443C1[];
Class_Descriptor cd_S5443C1 = {  "S5443C1", // class name
  bases_S5443C1, 2,
  &(vtc_S5443C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5443C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5443C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12509C1  {
  int s12509c1f0;
  ::S2152C11_nt s12509c1f1;
  int s12509c1f2;
};
//SIG(1 S12509C1) C1{ Fi FC2{ FL} Fi}



static void Test_S12509C1()
{
  {
    init_simple_test("S12509C1");
    S12509C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S12509C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12509C1)");
    check_field_offset(lv, s12509c1f0, 0, "S12509C1.s12509c1f0");
    check_field_offset(lv, s12509c1f1, ABISELECT(8,4), "S12509C1.s12509c1f1");
    check_field_offset(lv, s12509c1f2, ABISELECT(16,12), "S12509C1.s12509c1f2");
  }
}
static Arrange_To_Call_Me vS12509C1(Test_S12509C1, "S12509C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15594C1  {
  ::S2152C11_nt s15594c1f0;
  ::S2152C11_nt s15594c1f1;
  void  mf15594c1(); // _ZN8S15594C19mf15594c1Ev
};
//SIG(1 S15594C1) C1{ m FC2{ FL} FC2}


void  S15594C1 ::mf15594c1(){}

static void Test_S15594C1()
{
  {
    init_simple_test("S15594C1");
    S15594C1 lv;
    check2(sizeof(lv), 16, "sizeof(S15594C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15594C1)");
    check_field_offset(lv, s15594c1f0, 0, "S15594C1.s15594c1f0");
    check_field_offset(lv, s15594c1f1, 8, "S15594C1.s15594c1f1");
  }
}
static Arrange_To_Call_Me vS15594C1(Test_S15594C1, "S15594C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11095C2  : S7891C5 {
  ~S11095C2(); // tgen
  S11095C2(); // tgen
};
//SIG(-1 S11095C2) C1{ BC2{ vd}}


S11095C2 ::~S11095C2(){ note_dtor("S11095C2", this);} // tgen
S11095C2 ::S11095C2(){ note_ctor("S11095C2", this);} // tgen

static void Test_S11095C2()
{
  extern Class_Descriptor cd_S11095C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S11095C2, buf);
    S11095C2 *dp, &lv = *(dp=new (buf) S11095C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S11095C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11095C2)");
    check_base_class_offset(lv, (S7891C5*), 0, "S11095C2");
    test_class_info(&lv, &cd_S11095C2);
    dp->~S11095C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS11095C2(Test_S11095C2, "S11095C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S11095C2C1Ev();
extern void _ZN8S11095C2D1Ev();
Name_Map name_map_S11095C2[] = {
  NSPAIR(_ZN8S11095C2C1Ev),
  NSPAIR(_ZN8S11095C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7891C5;
extern VTBL_ENTRY _ZTI7S7891C5[];
extern  VTBL_ENTRY _ZTV7S7891C5[];
static Base_Class bases_S11095C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7891C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S11095C2[];
extern void _ZN8S11095C2D1Ev();
extern void _ZN8S11095C2D0Ev();
static  VTBL_ENTRY vtc_S11095C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S11095C2[0]),
  (VTBL_ENTRY)&_ZN8S11095C2D1Ev,
  (VTBL_ENTRY)&_ZN8S11095C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S11095C2[];
extern  VTBL_ENTRY _ZTV8S11095C2[];
Class_Descriptor cd_S11095C2 = {  "S11095C2", // class name
  bases_S11095C2, 1,
  &(vtc_S11095C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S11095C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S11095C2),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  S11095C1  {
  ::S11095C2 s11095c1f0;
};
//SIG(1 S11095C1) C1{ FC2{ BC3{ vd}}}



static void Test_S11095C1()
{
  {
    init_simple_test("S11095C1");
    S11095C1 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S11095C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11095C1)");
    check_field_offset(lv, s11095c1f0, 0, "S11095C1.s11095c1f0");
  }
}
static Arrange_To_Call_Me vS11095C1(Test_S11095C1, "S11095C1", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10913C1  {
  char s10913c1f0[4];
  int s10913c1f1[7];
};
//SIG(1 S10913C1) C1{ Fc[4] Fi[7]}



static void Test_S10913C1()
{
  {
    init_simple_test("S10913C1");
    S10913C1 lv;
    check2(sizeof(lv), 32, "sizeof(S10913C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10913C1)");
    check_field_offset(lv, s10913c1f0, 0, "S10913C1.s10913c1f0");
    check_field_offset(lv, s10913c1f1, 4, "S10913C1.s10913c1f1");
  }
}
static Arrange_To_Call_Me vS10913C1(Test_S10913C1, "S10913C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14560C1  {
  void *s14560c1f0[2];
  __tsi64 s14560c1f1;
  void *s14560c1f2;
};
//SIG(1 S14560C1) C1{ Fp[2] FL Fp}



static void Test_S14560C1()
{
  {
    init_simple_test("S14560C1");
    S14560C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S14560C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14560C1)");
    check_field_offset(lv, s14560c1f0, 0, "S14560C1.s14560c1f0");
    check_field_offset(lv, s14560c1f1, ABISELECT(16,8), "S14560C1.s14560c1f1");
    check_field_offset(lv, s14560c1f2, ABISELECT(24,16), "S14560C1.s14560c1f2");
  }
}
static Arrange_To_Call_Me vS14560C1(Test_S14560C1, "S14560C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17375C1  {
  __tsi64 s17375c1f0;
  void *s17375c1f1;
  int s17375c1f2;
  void  mf17375c1(); // _ZN8S17375C19mf17375c1Ev
};
//SIG(1 S17375C1) C1{ m FL Fp Fi}


void  S17375C1 ::mf17375c1(){}

static void Test_S17375C1()
{
  {
    init_simple_test("S17375C1");
    S17375C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S17375C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17375C1)");
    check_field_offset(lv, s17375c1f0, 0, "S17375C1.s17375c1f0");
    check_field_offset(lv, s17375c1f1, 8, "S17375C1.s17375c1f1");
    check_field_offset(lv, s17375c1f2, ABISELECT(16,12), "S17375C1.s17375c1f2");
  }
}
static Arrange_To_Call_Me vS17375C1(Test_S17375C1, "S17375C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12734C1  {
  int s12734c1f0;
  void *s12734c1f1[11];
};
//SIG(1 S12734C1) C1{ Fi Fp[11]}



static void Test_S12734C1()
{
  {
    init_simple_test("S12734C1");
    S12734C1 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S12734C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12734C1)");
    check_field_offset(lv, s12734c1f0, 0, "S12734C1.s12734c1f0");
    check_field_offset(lv, s12734c1f1, ABISELECT(8,4), "S12734C1.s12734c1f1");
  }
}
static Arrange_To_Call_Me vS12734C1(Test_S12734C1, "S12734C1", ABISELECT(96,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13855C1  {
  __tsi64 s13855c1f0;
  void *s13855c1f1[3];
};
//SIG(1 S13855C1) C1{ FL Fp[3]}



static void Test_S13855C1()
{
  {
    init_simple_test("S13855C1");
    S13855C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13855C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13855C1)");
    check_field_offset(lv, s13855c1f0, 0, "S13855C1.s13855c1f0");
    check_field_offset(lv, s13855c1f1, 8, "S13855C1.s13855c1f1");
  }
}
static Arrange_To_Call_Me vS13855C1(Test_S13855C1, "S13855C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13649C1  {
  long s13649c1f0;
  char s13649c1f1[2];
};
//SIG(1 S13649C1) C1{ Fl Fc[2]}



static void Test_S13649C1()
{
  {
    init_simple_test("S13649C1");
    S13649C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S13649C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13649C1)");
    check_field_offset(lv, s13649c1f0, 0, "S13649C1.s13649c1f0");
    check_field_offset(lv, s13649c1f1, ABISELECT(8,4), "S13649C1.s13649c1f1");
  }
}
static Arrange_To_Call_Me vS13649C1(Test_S13649C1, "S13649C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17429C1  {
  long s17429c1f0[7];
  void  mf17429c1(); // _ZN8S17429C19mf17429c1Ev
};
//SIG(1 S17429C1) C1{ m Fl[7]}


void  S17429C1 ::mf17429c1(){}

static void Test_S17429C1()
{
  {
    init_simple_test("S17429C1");
    S17429C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S17429C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17429C1)");
    check_field_offset(lv, s17429c1f0, 0, "S17429C1.s17429c1f0");
  }
}
static Arrange_To_Call_Me vS17429C1(Test_S17429C1, "S17429C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

