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

class Class<T extends core::Object? = dynamic> extends core::Object {
  static field dynamic field = null;
  synthetic constructor •() → self::Class<self::Class::T%>
    : super core::Object::•()
    ;
}
extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
  static get property = get self::Extension|property;
  static field field = self::Extension|field;
  static method readGetter = self::Extension|readGetter;
  static method writeSetterRequired = self::Extension|writeSetterRequired;
  static method writeSetterOptional = self::Extension|writeSetterOptional;
  static method writeSetterNamed = self::Extension|writeSetterNamed;
  static method genericWriteSetterRequired = self::Extension|genericWriteSetterRequired;
  static method genericWriteSetterOptional = self::Extension|genericWriteSetterOptional;
  static method genericWriteSetterNamed = self::Extension|genericWriteSetterNamed;
  static get tearOffGetterNoArgs = get self::Extension|tearOffGetterNoArgs;
  static get tearOffGetterRequired = get self::Extension|tearOffGetterRequired;
  static get tearOffGetterOptional = get self::Extension|tearOffGetterOptional;
  static get tearOffGetterNamed = get self::Extension|tearOffGetterNamed;
  static get tearOffGetterGenericRequired = get self::Extension|tearOffGetterGenericRequired;
  static get tearOffGetterGenericOptional = get self::Extension|tearOffGetterGenericOptional;
  static get tearOffGetterGenericNamed = get self::Extension|tearOffGetterGenericNamed;
  static method invocationsFromStaticContext = self::Extension|invocationsFromStaticContext;
  static method tearOffsFromStaticContext = self::Extension|tearOffsFromStaticContext;
  static method fieldAccessFromStaticContext = self::Extension|fieldAccessFromStaticContext;
  static method getterCallsFromStaticContext = self::Extension|getterCallsFromStaticContext;
  method invocationsFromInstanceContext = self::Extension|invocationsFromInstanceContext;
  method tearoff invocationsFromInstanceContext = self::Extension|get#invocationsFromInstanceContext;
  method tearOffsFromInstanceContext = self::Extension|tearOffsFromInstanceContext;
  method tearoff tearOffsFromInstanceContext = self::Extension|get#tearOffsFromInstanceContext;
  method fieldAccessFromInstanceContext = self::Extension|fieldAccessFromInstanceContext;
  method tearoff fieldAccessFromInstanceContext = self::Extension|get#fieldAccessFromInstanceContext;
  method getterCallsFromInstanceContext = self::Extension|getterCallsFromInstanceContext;
  method tearoff getterCallsFromInstanceContext = self::Extension|get#getterCallsFromInstanceContext;
  static set property = set self::Extension|property;
}
static field dynamic Extension|field;
static extension-member get Extension|property() → dynamic
  return self::Class::field;
