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

class Class extends core::Object {
  field self::Class? _field = null;
  synthetic constructor •() → self::Class*
    : super core::Object::•()
    ;
}
extension Extension on self::Class {
  get field = self::Extension|get#field;
  method method = self::Extension|method;
  tearoff method = self::Extension|get#method;
  operator [] = self::Extension|[];
  operator []= = self::Extension|[]=;
  operator + = self::Extension|+;
  set field = self::Extension|set#field;
}
static method Extension|get#field(final self::Class #this) → self::Class?
  return #this.{self::Class::_field};
static method Extension|set#field(final self::Class #this, self::Class? value) → void {
  #this.{self::Class::_field} = value;
}
static method Extension|method(final self::Class #this) → self::Class?
  return self::Extension|get#field(#this);
static method Extension|get#method(final self::Class #this) → () →* self::Class?
  return () → self::Class? => self::Extension|method(#this);
static method Extension|[](final self::Class #this, self::Class? key) → self::Class?
  return self::Extension|get#field(#this);
static method Extension|[]=(final self::Class #this, self::Class? key, self::Class? value) → void {
  self::Extension|set#field(#this, value);
}
static method Extension|+(final self::Class #this, core::int value) → self::Class?
  return self::Extension|get#field(#this);
static method main() → dynamic {
  self::propertyAccess(null);
  self::indexAccess(null);
  self::operatorAccess(null);
  self::ifNull(null);
}
static method propertyAccess(self::Class? c) → void {
  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(#t1);
  let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
  c = let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
  let final self::Class? #t6 = c in #t6.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(#t6);
  let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(self::Extension|get#field(#t7));
  let final self::Class? #t8 = c in #t8.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|get#field(#t8), new self::Class::•());
  c = let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t10 = new self::Class::•() in let final void #t11 = self::Extension|set#field(self::Extension|get#field(#t9), #t10) in #t10;
  let final self::Class? #t12 = c in #t12.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(self::Extension|get#field(#t12));
  let final self::Class? #t13 = c in #t13.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t13, self::Extension|get#field(new self::Class::•()));
  c = let final self::Class? #t14 = c in #t14.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t15 = self::Extension|get#field(new self::Class::•()) in let final void #t16 = self::Extension|set#field(#t14, #t15) in #t15;
  let final self::Class? #t17 = c in #t17.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(#t17, let final self::Class* #t18 = new self::Class::•() in let final void #t19 = self::Extension|set#field(new self::Class::•(), #t18) in #t18);
  c = let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t21 = let final self::Class* #t22 = new self::Class::•() in let final void #t23 = self::Extension|set#field(new self::Class::•(), #t22) in #t22 in let final void #t24 = self::Extension|set#field(#t20, #t21) in #t21;
  let final self::Class? #t25 = c in #t25.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t25, self::Extension|method(new self::Class::•()));
  c = let final self::Class? #t26 = c in #t26.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t27 = self::Extension|method(new self::Class::•()) in let final void #t28 = self::Extension|set#field(#t26, #t27) in #t27;
  let final self::Class? #t29 = c in #t29.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(self::Extension|method(#t29));
  let final self::Class? #t30 = c in #t30.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|method(#t30), new self::Class::•());
  let final self::Class? #t31 = c in #t31.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(self::Extension|method(#t31));
  let final self::Class? #t32 = c in #t32.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(self::Extension|get#field(self::Extension|get#field(#t32)));
  let final self::Class? #t33 = c in #t33.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|get#field(self::Extension|get#field(#t33)), new self::Class::•());
  c = let final self::Class? #t34 = c in #t34.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(self::Extension|get#field(self::Extension|get#field(#t34)), #t35) in #t35;
  let final self::Class? #t37 = c in #t37.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(self::Extension|get#field(self::Extension|get#field(#t37)));
  let final self::Class? #t38 = c in #t38.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t38, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
  c = let final self::Class? #t39 = c in #t39.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t40 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
  let final self::Class? #t42 = c in #t42.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t43) in #t43);
  c = let final self::Class? #t45 = c in #t45.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
  let final self::Class? #t50 = c in #t50.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t50, self::Extension|method(self::Extension|get#field(new self::Class::•())));
  c = let final self::Class? #t51 = c in #t51.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t52 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
  let final self::Class? #t54 = c in #t54.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(self::Extension|get#field(self::Extension|method(#t54)));
  let final self::Class? #t55 = c in #t55.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|get#field(self::Extension|method(#t55)), new self::Class::•());
  let final self::Class? #t56 = c in #t56.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(self::Extension|get#field(self::Extension|method(#t56)));
  let final self::Class? #t57 = c in #t57.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(self::Extension|get#field(#t57), self::Extension|get#field(new self::Class::•()));
  c = let final self::Class? #t58 = c in #t58.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t59 = self::Extension|get#field(new self::Class::•()) in let final void #t60 = self::Extension|set#field(self::Extension|get#field(#t58), #t59) in #t59;
  let final self::Class? #t61 = c in #t61.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|get#field(#t61), let final self::Class* #t62 = new self::Class::•() in let final void #t63 = self::Extension|set#field(new self::Class::•(), #t62) in #t62);
  c = let final self::Class? #t64 = c in #t64.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t65 = let final self::Class* #t66 = new self::Class::•() in let final void #t67 = self::Extension|set#field(new self::Class::•(), #t66) in #t66 in let final void #t68 = self::Extension|set#field(self::Extension|get#field(#t64), #t65) in #t65;
  let final self::Class? #t69 = c in #t69.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(self::Extension|get#field(#t69), self::Extension|method(new self::Class::•()));
  c = let final self::Class? #t70 = c in #t70.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t71 = self::Extension|method(new self::Class::•()) in let final void #t72 = self::Extension|set#field(self::Extension|get#field(#t70), #t71) in #t71;
  let final self::Class? #t73 = c in #t73.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t73, let final self::Class? #t74 = self::Extension|get#field(new self::Class::•()) in let final void #t75 = self::Extension|set#field(new self::Class::•(), #t74) in #t74);
  c = let final self::Class? #t76 = c in #t76.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t77 = let final self::Class? #t78 = self::Extension|get#field(new self::Class::•()) in let final void #t79 = self::Extension|set#field(new self::Class::•(), #t78) in #t78 in let final void #t80 = self::Extension|set#field(#t76, #t77) in #t77;
  let final self::Class? #t81 = c in #t81.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(#t81, let final self::Class* #t82 = let final self::Class* #t83 = new self::Class::•() in let final void #t84 = self::Extension|set#field(new self::Class::•(), #t83) in #t83 in let final void #t85 = self::Extension|set#field(new self::Class::•(), #t82) in #t82);
  c = let final self::Class? #t86 = c in #t86.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t87 = let final self::Class* #t88 = let final self::Class* #t89 = new self::Class::•() in let final void #t90 = self::Extension|set#field(new self::Class::•(), #t89) in #t89 in let final void #t91 = self::Extension|set#field(new self::Class::•(), #t88) in #t88 in let final void #t92 = self::Extension|set#field(#t86, #t87) in #t87;
  let final self::Class? #t93 = c in #t93.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t93, let final self::Class? #t94 = self::Extension|method(new self::Class::•()) in let final void #t95 = self::Extension|set#field(new self::Class::•(), #t94) in #t94);
  c = let final self::Class? #t96 = c in #t96.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t97 = let final self::Class? #t98 = self::Extension|method(new self::Class::•()) in let final void #t99 = self::Extension|set#field(new self::Class::•(), #t98) in #t98 in let final void #t100 = self::Extension|set#field(#t96, #t97) in #t97;
  let final self::Class? #t101 = c in #t101.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(self::Extension|method(#t101), self::Extension|get#field(new self::Class::•()));
  c = let final self::Class? #t102 = c in #t102.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t103 = self::Extension|get#field(new self::Class::•()) in let final void #t104 = self::Extension|set#field(self::Extension|method(#t102), #t103) in #t103;
  let final self::Class? #t105 = c in #t105.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|method(#t105), let final self::Class* #t106 = new self::Class::•() in let final void #t107 = self::Extension|set#field(new self::Class::•(), #t106) in #t106);
  c = let final self::Class? #t108 = c in #t108.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t109 = let final self::Class* #t110 = new self::Class::•() in let final void #t111 = self::Extension|set#field(new self::Class::•(), #t110) in #t110 in let final void #t112 = self::Extension|set#field(self::Extension|method(#t108), #t109) in #t109;
  let final self::Class? #t113 = c in #t113.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(self::Extension|method(#t113), self::Extension|method(new self::Class::•()));
  c = let final self::Class? #t114 = c in #t114.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t115 = self::Extension|method(new self::Class::•()) in let final void #t116 = self::Extension|set#field(self::Extension|method(#t114), #t115) in #t115;
  let final self::Class? #t117 = c in #t117.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(self::Extension|method(self::Extension|get#field(#t117)));
  let final self::Class? #t118 = c in #t118.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|method(self::Extension|get#field(#t118)), new self::Class::•());
  c = let final self::Class? #t119 = c in #t119.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(self::Extension|method(self::Extension|get#field(#t119)), #t120) in #t120;
  let final self::Class? #t122 = c in #t122.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(self::Extension|method(self::Extension|get#field(#t122)));
  let final self::Class? #t123 = c in #t123.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t123, self::Extension|get#field(self::Extension|method(new self::Class::•())));
  c = let final self::Class? #t124 = c in #t124.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t125 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t126 = self::Extension|set#field(#t124, #t125) in #t125;
  let final self::Class? #t127 = c in #t127.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(#t127, let final self::Class* #t128 = new self::Class::•() in let final void #t129 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t128) in #t128);
  c = let final self::Class? #t130 = c in #t130.{core::Object::==}(null) ?{self::Class*} null : let final self::Class* #t131 = let final self::Class* #t132 = new self::Class::•() in let final void #t133 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t132) in #t132 in let final void #t134 = self::Extension|set#field(#t130, #t131) in #t131;
  let final self::Class? #t135 = c in #t135.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t135, self::Extension|method(self::Extension|method(new self::Class::•())));
  c = let final self::Class? #t136 = c in #t136.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t137 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t138 = self::Extension|set#field(#t136, #t137) in #t137;
  let final self::Class? #t139 = c in #t139.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(self::Extension|method(self::Extension|method(#t139)));
  let final self::Class? #t140 = c in #t140.{core::Object::==}(null) ?{self::Class*} null : self::Extension|set#field(self::Extension|method(self::Extension|method(#t140)), new self::Class::•());
  let final self::Class? #t141 = c in #t141.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(self::Extension|method(self::Extension|method(#t141)));
}
static method indexAccess(self::Class? c) → void {
  let final self::Class? #t142 = c in #t142.{core::Object::==}(null) ?{self::Class?} null : self::Extension|[](self::Extension|get#field(#t142), c);
  let final self::Class? #t143 = c in #t143.{core::Object::==}(null) ?{void} null : self::Extension|[]=(self::Extension|get#field(#t143), c, new self::Class::•());
  c = let final self::Class? #t144 = c in #t144.{core::Object::==}(null) ?{self::Class*} null : let final self::Class? #t145 = self::Extension|get#field(#t144) in let final self::Class? #t146 = c in let final self::Class* #t147 = new self::Class::•() in let final void #t148 = self::Extension|[]=(#t145, #t146, #t147) in #t147;
  let final self::Class? #t149 = c in #t149.{core::Object::==}(null) ?{self::Class?} null : self::Extension|method(self::Extension|[](self::Extension|get#field(#t149), c));
  let final self::Class? #t150 = c in #t150.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t151 = self::Extension|get#field(#t150) in let final self::Class? #t152 = c in self::Extension|[]=(#t151, #t152, self::Extension|+(self::Extension|[](#t151, #t152), 0));
  c = let final self::Class? #t153 = c in #t153.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t154 = self::Extension|get#field(#t153) in let final self::Class? #t155 = c in let final self::Class? #t156 = self::Extension|+(self::Extension|[](#t154, #t155), 0) in let final void #t157 = self::Extension|[]=(#t154, #t155, #t156) in #t156;
  let final self::Class? #t158 = c in #t158.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t159 = self::Extension|get#field(#t158) in let final self::Class? #t160 = c in self::Extension|[]=(#t159, #t160, self::Extension|+(self::Extension|[](#t159, #t160), 1));
  c = let final self::Class? #t161 = c in #t161.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t162 = self::Extension|get#field(#t161) in let final self::Class? #t163 = c in let final self::Class? #t164 = self::Extension|[](#t162, #t163) in let final void #t165 = self::Extension|[]=(#t162, #t163, self::Extension|+(#t164, 1)) in #t164;
  let final self::Class? #t166 = c in #t166.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t167 = self::Extension|get#field(#t166) in let final self::Class? #t168 = c in let final self::Class? #t169 = self::Extension|+(self::Extension|[](#t167, #t168), 1) in let final void #t170 = self::Extension|[]=(#t167, #t168, #t169) in #t169;
  c = let final self::Class? #t171 = c in #t171.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t172 = self::Extension|get#field(#t171) in let final self::Class? #t173 = c in let final self::Class? #t174 = self::Extension|+(self::Extension|[](#t172, #t173), 1) in let final void #t175 = self::Extension|[]=(#t172, #t173, #t174) in #t174;
}
static method operatorAccess(self::Class? c) → void {
  let final self::Class? #t176 = c in #t176.{core::Object::==}(null) ?{self::Class?} null : self::Extension|+(self::Extension|get#field(#t176), 0);
  let final self::Class? #t177 = c in #t177.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t177, self::Extension|+(self::Extension|get#field(#t177), 0));
  c = let final self::Class? #t178 = c in #t178.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t179 = self::Extension|+(self::Extension|get#field(#t178), 0) in let final void #t180 = self::Extension|set#field(#t178, #t179) in #t179;
  let final self::Class? #t181 = c in #t181.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t182 = self::Extension|get#field(#t181) in self::Extension|set#field(#t182, self::Extension|+(self::Extension|get#field(#t182), 0));
  c = let final self::Class? #t183 = c in #t183.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t184 = self::Extension|get#field(#t183) in let final self::Class? #t185 = self::Extension|+(self::Extension|get#field(#t184), 0) in let final void #t186 = self::Extension|set#field(#t184, #t185) in #t185;
  let final self::Class? #t187 = c in #t187.{core::Object::==}(null) ?{self::Class?} null : self::Extension|set#field(#t187, self::Extension|+(self::Extension|get#field(#t187), 1));
  c = let final self::Class? #t188 = c in #t188.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t189 = self::Extension|get#field(#t188) in let final self::Class? #t190 = let final self::Class? #t191 = self::Extension|+(#t189, 1) in let final void #t192 = self::Extension|set#field(#t188, #t191) in #t191 in #t189;
  let final self::Class? #t193 = c in #t193.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t194 = self::Extension|+(self::Extension|get#field(#t193), 1) in let final void #t195 = self::Extension|set#field(#t193, #t194) in #t194;
  c = let final self::Class? #t196 = c in #t196.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t197 = self::Extension|+(self::Extension|get#field(#t196), 1) in let final void #t198 = self::Extension|set#field(#t196, #t197) in #t197;
}
static method ifNull(self::Class? c) → void {
  let final self::Class? #t199 = c in #t199.{core::Object::==}(null) ?{self::Class?} null : self::Extension|get#field(#t199).{core::Object::==}(null) ?{self::Class?} self::Extension|set#field(#t199, c) : null;
  c = let final self::Class? #t200 = c in #t200.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t201 = self::Extension|get#field(#t200) in #t201.{core::Object::==}(null) ?{self::Class?} let final self::Class? #t202 = c in let final void #t203 = self::Extension|set#field(#t200, #t202) in #t202 : #t201;
  let final self::Class? #t204 = c in #t204.{core::Object::==}(null) ?{self::Class?} null : let final self::Class? #t205 = self::Extension|get#field(#t204) in let final self::Class? #t206 = c in self::Extension|[](#t205, #t206).{core::Object::==}(null) ?{self::Class?} self::Extension|[]=(#t205, #t206, c) : null;
}
