library;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B*
    : super self::A::•()
    ;
}
class C extends self::B {
  synthetic constructor •() → self::C*
    : super self::B::•()
    ;
}
class D extends self::C {
  synthetic constructor •() → self::D*
    : super self::C::•()
    ;
}
class G<T extends self::A* = dynamic> extends core::Object {
  synthetic constructor •() → self::G<self::G::T*>*
    : super core::Object::•()
    ;
}
class GB extends self::G<self::B*> {
  synthetic constructor •() → self::GB*
    : super self::G::•()
    ;
}
class GC extends self::G<self::C*> {
  synthetic constructor •() → self::GC*
    : super self::G::•()
    ;
}
class GD extends self::G<self::D*> {
  synthetic constructor •() → self::GD*
    : super self::G::•()
    ;
}
class X extends core::Object implements self::A {
  synthetic constructor •() → self::X*
    : super core::Object::•()
    ;
}
class Y extends self::X {
  synthetic constructor •() → self::Y*
    : super self::X::•()
    ;
}
class Z extends core::Object implements self::Y {
  synthetic constructor •() → self::Z*
    : super core::Object::•()
    ;
}
class W extends core::Object implements self::Z {
  synthetic constructor •() → self::W*
    : super core::Object::•()
    ;
}
class GX extends core::Object implements self::G<self::A*> {
  synthetic constructor •() → self::GX*
    : super core::Object::•()
    ;
}
class GY extends self::X implements self::GB {
  synthetic constructor •() → self::GY*
    : super self::X::•()
    ;
}
class GZ extends core::Object implements self::Y, self::GC {
  synthetic constructor •() → self::GZ*
    : super core::Object::•()
    ;
}
class GW extends core::Object implements self::Z, self::GD {
  synthetic constructor •() → self::GW*
    : super core::Object::•()
    ;
}
class GU extends self::GW {
  synthetic constructor •() → self::GU*
    : super self::GW::•()
    ;
}
class GV extends self::GU implements self::GW {
  synthetic constructor •() → self::GV*
    : super self::GU::•()
    ;
}
class ARO<S extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::ARO<self::ARO::S*>*
    : super core::Object::•()
    ;
}
class ARQ<T extends core::Object* = dynamic> extends core::Object implements self::ARO<self::ARQ::T*> {
  synthetic constructor •() → self::ARQ<self::ARQ::T*>*
    : super core::Object::•()
    ;
}
class ARN extends self::ARQ<self::A*> {
  synthetic constructor •() → self::ARN*
    : super self::ARQ::•()
    ;
}
static method main() → dynamic {}
