library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/clone_function_type.dart:22:51: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// class Fm1<Z> extends Object with Am1<Function({int}), Z> {}
//                                                   ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:46:45: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// class Qm1<Z> = Object with Am1<Function({int}), Z>;
//                                             ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:77:51: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// class Fm2<Z> extends Object with Am2<Function({int}), Z> {}
//                                                   ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:105:45: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// class Qm2<Z> = Object with Am2<Function({int}), Z>;
//                                             ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:134:28: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// typedef TdF = Function({int});
//                            ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:190:34: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// class Ef1<X extends Function({int})> {
//                                  ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
// Try changing type arguments so that they conform to the bounds.
// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Jm2<Z> extends Object with Am2<Function, Z> {}
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
// Try changing type arguments so that they conform to the bounds.
// class Mm2<Z> = Object with Am2<Function(int), Z>;
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
// Try changing type arguments so that they conform to the bounds.
// class Nm2<Z> = Object with Am2<Function(int x), Z>;
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Um2<Z> = Object with Am2<Function, Z>;
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
//  - 'Function' is from 'dart:core'.
// Try changing type arguments so that they conform to the bounds.
// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
//       ^
// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
// class Am2<X extends Function(), Y> {}
//           ^
//
import self as self;
import "dart:core" as core;

typedef TdB = (core::int) → dynamic;
typedef TdC = (core::int) → dynamic;
typedef TdD = () → core::int;
typedef TdE = () → dynamic;
typedef TdF = () → dynamic;
typedef TdG = ({x: core::int}) → dynamic;
typedef TdH = ([core::int]) → dynamic;
typedef TdI = ([core::int]) → dynamic;
typedef TdJ = (core::Function) → dynamic;
typedef TdK = () → (() → core::Function) → dynamic;
class Am1<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Am1<self::Am1::X%, self::Am1::Y%>
    : super core::Object::•()
    ;
}
abstract class _Bm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Bm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Bm1<Z extends core::Object? = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z%> {
  synthetic constructor •() → self::Bm1<self::Bm1::Z%>
    : super self::_Bm1&Object&Am1::•()
    ;
}
abstract class _Cm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Cm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Cm1<Z extends core::Object? = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z%> {
  synthetic constructor •() → self::Cm1<self::Cm1::Z%>
    : super self::_Cm1&Object&Am1::•()
    ;
}
abstract class _Dm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::_Dm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Dm1<Z extends core::Object? = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z%> {
  synthetic constructor •() → self::Dm1<self::Dm1::Z%>
    : super self::_Dm1&Object&Am1::•()
    ;
}
abstract class _Em1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Em1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Em1<Z extends core::Object? = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z%> {
  synthetic constructor •() → self::Em1<self::Em1::Z%>
    : super self::_Em1&Object&Am1::•()
    ;
}
abstract class _Fm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Fm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Fm1<Z extends core::Object? = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z%> {
  synthetic constructor •() → self::Fm1<self::Fm1::Z%>
    : super self::_Fm1&Object&Am1::•()
    ;
}
abstract class _Gm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::_Gm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Gm1<Z extends core::Object? = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z%> {
  synthetic constructor •() → self::Gm1<self::Gm1::Z%>
    : super self::_Gm1&Object&Am1::•()
    ;
}
abstract class _Hm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Hm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Hm1<Z extends core::Object? = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z%> {
  synthetic constructor •() → self::Hm1<self::Hm1::Z%>
    : super self::_Hm1&Object&Am1::•()
    ;
}
abstract class _Im1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Im1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Im1<Z extends core::Object? = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z%> {
  synthetic constructor •() → self::Im1<self::Im1::Z%>
    : super self::_Im1&Object&Am1::•()
    ;
}
abstract class _Jm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::_Jm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Jm1<Z extends core::Object? = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z%> {
  synthetic constructor •() → self::Jm1<self::Jm1::Z%>
    : super self::_Jm1&Object&Am1::•()
    ;
}
abstract class _Km1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::_Km1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Km1<Z extends core::Object? = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z%> {
  synthetic constructor •() → self::Km1<self::Km1::Z%>
    : super self::_Km1&Object&Am1::•()
    ;
}
abstract class _Lm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::_Lm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z%>
    : super core::Object::•()
    ;
}
class Lm1<Z extends core::Object? = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z%> {
  synthetic constructor •() → self::Lm1<self::Lm1::Z%>
    : super self::_Lm1&Object&Am1::•()
    ;
}
class Mm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Mm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Mm1<self::Mm1::Z%>
    : super core::Object::•()
    ;
}
class Nm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Nm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Nm1<self::Nm1::Z%>
    : super core::Object::•()
    ;
}
class Om1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::Om1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Om1<self::Om1::Z%>
    : super core::Object::•()
    ;
}
class Pm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Pm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Pm1<self::Pm1::Z%>
    : super core::Object::•()
    ;
}
class Qm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Qm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Qm1<self::Qm1::Z%>
    : super core::Object::•()
    ;
}
class Rm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::Rm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Rm1<self::Rm1::Z%>
    : super core::Object::•()
    ;
}
class Sm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Sm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Sm1<self::Sm1::Z%>
    : super core::Object::•()
    ;
}
class Tm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Tm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Tm1<self::Tm1::Z%>
    : super core::Object::•()
    ;
}
class Um1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::Um1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Um1<self::Um1::Z%>
    : super core::Object::•()
    ;
}
class Vm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::Vm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Vm1<self::Vm1::Z%>
    : super core::Object::•()
    ;
}
class Wm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::Wm1::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Wm1<self::Wm1::Z%>
    : super core::Object::•()
    ;
}
class Am2<X extends () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Am2<self::Am2::X, self::Am2::Y%>
    : super core::Object::•()
    ;
}
abstract class _Bm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Bm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Bm2<Z extends core::Object? = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z%> {
  synthetic constructor •() → self::Bm2<self::Bm2::Z%>
    : super self::_Bm2&Object&Am2::•()
    ;
}
abstract class _Cm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Cm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Cm2<Z extends core::Object? = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z%> {
  synthetic constructor •() → self::Cm2<self::Cm2::Z%>
    : super self::_Cm2&Object&Am2::•()
    ;
}
abstract class _Dm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::_Dm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Dm2<Z extends core::Object? = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z%> {
  synthetic constructor •() → self::Dm2<self::Dm2::Z%>
    : super self::_Dm2&Object&Am2::•()
    ;
}
abstract class _Em2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Em2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Em2<Z extends core::Object? = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z%> {
  synthetic constructor •() → self::Em2<self::Em2::Z%>
    : super self::_Em2&Object&Am2::•()
    ;
}
abstract class _Fm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Fm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Fm2<Z extends core::Object? = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z%> {
  synthetic constructor •() → self::Fm2<self::Fm2::Z%>
    : super self::_Fm2&Object&Am2::•()
    ;
}
abstract class _Gm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::_Gm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Gm2<Z extends core::Object? = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z%> {
  synthetic constructor •() → self::Gm2<self::Gm2::Z%>
    : super self::_Gm2&Object&Am2::•()
    ;
}
abstract class _Hm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Hm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Hm2<Z extends core::Object? = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z%> {
  synthetic constructor •() → self::Hm2<self::Hm2::Z%>
    : super self::_Hm2&Object&Am2::•()
    ;
}
abstract class _Im2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Im2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Im2<Z extends core::Object? = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z%> {
  synthetic constructor •() → self::Im2<self::Im2::Z%>
    : super self::_Im2&Object&Am2::•()
    ;
}
abstract class _Jm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::_Jm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Jm2<Z extends core::Object? = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z%> {
  synthetic constructor •() → self::Jm2<self::Jm2::Z%>
    : super self::_Jm2&Object&Am2::•()
    ;
}
abstract class _Km2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::_Km2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Km2<Z extends core::Object? = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z%> {
  synthetic constructor •() → self::Km2<self::Km2::Z%>
    : super self::_Km2&Object&Am2::•()
    ;
}
abstract class _Lm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::_Lm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z%>
    : super core::Object::•()
    ;
}
class Lm2<Z extends core::Object? = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z%> {
  synthetic constructor •() → self::Lm2<self::Lm2::Z%>
    : super self::_Lm2&Object&Am2::•()
    ;
}
class Mm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Mm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Mm2<self::Mm2::Z%>
    : super core::Object::•()
    ;
}
class Nm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Nm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Nm2<self::Nm2::Z%>
    : super core::Object::•()
    ;
}
class Om2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::Om2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Om2<self::Om2::Z%>
    : super core::Object::•()
    ;
}
class Pm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Pm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Pm2<self::Pm2::Z%>
    : super core::Object::•()
    ;
}
class Qm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Qm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Qm2<self::Qm2::Z%>
    : super core::Object::•()
    ;
}
class Rm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::Rm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Rm2<self::Rm2::Z%>
    : super core::Object::•()
    ;
}
class Sm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Sm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Sm2<self::Sm2::Z%>
    : super core::Object::•()
    ;
}
class Tm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Tm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Tm2<self::Tm2::Z%>
    : super core::Object::•()
    ;
}
class Um2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::Um2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Um2<self::Um2::Z%>
    : super core::Object::•()
    ;
}
class Vm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::Vm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Vm2<self::Vm2::Z%>
    : super core::Object::•()
    ;
}
class Wm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::Wm2::Z%> /*hasConstConstructor*/  {
  const synthetic constructor •() → self::Wm2<self::Wm2::Z%>
    : super core::Object::•()
    ;
}
class Am3<L extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Am3<self::Am3::L%, self::Am3::Y%>
    : super core::Object::•()
    ;
}
abstract class _Bm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Bm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Bm3<Z extends core::Object? = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z%> {
  synthetic constructor •() → self::Bm3<self::Bm3::Z%>
    : super self::_Bm3&Object&Am3::•()
    ;
}
abstract class _Cm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Cm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Cm3<Z extends core::Object? = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z%> {
  synthetic constructor •() → self::Cm3<self::Cm3::Z%>
    : super self::_Cm3&Object&Am3::•()
    ;
}
abstract class _Dm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → core::int, self::_Dm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Dm3<Z extends core::Object? = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z%> {
  synthetic constructor •() → self::Dm3<self::Dm3::Z%>
    : super self::_Dm3&Object&Am3::•()
    ;
}
abstract class _Em3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Em3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Em3<Z extends core::Object? = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z%> {
  synthetic constructor •() → self::Em3<self::Em3::Z%>
    : super self::_Em3&Object&Am3::•()
    ;
}
abstract class _Fm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Fm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Fm3<Z extends core::Object? = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z%> {
  synthetic constructor •() → self::Fm3<self::Fm3::Z%>
    : super self::_Fm3&Object&Am3::•()
    ;
}
abstract class _Gm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<({x: core::int}) → dynamic, self::_Gm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Gm3<Z extends core::Object? = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z%> {
  synthetic constructor •() → self::Gm3<self::Gm3::Z%>
    : super self::_Gm3&Object&Am3::•()
    ;
}
abstract class _Hm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Hm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Hm3<Z extends core::Object? = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z%> {
  synthetic constructor •() → self::Hm3<self::Hm3::Z%>
    : super self::_Hm3&Object&Am3::•()
    ;
}
abstract class _Im3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Im3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Im3<Z extends core::Object? = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z%> {
  synthetic constructor •() → self::Im3<self::Im3::Z%>
    : super self::_Im3&Object&Am3::•()
    ;
}
abstract class _Jm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::Function) → dynamic, self::_Jm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Jm3<Z extends core::Object? = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z%> {
  synthetic constructor •() → self::Jm3<self::Jm3::Z%>
    : super self::_Jm3&Object&Am3::•()
    ;
}
abstract class _Km3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → (() → core::Function) → dynamic, self::_Km3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z%>
    : super core::Object::•()
    ;
}
class Km3<Z extends core::Object? = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z%> {
  synthetic constructor •() → self::Km3<self::Km3::Z%>
    : super self::_Km3&Object&Am3::•()
    ;
}
class Af1<X extends (core::int) → dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic>() → self::Af1<self::Af1::foo::X>
    return throw "";
}
class Bf1<X extends (core::int) → dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic>() → self::Bf1<self::Bf1::foo::X>
    return throw "";
}
class Cf1<X extends () → core::int> extends core::Object {
  static factory foo<X extends () → core::int>() → self::Cf1<self::Cf1::foo::X>
    return throw "";
}
class Df1<X extends () → dynamic> extends core::Object {
  static factory foo<X extends () → dynamic>() → self::Df1<self::Df1::foo::X>
    return throw "";
}
class Ef1<X extends () → dynamic> extends core::Object {
  static factory foo<X extends () → dynamic>() → self::Ef1<self::Ef1::foo::X>
    return throw "";
}
class Ff1<X extends ({x: core::int}) → dynamic> extends core::Object {
  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Ff1<self::Ff1::foo::X>
    return throw "";
}
class Gf1<X extends ([core::int]) → dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic>() → self::Gf1<self::Gf1::foo::X>
    return throw "";
}
class Hf1<X extends ([core::int]) → dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf1<self::Hf1::foo::X>
    return throw "";
}
class If1<X extends core::Function> extends core::Object {
  static factory foo<X extends core::Function>() → self::If1<self::If1::foo::X>
    return throw "";
}
class Jf1<X extends (core::Function) → dynamic> extends core::Object {
  static factory foo<X extends (core::Function) → dynamic>() → self::Jf1<self::Jf1::foo::X>
    return throw "";
}
class Kf1<X extends () → (() → core::Function) → dynamic> extends core::Object {
  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf1<self::Kf1::foo::X>
    return throw "";
}
class Bf2<X extends (core::int) → dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic>() → self::Bf2<self::Bf2::foo::X>
    return throw "";
}
class Cf2<X extends (core::int) → dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic>() → self::Cf2<self::Cf2::foo::X>
    return throw "";
}
class Df2<X extends () → core::int> extends core::Object {
  static factory foo<X extends () → core::int>() → self::Df2<self::Df2::foo::X>
    return throw "";
}
class Ef2<X extends () → dynamic> extends core::Object {
  static factory foo<X extends () → dynamic>() → self::Ef2<self::Ef2::foo::X>
    return throw "";
}
class Ff2<X extends () → dynamic> extends core::Object {
  static factory foo<X extends () → dynamic>() → self::Ff2<self::Ff2::foo::X>
    return throw "";
}
class Gf2<X extends ({x: core::int}) → dynamic> extends core::Object {
  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Gf2<self::Gf2::foo::X>
    return throw "";
}
class Hf2<X extends ([core::int]) → dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf2<self::Hf2::foo::X>
    return throw "";
}
class If2<X extends ([core::int]) → dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic>() → self::If2<self::If2::foo::X>
    return throw "";
}
class Jf2<X extends (core::Function) → dynamic> extends core::Object {
  static factory foo<X extends (core::Function) → dynamic>() → self::Jf2<self::Jf2::foo::X>
    return throw "";
}
class Kf2<X extends () → (() → core::Function) → dynamic> extends core::Object {
  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf2<self::Kf2::foo::X>
    return throw "";
}
static method main() → dynamic {}
