library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:13:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ExtendsT1 extends F {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:15:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT2 extends F<dynamic> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:17:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT3 extends F<Class> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:19:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT4 extends F<Class<dynamic>> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:25:25: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT7 extends F<Object> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:27:25: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsT8 extends F<int> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:29:25: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ExtendsS1 extends G {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:31:25: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS2 extends G<dynamic> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:33:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS3 extends G<Class> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:35:25: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS4 extends G<Class<dynamic>> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:41:25: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS7 extends G<Object> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:43:25: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ExtendsS8 extends G<int> {} // Error
//                         ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:45:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ImplementsT1 implements F {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:47:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT2 implements F<dynamic> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:49:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT3 implements F<Class> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:51:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT4 implements F<Class<dynamic>> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:57:31: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT7 implements F<Object> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:59:31: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsT8 implements F<int> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:61:31: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class ImplementsS1 implements G {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:63:31: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS2 implements G<dynamic> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:65:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS3 implements G<Class> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:67:31: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS4 implements G<Class<dynamic>> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:73:31: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS7 implements G<Object> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:75:31: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class ImplementsS8 implements G<int> {} // Error
//                               ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:77:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class WithT1 with F {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:79:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT2 with F<dynamic> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:81:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT3 with F<Class> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:83:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT4 with F<Class<dynamic>> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:89:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT7 with F<Object> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:91:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithT8 with F<int> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:109:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumImplementsT1 implements F /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:111:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT2 implements F<dynamic> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:113:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT3 implements F<Class> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:115:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT4 implements F<Class<dynamic>> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:121:34: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT7 implements F<Object> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:123:34: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsT8 implements F<int> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:125:34: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumImplementsS1 implements G /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:127:34: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS2 implements G<dynamic> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:129:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS3 implements G<Class> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:131:34: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS4 implements G<Class<dynamic>> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:137:34: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS7 implements G<Object> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:139:34: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumImplementsS8 implements G<int> /* Error */ { a }
//                                  ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:141:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumWithT1 with F /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:143:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT2 with F<dynamic> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:145:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT3 with F<Class> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:147:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT4 with F<Class<dynamic>> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:153:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT7 with F<Object> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:155:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithT8 with F<int> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:173:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// mixin MixinOnT1 on F {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:175:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT2 on F<dynamic> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:177:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT3 on F<Class> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:179:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT4 on F<Class<dynamic>> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:185:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT7 on F<Object> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:187:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnT8 on F<int> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:189:20: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// mixin MixinOnS1 on G {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:191:20: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS2 on G<dynamic> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:193:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS3 on G<Class> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:195:20: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS4 on G<Class<dynamic>> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:201:20: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS7 on G<Object> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:203:20: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// mixin MixinOnS8 on G<int> {} // Error
//                    ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:217:28: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnT7 on F<Object> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:219:28: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'F'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnT8 on F<int> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
// typedef F<X extends Class<X>> = Class<X>;
//           ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:233:28: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnS7 on G<Object> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:235:28: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// extension ExtensionOnS8 on G<int> {} // Error
//                            ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:93:19: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// class WithS1 with G {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:95:19: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS2 with G<dynamic> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:97:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS3 with G<Class> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:99:19: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS4 with G<Class<dynamic>> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:105:19: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS7 with G<Object> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:107:19: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// class WithS8 with G<int> {} // Error
//                   ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:157:22: Error: Inferred type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// enum EnumWithS1 with G /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:159:22: Error: Type argument 'dynamic' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS2 with G<dynamic> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:161:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS3 with G<Class> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:163:22: Error: Type argument 'Class<dynamic>' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS4 with G<Class<dynamic>> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:169:22: Error: Type argument 'Object' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Object' is from 'dart:core'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS7 with G<Object> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
// pkg/front_end/testcases/general/bounds_supertypes.dart:171:22: Error: Type argument 'int' doesn't conform to the bound 'Class<X>' of the type variable 'X' on 'G'.
//  - 'Class' is from 'pkg/front_end/testcases/general/bounds_supertypes.dart'.
// Try changing type arguments so that they conform to the bounds.
// enum EnumWithS8 with G<int> /* Error */ { a }
//                      ^
// pkg/front_end/testcases/general/bounds_supertypes.dart:11:9: Context: This is the type variable whose bound isn't conformed to.
// class G<X extends Class<X>> {}
//         ^
//
import self as self;
import "dart:core" as core;

typedef F<X extends self::Class<X> = self::Class<dynamic>> = self::Class<X>;
class Class<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Class<self::Class::T%>
    : super core::Object::•()
    ;
}
class ConcreteClass extends core::Object implements self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ConcreteClass
    : super core::Object::•()
    ;
}
class G<X extends self::Class<self::G::X> = self::Class<dynamic>> extends core::Object {
  synthetic constructor •() → self::G<self::G::X>
    : super core::Object::•()
    ;
}
class ExtendsT1 extends self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsT1
    : super self::Class::•()
    ;
}
class ExtendsT2 extends self::Class<dynamic> {
  synthetic constructor •() → self::ExtendsT2
    : super self::Class::•()
    ;
}
class ExtendsT3 extends self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsT3
    : super self::Class::•()
    ;
}
class ExtendsT4 extends self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsT4
    : super self::Class::•()
    ;
}
class ExtendsT5 extends self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ExtendsT5
    : super self::Class::•()
    ;
}
class ExtendsT6 extends self::Class<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ExtendsT6
    : super self::Class::•()
    ;
}
class ExtendsT7 extends self::Class<core::Object> {
  synthetic constructor •() → self::ExtendsT7
    : super self::Class::•()
    ;
}
class ExtendsT8 extends self::Class<core::int> {
  synthetic constructor •() → self::ExtendsT8
    : super self::Class::•()
    ;
}
class ExtendsS1 extends self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsS1
    : super self::G::•()
    ;
}
class ExtendsS2 extends self::G<dynamic> {
  synthetic constructor •() → self::ExtendsS2
    : super self::G::•()
    ;
}
class ExtendsS3 extends self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsS3
    : super self::G::•()
    ;
}
class ExtendsS4 extends self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ExtendsS4
    : super self::G::•()
    ;
}
class ExtendsS5 extends self::G<self::ConcreteClass> {
  synthetic constructor •() → self::ExtendsS5
    : super self::G::•()
    ;
}
class ExtendsS6 extends self::G<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ExtendsS6
    : super self::G::•()
    ;
}
class ExtendsS7 extends self::G<core::Object> {
  synthetic constructor •() → self::ExtendsS7
    : super self::G::•()
    ;
}
class ExtendsS8 extends self::G<core::int> {
  synthetic constructor •() → self::ExtendsS8
    : super self::G::•()
    ;
}
class ImplementsT1 extends core::Object implements self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsT1
    : super core::Object::•()
    ;
}
class ImplementsT2 extends core::Object implements self::Class<dynamic> {
  synthetic constructor •() → self::ImplementsT2
    : super core::Object::•()
    ;
}
class ImplementsT3 extends core::Object implements self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsT3
    : super core::Object::•()
    ;
}
class ImplementsT4 extends core::Object implements self::Class<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsT4
    : super core::Object::•()
    ;
}
class ImplementsT5 extends core::Object implements self::Class<self::ConcreteClass> {
  synthetic constructor •() → self::ImplementsT5
    : super core::Object::•()
    ;
}
class ImplementsT6 extends core::Object implements self::Class<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ImplementsT6
    : super core::Object::•()
    ;
}
class ImplementsT7 extends core::Object implements self::Class<core::Object> {
  synthetic constructor •() → self::ImplementsT7
    : super core::Object::•()
    ;
}
class ImplementsT8 extends core::Object implements self::Class<core::int> {
  synthetic constructor •() → self::ImplementsT8
    : super core::Object::•()
    ;
}
class ImplementsS1 extends core::Object implements self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsS1
    : super core::Object::•()
    ;
}
class ImplementsS2 extends core::Object implements self::G<dynamic> {
  synthetic constructor •() → self::ImplementsS2
    : super core::Object::•()
    ;
}
class ImplementsS3 extends core::Object implements self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsS3
    : super core::Object::•()
    ;
}
class ImplementsS4 extends core::Object implements self::G<self::Class<dynamic>> {
  synthetic constructor •() → self::ImplementsS4
    : super core::Object::•()
    ;
}
class ImplementsS5 extends core::Object implements self::G<self::ConcreteClass> {
  synthetic constructor •() → self::ImplementsS5
    : super core::Object::•()
    ;
}
class ImplementsS6 extends core::Object implements self::G<self::Class<self::ConcreteClass>> {
  synthetic constructor •() → self::ImplementsS6
    : super core::Object::•()
    ;
}
class ImplementsS7 extends core::Object implements self::G<core::Object> {
  synthetic constructor •() → self::ImplementsS7
    : super core::Object::•()
    ;
}
class ImplementsS8 extends core::Object implements self::G<core::int> {
  synthetic constructor •() → self::ImplementsS8
    : super core::Object::•()
    ;
}
abstract class _WithT1&Object&F extends core::Object implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT1&Object&F
    : super core::Object::•()
    ;
}
class WithT1 extends self::_WithT1&Object&F {
  synthetic constructor •() → self::WithT1
    : super self::_WithT1&Object&F::•()
    ;
}
abstract class _WithT2&Object&F extends core::Object implements self::Class<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT2&Object&F
    : super core::Object::•()
    ;
}
class WithT2 extends self::_WithT2&Object&F {
  synthetic constructor •() → self::WithT2
    : super self::_WithT2&Object&F::•()
    ;
}
abstract class _WithT3&Object&F extends core::Object implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT3&Object&F
    : super core::Object::•()
    ;
}
class WithT3 extends self::_WithT3&Object&F {
  synthetic constructor •() → self::WithT3
    : super self::_WithT3&Object&F::•()
    ;
}
abstract class _WithT4&Object&F extends core::Object implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT4&Object&F
    : super core::Object::•()
    ;
}
class WithT4 extends self::_WithT4&Object&F {
  synthetic constructor •() → self::WithT4
    : super self::_WithT4&Object&F::•()
    ;
}
abstract class _WithT5&Object&F extends core::Object implements self::Class<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT5&Object&F
    : super core::Object::•()
    ;
}
class WithT5 extends self::_WithT5&Object&F {
  synthetic constructor •() → self::WithT5
    : super self::_WithT5&Object&F::•()
    ;
}
abstract class _WithT6&Object&F extends core::Object implements self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT6&Object&F
    : super core::Object::•()
    ;
}
class WithT6 extends self::_WithT6&Object&F {
  synthetic constructor •() → self::WithT6
    : super self::_WithT6&Object&F::•()
    ;
}
abstract class _WithT7&Object&F extends core::Object implements self::Class<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT7&Object&F
    : super core::Object::•()
    ;
}
class WithT7 extends self::_WithT7&Object&F {
  synthetic constructor •() → self::WithT7
    : super self::_WithT7&Object&F::•()
    ;
}
abstract class _WithT8&Object&F extends core::Object implements self::Class<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithT8&Object&F
    : super core::Object::•()
    ;
}
class WithT8 extends self::_WithT8&Object&F {
  synthetic constructor •() → self::WithT8
    : super self::_WithT8&Object&F::•()
    ;
}
abstract class _WithS1&Object&G extends core::Object implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS1&Object&G
    : super core::Object::•()
    ;
}
class WithS1 extends self::_WithS1&Object&G {
  synthetic constructor •() → self::WithS1
    : super self::_WithS1&Object&G::•()
    ;
}
abstract class _WithS2&Object&G extends core::Object implements self::G<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS2&Object&G
    : super core::Object::•()
    ;
}
class WithS2 extends self::_WithS2&Object&G {
  synthetic constructor •() → self::WithS2
    : super self::_WithS2&Object&G::•()
    ;
}
abstract class _WithS3&Object&G extends core::Object implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS3&Object&G
    : super core::Object::•()
    ;
}
class WithS3 extends self::_WithS3&Object&G {
  synthetic constructor •() → self::WithS3
    : super self::_WithS3&Object&G::•()
    ;
}
abstract class _WithS4&Object&G extends core::Object implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS4&Object&G
    : super core::Object::•()
    ;
}
class WithS4 extends self::_WithS4&Object&G {
  synthetic constructor •() → self::WithS4
    : super self::_WithS4&Object&G::•()
    ;
}
abstract class _WithS5&Object&G extends core::Object implements self::G<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS5&Object&G
    : super core::Object::•()
    ;
}
class WithS5 extends self::_WithS5&Object&G {
  synthetic constructor •() → self::WithS5
    : super self::_WithS5&Object&G::•()
    ;
}
abstract class _WithS6&Object&G extends core::Object implements self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS6&Object&G
    : super core::Object::•()
    ;
}
class WithS6 extends self::_WithS6&Object&G {
  synthetic constructor •() → self::WithS6
    : super self::_WithS6&Object&G::•()
    ;
}
abstract class _WithS7&Object&G extends core::Object implements self::G<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS7&Object&G
    : super core::Object::•()
    ;
}
class WithS7 extends self::_WithS7&Object&G {
  synthetic constructor •() → self::WithS7
    : super self::_WithS7&Object&G::•()
    ;
}
abstract class _WithS8&Object&G extends core::Object implements self::G<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_WithS8&Object&G
    : super core::Object::•()
    ;
}
class WithS8 extends self::_WithS8&Object&G {
  synthetic constructor •() → self::WithS8
    : super self::_WithS8&Object&G::•()
    ;
}
class EnumImplementsT1 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT1> values = #C4;
  static const field self::EnumImplementsT1 a = #C3;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT1
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT1.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT2 extends core::_Enum implements self::Class<dynamic> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT2> values = #C6;
  static const field self::EnumImplementsT2 a = #C5;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT2
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT2.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT3 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT3> values = #C8;
  static const field self::EnumImplementsT3 a = #C7;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT3
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT3.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT4 extends core::_Enum implements self::Class<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT4> values = #C10;
  static const field self::EnumImplementsT4 a = #C9;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT4
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT4.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT5 extends core::_Enum implements self::Class<self::ConcreteClass> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT5> values = #C12;
  static const field self::EnumImplementsT5 a = #C11;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT5
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT5.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT6 extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT6> values = #C14;
  static const field self::EnumImplementsT6 a = #C13;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT6
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT6.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT7 extends core::_Enum implements self::Class<core::Object> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT7> values = #C16;
  static const field self::EnumImplementsT7 a = #C15;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT7
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT7.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsT8 extends core::_Enum implements self::Class<core::int> /*isEnum*/  {
  static const field core::List<self::EnumImplementsT8> values = #C18;
  static const field self::EnumImplementsT8 a = #C17;
  const constructor •(core::int index, core::String name) → self::EnumImplementsT8
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsT8.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS1 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS1> values = #C20;
  static const field self::EnumImplementsS1 a = #C19;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS1
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS1.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS2 extends core::_Enum implements self::G<dynamic> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS2> values = #C22;
  static const field self::EnumImplementsS2 a = #C21;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS2
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS2.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS3 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS3> values = #C24;
  static const field self::EnumImplementsS3 a = #C23;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS3
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS3.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS4 extends core::_Enum implements self::G<self::Class<dynamic>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS4> values = #C26;
  static const field self::EnumImplementsS4 a = #C25;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS4
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS4.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS5 extends core::_Enum implements self::G<self::ConcreteClass> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS5> values = #C28;
  static const field self::EnumImplementsS5 a = #C27;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS5
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS5.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS6 extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS6> values = #C30;
  static const field self::EnumImplementsS6 a = #C29;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS6
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS6.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS7 extends core::_Enum implements self::G<core::Object> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS7> values = #C32;
  static const field self::EnumImplementsS7 a = #C31;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS7
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS7.${this.{core::_Enum::_name}{core::String}}";
}
class EnumImplementsS8 extends core::_Enum implements self::G<core::int> /*isEnum*/  {
  static const field core::List<self::EnumImplementsS8> values = #C34;
  static const field self::EnumImplementsS8 a = #C33;
  const constructor •(core::int index, core::String name) → self::EnumImplementsS8
    : super core::_Enum::•(index, name)
    ;
  method toString() → core::String
    return "EnumImplementsS8.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT1&_Enum&F extends core::_Enum implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT1&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT1 extends self::_EnumWithT1&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT1> values = #C36;
  static const field self::EnumWithT1 a = #C35;
  const constructor •(core::int index, core::String name) → self::EnumWithT1
    : super self::_EnumWithT1&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT1.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT2&_Enum&F extends core::_Enum implements self::Class<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT2&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT2 extends self::_EnumWithT2&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT2> values = #C38;
  static const field self::EnumWithT2 a = #C37;
  const constructor •(core::int index, core::String name) → self::EnumWithT2
    : super self::_EnumWithT2&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT2.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT3&_Enum&F extends core::_Enum implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT3&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT3 extends self::_EnumWithT3&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT3> values = #C40;
  static const field self::EnumWithT3 a = #C39;
  const constructor •(core::int index, core::String name) → self::EnumWithT3
    : super self::_EnumWithT3&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT3.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT4&_Enum&F extends core::_Enum implements self::Class<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT4&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT4 extends self::_EnumWithT4&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT4> values = #C42;
  static const field self::EnumWithT4 a = #C41;
  const constructor •(core::int index, core::String name) → self::EnumWithT4
    : super self::_EnumWithT4&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT4.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT5&_Enum&F extends core::_Enum implements self::Class<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT5&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT5 extends self::_EnumWithT5&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT5> values = #C44;
  static const field self::EnumWithT5 a = #C43;
  const constructor •(core::int index, core::String name) → self::EnumWithT5
    : super self::_EnumWithT5&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT5.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT6&_Enum&F extends core::_Enum implements self::Class<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT6&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT6 extends self::_EnumWithT6&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT6> values = #C46;
  static const field self::EnumWithT6 a = #C45;
  const constructor •(core::int index, core::String name) → self::EnumWithT6
    : super self::_EnumWithT6&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT6.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT7&_Enum&F extends core::_Enum implements self::Class<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT7&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT7 extends self::_EnumWithT7&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT7> values = #C48;
  static const field self::EnumWithT7 a = #C47;
  const constructor •(core::int index, core::String name) → self::EnumWithT7
    : super self::_EnumWithT7&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT7.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithT8&_Enum&F extends core::_Enum implements self::Class<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithT8&_Enum&F
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithT8 extends self::_EnumWithT8&_Enum&F /*isEnum*/  {
  static const field core::List<self::EnumWithT8> values = #C50;
  static const field self::EnumWithT8 a = #C49;
  const constructor •(core::int index, core::String name) → self::EnumWithT8
    : super self::_EnumWithT8&_Enum&F::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithT8.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS1&_Enum&G extends core::_Enum implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS1&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS1 extends self::_EnumWithS1&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS1> values = #C52;
  static const field self::EnumWithS1 a = #C51;
  const constructor •(core::int index, core::String name) → self::EnumWithS1
    : super self::_EnumWithS1&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS1.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS2&_Enum&G extends core::_Enum implements self::G<dynamic> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS2&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS2 extends self::_EnumWithS2&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS2> values = #C54;
  static const field self::EnumWithS2 a = #C53;
  const constructor •(core::int index, core::String name) → self::EnumWithS2
    : super self::_EnumWithS2&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS2.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS3&_Enum&G extends core::_Enum implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS3&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS3 extends self::_EnumWithS3&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS3> values = #C56;
  static const field self::EnumWithS3 a = #C55;
  const constructor •(core::int index, core::String name) → self::EnumWithS3
    : super self::_EnumWithS3&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS3.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS4&_Enum&G extends core::_Enum implements self::G<self::Class<dynamic>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS4&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS4 extends self::_EnumWithS4&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS4> values = #C58;
  static const field self::EnumWithS4 a = #C57;
  const constructor •(core::int index, core::String name) → self::EnumWithS4
    : super self::_EnumWithS4&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS4.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS5&_Enum&G extends core::_Enum implements self::G<self::ConcreteClass> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS5&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS5 extends self::_EnumWithS5&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS5> values = #C60;
  static const field self::EnumWithS5 a = #C59;
  const constructor •(core::int index, core::String name) → self::EnumWithS5
    : super self::_EnumWithS5&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS5.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS6&_Enum&G extends core::_Enum implements self::G<self::Class<self::ConcreteClass>> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS6&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS6 extends self::_EnumWithS6&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS6> values = #C62;
  static const field self::EnumWithS6 a = #C61;
  const constructor •(core::int index, core::String name) → self::EnumWithS6
    : super self::_EnumWithS6&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS6.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS7&_Enum&G extends core::_Enum implements self::G<core::Object> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS7&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS7 extends self::_EnumWithS7&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS7> values = #C64;
  static const field self::EnumWithS7 a = #C63;
  const constructor •(core::int index, core::String name) → self::EnumWithS7
    : super self::_EnumWithS7&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS7.${this.{core::_Enum::_name}{core::String}}";
}
abstract class _EnumWithS8&_Enum&G extends core::_Enum implements self::G<core::int> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •(core::int index, core::String _name) → self::_EnumWithS8&_Enum&G
    : super core::_Enum::•(index, _name)
    ;
}
class EnumWithS8 extends self::_EnumWithS8&_Enum&G /*isEnum*/  {
  static const field core::List<self::EnumWithS8> values = #C66;
  static const field self::EnumWithS8 a = #C65;
  const constructor •(core::int index, core::String name) → self::EnumWithS8
    : super self::_EnumWithS8&_Enum&G::•(index, name)
    ;
  method toString() → core::String
    return "EnumWithS8.${this.{core::_Enum::_name}{core::String}}";
}
abstract class MixinOnT1 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT2 extends self::Class<dynamic> /*isMixinDeclaration*/  {
}
abstract class MixinOnT3 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT4 extends self::Class<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT5 extends self::Class<self::ConcreteClass> /*isMixinDeclaration*/  {
}
abstract class MixinOnT6 extends self::Class<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
}
abstract class MixinOnT7 extends self::Class<core::Object> /*isMixinDeclaration*/  {
}
abstract class MixinOnT8 extends self::Class<core::int> /*isMixinDeclaration*/  {
}
abstract class MixinOnS1 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS2 extends self::G<dynamic> /*isMixinDeclaration*/  {
}
abstract class MixinOnS3 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS4 extends self::G<self::Class<dynamic>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS5 extends self::G<self::ConcreteClass> /*isMixinDeclaration*/  {
}
abstract class MixinOnS6 extends self::G<self::Class<self::ConcreteClass>> /*isMixinDeclaration*/  {
}
abstract class MixinOnS7 extends self::G<core::Object> /*isMixinDeclaration*/  {
}
abstract class MixinOnS8 extends self::G<core::int> /*isMixinDeclaration*/  {
}
extension ExtensionOnT1 on self::Class<self::Class<dynamic>> {
}
extension ExtensionOnT2 on self::Class<dynamic> {
}
extension ExtensionOnT3 on self::Class<self::Class<dynamic>> {
}
extension ExtensionOnT4 on self::Class<self::Class<dynamic>> {
}
extension ExtensionOnT5 on self::Class<self::ConcreteClass> {
}
extension ExtensionOnT6 on self::Class<self::Class<self::ConcreteClass>> {
}
extension ExtensionOnT7 on self::Class<core::Object> {
}
extension ExtensionOnT8 on self::Class<core::int> {
}
extension ExtensionOnS1 on self::G<self::Class<dynamic>> {
}
extension ExtensionOnS2 on self::G<dynamic> {
}
extension ExtensionOnS3 on self::G<self::Class<dynamic>> {
}
extension ExtensionOnS4 on self::G<self::Class<dynamic>> {
}
extension ExtensionOnS5 on self::G<self::ConcreteClass> {
}
extension ExtensionOnS6 on self::G<self::Class<self::ConcreteClass>> {
}
extension ExtensionOnS7 on self::G<core::Object> {
}
extension ExtensionOnS8 on self::G<core::int> {
}
static method main() → dynamic {}
static method _#F#new#tearOff<X extends self::Class<self::_#F#new#tearOff::X> = self::Class<dynamic>>() → self::Class<self::_#F#new#tearOff::X>
  return new self::Class::•<self::_#F#new#tearOff::X>();

