int get property1 => 0;
void set property1(int value) {}
int get property2 => 0;
void set property2(num value) {}
num get property3 => 0;
void set property3(int value) {}
abstract class A {
  int get property1;
  void set property1(int i);
  int get property2;
  void set property2(int i);
  num get property3;
  void set property3(int i);
  int property4 = 0;
  int property5 = 0;
  covariant num property6 = 0;
  static int get property7 => 0;
  static void set property7(int value) {}
  static int get property8 => 0;
  static void set property8(num value) {}
  static num get property9 => 0;
  static void set property9(int value) {}
}
abstract class B1 {
  int get property1;
  int get property2;
  num get property3;
  final int property4;
  final int property5;
  final num property6;
  B1(this.property4, this.property5, this.property6);
}
abstract class B2 implements B1 {
  void set property1(int i);
  void set property2(num i);
  void set property3(int i);
  void set property4(int i);
  void set property5(num i);
  void set property6(int i);
}
abstract class C1 {
  void set property1(int i);
  void set property2(num i);
  void set property3(int i);
  int property4 = 0;
  num property5 = 0;
  int property6 = 0;
}
abstract class C2 implements C1 {
  int get property1;
  int get property2;
  num get property3;
  int get property4;
  int get property5;
  num get property6;
}
abstract class D1 {
  int get property1;
  int get property2;
  num get property3;
}
abstract class D2 {
  void set property1(int i);
  void set property2(num i);
  void set property3(int i);
}
abstract class D3 implements D1, D2 {}
abstract class D4 implements D3 {}
extension Extension<T, S extends T> (){}
on int (){}
main() {}