static extension-member set Extension|property(dynamic value) → void {
  self::Class::field = value;
}
static extension-member method Extension|readGetter() → dynamic {
  return self::Extension|property;
}
static extension-member method Extension|writeSetterRequired(dynamic value) → dynamic {
  self::Extension|property = value;
}
static extension-member method Extension|writeSetterOptional([dynamic value = #C1]) → dynamic {
  self::Extension|property = value;
}
static extension-member method Extension|writeSetterNamed({dynamic value = #C1}) → dynamic {
  self::Extension|property = value;
}
static extension-member method Extension|genericWriteSetterRequired<S extends core::Object? = dynamic>(self::Extension|genericWriteSetterRequired::S% value) → dynamic {
  self::Extension|property = value;
}
static extension-member method Extension|genericWriteSetterOptional<S extends core::Object? = dynamic>([self::Extension|genericWriteSetterOptional::S? value = #C1]) → dynamic {
  self::Extension|property = value;
}
static extension-member method Extension|genericWriteSetterNamed<S extends core::Object? = dynamic>({self::Extension|genericWriteSetterNamed::S? value = #C1}) → dynamic {
  self::Extension|property = value;
}
static extension-member get Extension|tearOffGetterNoArgs() → dynamic
  return #C2;
static extension-member get Extension|tearOffGetterRequired() → dynamic
  return #C3;
static extension-member get Extension|tearOffGetterOptional() → dynamic
  return #C4;
static extension-member get Extension|tearOffGetterNamed() → dynamic
  return #C5;
static extension-member get Extension|tearOffGetterGenericRequired() → dynamic
  return #C6;
static extension-member get Extension|tearOffGetterGenericOptional() → dynamic
  return #C7;
static extension-member get Extension|tearOffGetterGenericNamed() → dynamic
  return #C8;
static extension-member method Extension|invocationsFromStaticContext(core::int value) → dynamic {
  self::Extension|readGetter();
  self::Extension|writeSetterRequired(value);
  self::Extension|writeSetterOptional();
  self::Extension|writeSetterOptional(value);
  self::Extension|writeSetterNamed();
  self::Extension|writeSetterNamed(value: value);
  self::Extension|genericWriteSetterRequired<core::int>(value);
  self::Extension|genericWriteSetterRequired<core::int>(value);
  self::Extension|genericWriteSetterOptional<dynamic>();
  self::Extension|genericWriteSetterOptional<core::int>();
  self::Extension|genericWriteSetterOptional<core::int>(value);
  self::Extension|genericWriteSetterOptional<core::int>(value);
  self::Extension|genericWriteSetterNamed<dynamic>();
  self::Extension|genericWriteSetterNamed<core::int>();
  self::Extension|genericWriteSetterNamed<core::int>(value: value);
  self::Extension|genericWriteSetterNamed<core::int>(value: value);
}
static extension-member method Extension|tearOffsFromStaticContext(core::int value) → dynamic {
  () → dynamic tearOffNoArgs = #C2;
  tearOffNoArgs(){() → dynamic};
  (dynamic) → dynamic tearOffRequired = #C3;
  tearOffRequired(value){(dynamic) → dynamic};
  ([dynamic]) → dynamic tearOffOptional = #C4;
  tearOffOptional(){([dynamic]) → dynamic};
  tearOffOptional(value){([dynamic]) → dynamic};
  ({value: dynamic}) → dynamic tearOffNamed = #C5;
  tearOffNamed(){({value: dynamic}) → dynamic};
  tearOffNamed(value: value){({value: dynamic}) → dynamic};
  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
  tearOffGenericOptional<core::int>(){([core::int?]) → dynamic};
  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
  tearOffGenericNamed<core::int>(){({value: core::int?}) → dynamic};
  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
}
static extension-member method Extension|fieldAccessFromStaticContext() → dynamic {
  self::Extension|field = self::Extension|property;
  self::Extension|property = self::Extension|field;
}
static extension-member method Extension|getterCallsFromStaticContext(core::int value) → dynamic {
  self::Extension|tearOffGetterNoArgs{dynamic}();
  self::Extension|tearOffGetterRequired{dynamic}(value);
  self::Extension|tearOffGetterOptional{dynamic}();
  self::Extension|tearOffGetterOptional{dynamic}(value);
  self::Extension|tearOffGetterNamed{dynamic}();
  self::Extension|tearOffGetterNamed{dynamic}(value: value);
  self::Extension|tearOffGetterGenericRequired{dynamic}(value);
  self::Extension|tearOffGetterGenericRequired{dynamic}<core::int>(value);
  self::Extension|tearOffGetterGenericOptional{dynamic}();
  self::Extension|tearOffGetterGenericOptional{dynamic}<core::int>();
  self::Extension|tearOffGetterGenericOptional{dynamic}(value);
  self::Extension|tearOffGetterGenericOptional{dynamic}<core::int>(value);
  self::Extension|tearOffGetterGenericNamed{dynamic}();
  self::Extension|tearOffGetterGenericNamed{dynamic}<core::int>();
  self::Extension|tearOffGetterGenericNamed{dynamic}(value: value);
  self::Extension|tearOffGetterGenericNamed{dynamic}<core::int>(value: value);
}
static extension-member method Extension|invocationsFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|invocationsFromInstanceContext::T%> #this, self::Extension|invocationsFromInstanceContext::T% value) → dynamic {
  self::Extension|readGetter();
  self::Extension|writeSetterRequired(value);
  self::Extension|writeSetterOptional();
  self::Extension|writeSetterOptional(value);
  self::Extension|writeSetterNamed();
  self::Extension|writeSetterNamed(value: value);
  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
  self::Extension|genericWriteSetterOptional<dynamic>();
  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>();
  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
  self::Extension|genericWriteSetterNamed<dynamic>();
  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T%>();
  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T%>(value: value);
  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T%>(value: value);
}
static extension-member method Extension|get#invocationsFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#invocationsFromInstanceContext::T%> #this) → (self::Extension|get#invocationsFromInstanceContext::T%) → dynamic
  return (self::Extension|get#invocationsFromInstanceContext::T% value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T%>(#this, value);
static extension-member method Extension|tearOffsFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T%> #this, self::Extension|tearOffsFromInstanceContext::T% value) → dynamic {
  () → dynamic tearOffNoArgs = #C2;
  tearOffNoArgs(){() → dynamic};
  (dynamic) → dynamic tearOffRequired = #C3;
  tearOffRequired(value){(dynamic) → dynamic};
  ([dynamic]) → dynamic tearOffOptional = #C4;
  tearOffOptional(){([dynamic]) → dynamic};
  tearOffOptional(value){([dynamic]) → dynamic};
  ({value: dynamic}) → dynamic tearOffNamed = #C5;
  tearOffNamed(){({value: dynamic}) → dynamic};
  tearOffNamed(value: value){({value: dynamic}) → dynamic};
  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
}
static extension-member method Extension|get#tearOffsFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#tearOffsFromInstanceContext::T%> #this) → (self::Extension|get#tearOffsFromInstanceContext::T%) → dynamic
  return (self::Extension|get#tearOffsFromInstanceContext::T% value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T%>(#this, value);
static extension-member method Extension|fieldAccessFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T%> #this) → dynamic {
  self::Extension|field = self::Extension|property;
  self::Extension|property = self::Extension|field;
}
static extension-member method Extension|get#fieldAccessFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T%> #this) → () → dynamic
  return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T%>(#this);
static extension-member method Extension|getterCallsFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T%> #this, self::Extension|getterCallsFromInstanceContext::T% value) → dynamic {
  self::Extension|tearOffGetterNoArgs{dynamic}();
  self::Extension|tearOffGetterRequired{dynamic}(value);
  self::Extension|tearOffGetterOptional{dynamic}();
  self::Extension|tearOffGetterOptional{dynamic}(value);
  self::Extension|tearOffGetterNamed{dynamic}();
  self::Extension|tearOffGetterNamed{dynamic}(value: value);
  self::Extension|tearOffGetterGenericRequired{dynamic}(value);
  self::Extension|tearOffGetterGenericRequired{dynamic}<self::Extension|getterCallsFromInstanceContext::T%>(value);
  self::Extension|tearOffGetterGenericOptional{dynamic}();
  self::Extension|tearOffGetterGenericOptional{dynamic}<self::Extension|getterCallsFromInstanceContext::T%>();
  self::Extension|tearOffGetterGenericOptional{dynamic}(value);
  self::Extension|tearOffGetterGenericOptional{dynamic}<self::Extension|getterCallsFromInstanceContext::T%>(value);
  self::Extension|tearOffGetterGenericNamed{dynamic}();
  self::Extension|tearOffGetterGenericNamed{dynamic}<self::Extension|getterCallsFromInstanceContext::T%>();
  self::Extension|tearOffGetterGenericNamed{dynamic}(value: value);
  self::Extension|tearOffGetterGenericNamed{dynamic}<self::Extension|getterCallsFromInstanceContext::T%>(value: value);
}
static extension-member method Extension|get#getterCallsFromInstanceContext<T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#getterCallsFromInstanceContext::T%> #this) → (self::Extension|get#getterCallsFromInstanceContext::T%) → dynamic
  return (self::Extension|get#getterCallsFromInstanceContext::T% value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T%>(#this, value);
static method main() → dynamic {}

constants  {
  #C1 = null
  #C2 = static-tearoff self::Extension|readGetter
  #C3 = static-tearoff self::Extension|writeSetterRequired
  #C4 = static-tearoff self::Extension|writeSetterOptional
  #C5 = static-tearoff self::Extension|writeSetterNamed
  #C6 = static-tearoff self::Extension|genericWriteSetterRequired
  #C7 = static-tearoff self::Extension|genericWriteSetterOptional
  #C8 = static-tearoff self::Extension|genericWriteSetterNamed
}
