library;
//
// Problems in library:
//
// pkg/front_end/testcases/clone_function_type.dart:22:51: Error: Expected an identifier, but got '}'.
// class Fm1<Z> extends Object with Am1<Function({int}), Z> {}
//                                                   ^
//
// pkg/front_end/testcases/clone_function_type.dart:46:45: Error: Expected an identifier, but got '}'.
// class Qm1<Z> = Object with Am1<Function({int}), Z>;
//                                             ^
//
// pkg/front_end/testcases/clone_function_type.dart:77:51: Error: Expected an identifier, but got '}'.
// class Fm2<Z> extends Object with Am2<Function({int}), Z> {}
//                                                   ^
//
// pkg/front_end/testcases/clone_function_type.dart:105:45: Error: Expected an identifier, but got '}'.
// class Qm2<Z> = Object with Am2<Function({int}), Z>;
//                                             ^
//
// pkg/front_end/testcases/clone_function_type.dart:134:28: Error: Expected an identifier, but got '}'.
// typedef TdF = Function({int});
//                            ^
//
// pkg/front_end/testcases/clone_function_type.dart:190:34: Error: Expected an identifier, but got '}'.
// class Ef1<X extends Function({int})> {
//                                  ^
//
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>
    ;
}
abstract class _Bm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Bm1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Cm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Cm1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Dm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<() → core::int, self::_Dm1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Em1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<() → dynamic, self::_Em1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Fm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<() → dynamic, self::_Fm1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Gm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::_Gm1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Hm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Hm1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Im1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Im1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Jm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<core::Function, self::_Jm1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Km1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::_Km1&Object&Am1::Z> {
  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>
    ;
}
abstract class _Lm1&Object&Am1<Z extends core::Object = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::_Lm1&Object&Am1::Z> {
  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>
    ;
}
class Mm1<Z extends core::Object = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Mm1::Z> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  const synthetic constructor •() → self::Wm1<self::Wm1::Z>
    : super core::Object::•()
    ;
}
class Am2<X extends () → dynamic = dynamic, Y extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::Am2<self::Am2::X, self::Am2::Y>
    ;
}
abstract class _Bm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Bm2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Cm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Cm2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Dm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<() → core::int, self::_Dm2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Em2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<() → dynamic, self::_Em2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Fm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<() → dynamic, self::_Fm2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Gm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::_Gm2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Hm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Hm2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Im2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Im2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Jm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<core::Function, self::_Jm2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Km2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::_Km2&Object&Am2::Z> {
  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>
    ;
}
abstract class _Lm2&Object&Am2<Z extends core::Object = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::_Lm2&Object&Am2::Z> {
  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>
    ;
}
class Mm2<Z extends core::Object = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Mm2::Z> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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> {
  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>
    ;
}
abstract class _Bm3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Bm3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Cm3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Cm3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Dm3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<() → core::int, self::_Dm3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Em3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<() → dynamic, self::_Em3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Fm3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<() → dynamic, self::_Fm3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Gm3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<({x: core::int}) → dynamic, self::_Gm3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Hm3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Hm3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Im3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Im3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Jm3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<(core::Function) → dynamic, self::_Jm3&Object&Am3::Z> {
  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>
    ;
}
abstract class _Km3&Object&Am3<Z extends core::Object = dynamic> = core::Object with self::Am3<() → (() → core::Function) → dynamic, self::_Km3&Object&Am3::Z> {
  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>
    ;
}
class Af1<X extends (core::int) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic = dynamic>() → self::Af1<self::Af1::foo::X>
    ;
}
class Bf1<X extends (core::int) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic = dynamic>() → self::Bf1<self::Bf1::foo::X>
    ;
}
class Cf1<X extends () → core::int = dynamic> extends core::Object {
  static factory foo<X extends () → core::int = dynamic>() → self::Cf1<self::Cf1::foo::X>
    ;
}
class Df1<X extends () → dynamic = dynamic> extends core::Object {
  static factory foo<X extends () → dynamic = dynamic>() → self::Df1<self::Df1::foo::X>
    ;
}
class Ef1<X extends () → dynamic = dynamic> extends core::Object {
  static factory foo<X extends () → dynamic = dynamic>() → self::Ef1<self::Ef1::foo::X>
    ;
}
class Ff1<X extends ({x: core::int}) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends ({x: core::int}) → dynamic = dynamic>() → self::Ff1<self::Ff1::foo::X>
    ;
}
class Gf1<X extends ([core::int]) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic = dynamic>() → self::Gf1<self::Gf1::foo::X>
    ;
}
class Hf1<X extends ([core::int]) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic = dynamic>() → self::Hf1<self::Hf1::foo::X>
    ;
}
class If1<X extends core::Function = dynamic> extends core::Object {
  static factory foo<X extends core::Function = dynamic>() → self::If1<self::If1::foo::X>
    ;
}
class Jf1<X extends (core::Function) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends (core::Function) → dynamic = dynamic>() → self::Jf1<self::Jf1::foo::X>
    ;
}
class Kf1<X extends () → (() → core::Function) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends () → (() → core::Function) → dynamic = dynamic>() → self::Kf1<self::Kf1::foo::X>
    ;
}
class Bf2<X extends (core::int) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic = dynamic>() → self::Bf2<self::Bf2::foo::X>
    ;
}
class Cf2<X extends (core::int) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends (core::int) → dynamic = dynamic>() → self::Cf2<self::Cf2::foo::X>
    ;
}
class Df2<X extends () → core::int = dynamic> extends core::Object {
  static factory foo<X extends () → core::int = dynamic>() → self::Df2<self::Df2::foo::X>
    ;
}
class Ef2<X extends () → dynamic = dynamic> extends core::Object {
  static factory foo<X extends () → dynamic = dynamic>() → self::Ef2<self::Ef2::foo::X>
    ;
}
class Ff2<X extends () → dynamic = dynamic> extends core::Object {
  static factory foo<X extends () → dynamic = dynamic>() → self::Ff2<self::Ff2::foo::X>
    ;
}
class Gf2<X extends ({x: core::int}) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends ({x: core::int}) → dynamic = dynamic>() → self::Gf2<self::Gf2::foo::X>
    ;
}
class Hf2<X extends ([core::int]) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic = dynamic>() → self::Hf2<self::Hf2::foo::X>
    ;
}
class If2<X extends ([core::int]) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends ([core::int]) → dynamic = dynamic>() → self::If2<self::If2::foo::X>
    ;
}
class Jf2<X extends (core::Function) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends (core::Function) → dynamic = dynamic>() → self::Jf2<self::Jf2::foo::X>
    ;
}
class Kf2<X extends () → (() → core::Function) → dynamic = dynamic> extends core::Object {
  static factory foo<X extends () → (() → core::Function) → dynamic = dynamic>() → self::Kf2<self::Kf2::foo::X>
    ;
}
static method main() → dynamic
  ;
