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

import "org-dartlang-testcase:///synthesized_super_constructor_with_parameters_lib.dart";

class A1 extends core::Object {
  final field core::int a;
  constructor •(core::int a) → self::A1
    ;
}
class B1 extends core::Object {
  synthetic constructor •() → self::B1
    ;
}
class C1 = self::A1 with self::B1 {
  synthetic constructor •(core::int a) → self::C1
    : super self::A1::•(a)
    ;
}
class D1 extends self::C1 {
  constructor •(core::int a) → self::D1
    ;
}
class A2 extends core::Object {
  final field core::int a;
  constructor •({core::int a = 0}) → self::A2
    ;
}
class B2 extends core::Object {
  synthetic constructor •() → self::B2
    ;
}
class C2 = self::A2 with self::B2 {
  synthetic constructor •({core::int a = 0}) → self::C2
    : super self::A2::•(a: a)
    ;
}
class D2 extends self::C2 {
  constructor •({core::int a = 0}) → self::D2
    ;
}
class A3 extends core::Object {
  final field core::int a;
  constructor •([core::int a = 0]) → self::A3
    ;
}
class B3 extends core::Object {
  synthetic constructor •() → self::B3
    ;
}
class C3 = self::A3 with self::B3 {
  synthetic constructor •([core::int a = 0]) → self::C3
    : super self::A3::•(a)
    ;
}
class D3 extends self::C3 {
  constructor •([core::int a = 0]) → self::D3
    ;
}
class D4 extends self::C4 {
  constructor •([core::int foo = 42]) → self::D4
    ;
}
class C4 = self::A4 with self::B4 {
  synthetic constructor •([core::int foo = 42]) → self::C4
    : super self::A4::•(foo)
    ;
}
class B4 extends core::Object {
  synthetic constructor •() → self::B4
    ;
}
class A4 extends self::AA4 {
  constructor •([core::int foo = 42]) → self::A4
    ;
}
class AA4 extends core::Object {
  final field core::int foo;
  constructor •([core::int foo = 42]) → self::AA4
    ;
}
class D5 extends self::C5c {
  constructor •([core::int foo = 42]) → self::D5
    ;
}
class C5c = self::C5b with self::B5 {
  synthetic constructor •([core::int foo = 42]) → self::C5c
    : super self::C5b::•(foo)
    ;
}
class C5b = self::C5a with self::B5 {
  synthetic constructor •([core::int foo = 42]) → self::C5b
    : super self::C5a::•(foo)
    ;
}
class C5a = self::A5 with self::B5 {
  synthetic constructor •([core::int foo = 42]) → self::C5a
    : super self::A5::•(foo)
    ;
}
class B5 extends core::Object {
  synthetic constructor •() → self::B5
    ;
}
class A5 extends self::AA5 {
  constructor •([core::int foo = 42]) → self::A5
    ;
}
class AA5 extends core::Object {
  final field core::int foo;
  constructor •([core::int foo = 42]) → self::AA5
    ;
}
class D6 extends syn::C6 {
  constructor •({core::int a = 0}) → self::D6
    ;
}
class B7 extends core::Object {
  synthetic constructor •() → self::B7
    ;
}
class C7 = syn::A7 with self::B7 {
  synthetic constructor •([core::int a = 0]) → self::C7
    : super syn::A7::•(a)
    ;
}
class D7 extends self::C7 {
  constructor •([core::int a = 0]) → self::D7
    ;
}
class D8 extends syn::C8 {
  constructor •({core::int? a = null}) → self::D8
    ;
}
class B9 extends core::Object {
  synthetic constructor •() → self::B9
    ;
}
class C9 = syn::A9 with self::B9 {
  synthetic constructor •([core::int? a = null]) → self::C9
    : super syn::A9::•(a)
    ;
}
class D9 extends self::C9 {
  constructor •([core::int? a = null]) → self::D9
    ;
}
static method main() → dynamic
  ;

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

class A6 extends core::Object {
  final field core::int a;
  constructor •({core::int a = 0}) → syn::A6
    ;
}
class B6 extends core::Object {
  synthetic constructor •() → syn::B6
    ;
}
class C6 = syn::A6 with syn::B6 {
  synthetic constructor •({core::int a = 0}) → syn::C6
    : super syn::A6::•(a: a)
    ;
}
class A7 extends core::Object {
  final field core::int a;
  constructor •([core::int a = 0]) → syn::A7
    ;
}
class A8 extends core::Object {
  final field core::int? a;
  constructor •({core::int? a = null}) → syn::A8
    ;
}
class B8 extends core::Object {
  synthetic constructor •() → syn::B8
    ;
}
class C8 = syn::A8 with syn::B8 {
  synthetic constructor •({core::int? a = null}) → syn::C8
    : super syn::A8::•(a: a)
    ;
}
class A9 extends core::Object {
  final field core::int? a;
  constructor •([core::int? a = null]) → syn::A9
    ;
}