constants  {
  #C1 = 0
  #C2 = "a"
  #C3 = self::EnumImplementsT1 {index:#C1, _name:#C2}
  #C4 = <self::EnumImplementsT1*>[#C3]
  #C5 = self::EnumImplementsT2 {index:#C1, _name:#C2}
  #C6 = <self::EnumImplementsT2*>[#C5]
  #C7 = self::EnumImplementsT3 {index:#C1, _name:#C2}
  #C8 = <self::EnumImplementsT3*>[#C7]
  #C9 = self::EnumImplementsT4 {index:#C1, _name:#C2}
  #C10 = <self::EnumImplementsT4*>[#C9]
  #C11 = self::EnumImplementsT5 {index:#C1, _name:#C2}
  #C12 = <self::EnumImplementsT5*>[#C11]
  #C13 = self::EnumImplementsT6 {index:#C1, _name:#C2}
  #C14 = <self::EnumImplementsT6*>[#C13]
  #C15 = self::EnumImplementsT7 {index:#C1, _name:#C2}
  #C16 = <self::EnumImplementsT7*>[#C15]
  #C17 = self::EnumImplementsT8 {index:#C1, _name:#C2}
  #C18 = <self::EnumImplementsT8*>[#C17]
  #C19 = self::EnumImplementsS1 {index:#C1, _name:#C2}
  #C20 = <self::EnumImplementsS1*>[#C19]
  #C21 = self::EnumImplementsS2 {index:#C1, _name:#C2}
  #C22 = <self::EnumImplementsS2*>[#C21]
  #C23 = self::EnumImplementsS3 {index:#C1, _name:#C2}
  #C24 = <self::EnumImplementsS3*>[#C23]
  #C25 = self::EnumImplementsS4 {index:#C1, _name:#C2}
  #C26 = <self::EnumImplementsS4*>[#C25]
  #C27 = self::EnumImplementsS5 {index:#C1, _name:#C2}
  #C28 = <self::EnumImplementsS5*>[#C27]
  #C29 = self::EnumImplementsS6 {index:#C1, _name:#C2}
  #C30 = <self::EnumImplementsS6*>[#C29]
  #C31 = self::EnumImplementsS7 {index:#C1, _name:#C2}
  #C32 = <self::EnumImplementsS7*>[#C31]
  #C33 = self::EnumImplementsS8 {index:#C1, _name:#C2}
  #C34 = <self::EnumImplementsS8*>[#C33]
  #C35 = self::EnumWithT1 {index:#C1, _name:#C2}
  #C36 = <self::EnumWithT1*>[#C35]
  #C37 = self::EnumWithT2 {index:#C1, _name:#C2}
  #C38 = <self::EnumWithT2*>[#C37]
  #C39 = self::EnumWithT3 {index:#C1, _name:#C2}
  #C40 = <self::EnumWithT3*>[#C39]
  #C41 = self::EnumWithT4 {index:#C1, _name:#C2}
  #C42 = <self::EnumWithT4*>[#C41]
  #C43 = self::EnumWithT5 {index:#C1, _name:#C2}
  #C44 = <self::EnumWithT5*>[#C43]
  #C45 = self::EnumWithT6 {index:#C1, _name:#C2}
  #C46 = <self::EnumWithT6*>[#C45]
  #C47 = self::EnumWithT7 {index:#C1, _name:#C2}
  #C48 = <self::EnumWithT7*>[#C47]
  #C49 = self::EnumWithT8 {index:#C1, _name:#C2}
  #C50 = <self::EnumWithT8*>[#C49]
  #C51 = self::EnumWithS1 {index:#C1, _name:#C2}
  #C52 = <self::EnumWithS1*>[#C51]
  #C53 = self::EnumWithS2 {index:#C1, _name:#C2}
  #C54 = <self::EnumWithS2*>[#C53]
  #C55 = self::EnumWithS3 {index:#C1, _name:#C2}
  #C56 = <self::EnumWithS3*>[#C55]
  #C57 = self::EnumWithS4 {index:#C1, _name:#C2}
  #C58 = <self::EnumWithS4*>[#C57]
  #C59 = self::EnumWithS5 {index:#C1, _name:#C2}
  #C60 = <self::EnumWithS5*>[#C59]
  #C61 = self::EnumWithS6 {index:#C1, _name:#C2}
  #C62 = <self::EnumWithS6*>[#C61]
  #C63 = self::EnumWithS7 {index:#C1, _name:#C2}
  #C64 = <self::EnumWithS7*>[#C63]
  #C65 = self::EnumWithS8 {index:#C1, _name:#C2}
  #C66 = <self::EnumWithS8*>[#C65]
}


