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

typedef F<unrelated T extends core::Object? = dynamic> = self::A;
typedef G<unrelated T extends core::num> = self::B<dynamic>;
class A extends core::Object {
  field core::int field1;
  constructor •(core::int field1) → self::A
    ;
  constructor named(core::int field1) → self::A
    ;
  static method _#new#tearOff(core::int field1) → self::A
    return new self::A::•(field1);
  static method _#named#tearOff(core::int field1) → self::A
    return new self::A::named(field1);
}
class B<T extends core::Object? = dynamic> extends core::Object implements self::A {
  field core::int field1;
  generic-covariant-impl field self::B::T% field2;
  constructor •(core::int field1, self::B::T% field2) → self::B<self::B::T%>
    ;
  constructor named(core::int field1, self::B::T% field2) → self::B<self::B::T%>
    ;
  static method _#new#tearOff<T extends core::Object? = dynamic>(core::int field1, self::B::_#new#tearOff::T% field2) → self::B<self::B::_#new#tearOff::T%>
    return new self::B::•<self::B::_#new#tearOff::T%>(field1, field2);
  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field1, self::B::_#named#tearOff::T% field2) → self::B<self::B::_#named#tearOff::T%>
    return new self::B::named<self::B::_#named#tearOff::T%>(field1, field2);
}
static field (core::int) → self::A A_new;
static field <T extends core::Object? = dynamic>(core::int, T%) → self::B<T%> B_new;
static field <unrelated T extends core::Object? = dynamic>(core::int) → self::A F_new;
static field <unrelated T extends core::num>(core::int, dynamic) → self::B<dynamic> G_new;
static field (core::int) → self::A A_named;
static field (core::int, core::int) → self::B<core::int> B_named;
static field <unrelated T extends core::Object? = dynamic>(core::int) → self::A F_named;
static field (core::int, dynamic) → self::B<dynamic> G_named;
static method main() → dynamic
  ;
static method _#F#new#tearOff<unrelated T extends core::Object? = dynamic>(core::int field1) → self::A
  return new self::A::•(field1);
static method _#F#named#tearOff<unrelated T extends core::Object? = dynamic>(core::int field1) → self::A
  return new self::A::named(field1);
static method _#G#new#tearOff<unrelated T extends core::num>(core::int field1, dynamic field2) → self::B<dynamic>
  return new self::B::•<dynamic>(field1, field2);
static method _#G#named#tearOff<unrelated T extends core::num>(core::int field1, dynamic field2) → self::B<dynamic>
  return new self::B::named<dynamic>(field1, field2);
