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

extension type ET3<T extends core::num>(core::int id) {
  abstract extension-type-member representation-field get id() → core::int;
  constructor • = self::ET3|constructor#;
  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
  constructor c1 = self::ET3|constructor#c1;
  constructor tearoff c1 = self::ET3|constructor#_#c1#tearOff;
  static redirecting-factory f1 = self::ET3|constructor#f1;
  static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
}
static extension-type-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
  lowered final self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ #this = id;
  return #this;
}
static extension-type-member method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T>% /* erasure=core::int, declared=! */
  return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
static extension-type-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
  lowered final self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ #this;
  #this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
  return #this;
}
static extension-type-member method ET3|constructor#_#c1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#c1#tearOff::T>% /* erasure=core::int, declared=! */
  return self::ET3|constructor#c1<self::ET3|constructor#_#c1#tearOff::T>();
static extension-type-member method ET3|constructor#f1<T extends core::num>() → self::ET3<self::ET3|constructor#f1::T>% /* erasure=core::int, declared=! */ /* redirection-target: self::ET3|constructor#c1<self::ET3|constructor#f1::T>*/
  return self::ET3|constructor#c1<self::ET3|constructor#f1::T>();
static extension-type-member method ET3|constructor#_#f1#tearOff<T extends core::num>() → self::ET3<self::ET3|constructor#_#f1#tearOff::T>% /* erasure=core::int, declared=! */
  return self::ET3|constructor#c1<self::ET3|constructor#_#f1#tearOff::T>();
