library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

import "dart:async";

typedef Baz<invariant T extends core::Object? = dynamic> = (T%) → T%;
class Foo1<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo1<self::Foo1::T%>
    : super core::Object::•()
    ;
  method method<covariant-by-class S extends self::Foo1::T%>((self::Foo1::method::S%) → self::Foo1::method::S% x) → void {}
}
class Bar1 extends core::Object implements self::Foo1<core::Object> {
  synthetic constructor •() → self::Bar1
    : super core::Object::•()
    ;
  method method<covariant-by-class T extends core::Object>((self::Bar1::method::T) → self::Bar1::method::T x) → void {}
}
class Foo2<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo2<self::Foo2::T%>
    : super core::Object::•()
    ;
  method method<V extends self::Foo2::method::S% = self::Foo2::T%, covariant-by-class S extends self::Foo2::T%>((self::Foo2::method::S%) → self::Foo2::method::S% x, (self::Foo2::method::V%) → self::Foo2::method::V% y) → void {}
}
class Bar2 extends core::Object implements self::Foo2<core::Object> {
  synthetic constructor •() → self::Bar2
    : super core::Object::•()
    ;
  method method<V extends self::Bar2::method::T = core::Object, covariant-by-class T extends core::Object>((self::Bar2::method::T) → self::Bar2::method::T x, (self::Bar2::method::V) → self::Bar2::method::V y) → void {}
}
class Foo3<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo3<self::Foo3::T%>
    : super core::Object::•()
    ;
  method method<V extends self::Foo3::method::S% = FutureOr<self::Foo3::T%>, covariant-by-class S extends FutureOr<self::Foo3::T%>>((self::Foo3::method::S%) → self::Foo3::method::S% x, (self::Foo3::method::V%) → self::Foo3::method::V% y) → void {}
}
class Bar3 extends core::Object implements self::Foo3<core::Object> {
  synthetic constructor •() → self::Bar3
    : super core::Object::•()
    ;
  method method<V extends self::Bar3::method::T = FutureOr<core::Object>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar3::method::T) → self::Bar3::method::T x, (self::Bar3::method::V) → self::Bar3::method::V y) → void {}
}
class Foo4<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo4<self::Foo4::T%>
    : super core::Object::•()
    ;
  method method<V extends FutureOr<self::Foo4::method::S%> = FutureOr<self::Foo4::T%>, covariant-by-class S extends self::Foo4::T%>((self::Foo4::method::S%) → self::Foo4::method::S% x, (self::Foo4::method::V%) → self::Foo4::method::V% y) → void {}
}
class Bar4 extends core::Object implements self::Foo4<core::Object> {
  synthetic constructor •() → self::Bar4
    : super core::Object::•()
    ;
  method method<V extends FutureOr<self::Bar4::method::T> = FutureOr<core::Object>, covariant-by-class T extends core::Object>((self::Bar4::method::T) → self::Bar4::method::T x, (self::Bar4::method::V) → self::Bar4::method::V y) → void {}
}
class Foo5<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo5<self::Foo5::T%>
    : super core::Object::•()
    ;
  method method<V extends FutureOr<self::Foo5::method::S%> = FutureOr<FutureOr<self::Foo5::T%>>, covariant-by-class S extends FutureOr<self::Foo5::T%>>((self::Foo5::method::S%) → self::Foo5::method::S% x, (self::Foo5::method::V%) → self::Foo5::method::V% y) → void {}
}
class Bar5 extends core::Object implements self::Foo5<core::Object> {
  synthetic constructor •() → self::Bar5
    : super core::Object::•()
    ;
  method method<V extends FutureOr<self::Bar5::method::T> = FutureOr<FutureOr<core::Object>>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar5::method::T) → self::Bar5::method::T x, (self::Bar5::method::V) → self::Bar5::method::V y) → void {}
}
static method main() → void {}