Constructor coverage from constants:
org-dartlang-testcase:///bounds_supertypes.dart:
- EnumImplementsT1. (from org-dartlang-testcase:///bounds_supertypes.dart:109:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- EnumImplementsT2. (from org-dartlang-testcase:///bounds_supertypes.dart:111:6)
- EnumImplementsT3. (from org-dartlang-testcase:///bounds_supertypes.dart:113:6)
- EnumImplementsT4. (from org-dartlang-testcase:///bounds_supertypes.dart:115:6)
- EnumImplementsT5. (from org-dartlang-testcase:///bounds_supertypes.dart:117:6)
- EnumImplementsT6. (from org-dartlang-testcase:///bounds_supertypes.dart:119:6)
- EnumImplementsT7. (from org-dartlang-testcase:///bounds_supertypes.dart:121:6)
- EnumImplementsT8. (from org-dartlang-testcase:///bounds_supertypes.dart:123:6)
- EnumImplementsS1. (from org-dartlang-testcase:///bounds_supertypes.dart:125:6)
- EnumImplementsS2. (from org-dartlang-testcase:///bounds_supertypes.dart:127:6)
- EnumImplementsS3. (from org-dartlang-testcase:///bounds_supertypes.dart:129:6)
- EnumImplementsS4. (from org-dartlang-testcase:///bounds_supertypes.dart:131:6)
- EnumImplementsS5. (from org-dartlang-testcase:///bounds_supertypes.dart:133:6)
- EnumImplementsS6. (from org-dartlang-testcase:///bounds_supertypes.dart:135:6)
- EnumImplementsS7. (from org-dartlang-testcase:///bounds_supertypes.dart:137:6)
- EnumImplementsS8. (from org-dartlang-testcase:///bounds_supertypes.dart:139:6)
- EnumWithT1. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
- _EnumWithT1&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:141:6)
- EnumWithT2. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
- _EnumWithT2&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:143:6)
- EnumWithT3. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
- _EnumWithT3&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:145:6)
- EnumWithT4. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
- _EnumWithT4&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:147:6)
- EnumWithT5. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
- _EnumWithT5&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:149:6)
- EnumWithT6. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
- _EnumWithT6&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:151:6)
- EnumWithT7. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
- _EnumWithT7&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:153:6)
- EnumWithT8. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
- _EnumWithT8&_Enum&F. (from org-dartlang-testcase:///bounds_supertypes.dart:155:6)
- EnumWithS1. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
- _EnumWithS1&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:157:6)
- EnumWithS2. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
- _EnumWithS2&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:159:6)
- EnumWithS3. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
- _EnumWithS3&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:161:6)
- EnumWithS4. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
- _EnumWithS4&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:163:6)
- EnumWithS5. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
- _EnumWithS5&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:165:6)
- EnumWithS6. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
- _EnumWithS6&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:167:6)
- EnumWithS7. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
- _EnumWithS7&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:169:6)
- EnumWithS8. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
- _EnumWithS8&_Enum&G. (from org-dartlang-testcase:///bounds_supertypes.dart:171:6)
