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

class Class extends core::Object {
  field core::int field;
  final field core::int finalField;
  constructor •(core::int field, core::int finalField) → self::Class
    : self::Class::field = field, self::Class::finalField = finalField, super core::Object::•()
    ;
  get getter() → core::int
    return this.{self::Class::finalField}{core::int};
}
static method ifCase(dynamic o) → core::int {
  core::print("o = ${o}");
  {
    final synthesized dynamic #0#0 = o;
    if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
      return 1;
    }
  }
  {
    final synthesized dynamic #1#0 = o;
    synthesized core::Object? #1#2;
    synthesized core::bool #1#2#isSet = false;
    if(#1#0 is ({f: core::Object?}) && ((let final dynamic #t1 = (#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t2 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t3 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t4 = (#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t5 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t6 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
      return 2;
    }
  }
  {
    final synthesized dynamic #2#0 = o;
    if(#C4 =={core::num::==}{(core::Object) → core::bool} #2#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) {
      return 3;
    }
  }
  {
    final synthesized dynamic #3#0 = o;
    synthesized core::Object? #3#2;
    synthesized core::bool #3#2#isSet = false;
    if(#3#0 is ({g: core::Object?}) && (let final dynamic #t7 = (#3#2#isSet ?{core::Object?} #3#2{core::Object?} : let final dynamic #t8 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#3#2#isSet ?{core::Object?} #3#2{core::Object?} : let final dynamic #t9 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
      return 4;
    }
  }
  {
    final synthesized dynamic #4#0 = o;
    if(#4#0 is ({a: core::Object?}) && (let final dynamic #t10 = #4#0{({a: core::Object?})}.a{core::Object?}! in true)) {
      return 5;
    }
  }
  {
    final synthesized dynamic #5#0 = o;
    if(#5#0 is ({b: core::Object?}) && (!(#5#0{({b: core::Object?})}.b{core::Object?} == null) && true)) {
      return 6;
    }
  }
  {
    final synthesized dynamic #6#0 = o;
    if(#6#0 is core::List<dynamic> && #6#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C7 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
      return 7;
    }
  }
  {
    final synthesized dynamic #7#0 = o;
    if(#7#0 is core::List<dynamic> && #7#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C7 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C2 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
      return 8;
    }
  }
  {
    final synthesized dynamic #8#0 = o;
    synthesized core::int #8#2;
    synthesized core::bool #8#2#isSet = false;
    if(#8#0 is core::List<dynamic> && (#8#2#isSet ?{core::int} #8#2{core::int} : let final dynamic #t11 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C2 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C8 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}((#8#2#isSet ?{core::int} #8#2{core::int} : let final dynamic #t12 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
      return 9;
    }
  }
  {
    final synthesized dynamic #9#0 = o;
    synthesized core::List<dynamic> #9#12;
    synthesized core::bool #9#12#isSet = false;
    synthesized dynamic #9#15;
    synthesized core::bool #9#15#isSet = false;
    synthesized dynamic #9#19;
    synthesized core::bool #9#19#isSet = false;
    if(#9#0 is core::List<dynamic> && #9#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C8 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t13 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t14 = (#9#15#isSet ?{dynamic} #9#15{dynamic} : let final dynamic #t15 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t16 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#9#15#isSet ?{dynamic} #9#15{dynamic} : let final dynamic #t17 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t18 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t19 = (#9#19#isSet ?{dynamic} #9#19{dynamic} : let final dynamic #t20 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t21 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#9#19#isSet ?{dynamic} #9#19{dynamic} : let final dynamic #t22 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t23 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
      return 10;
    }
  }
  {
    final synthesized dynamic #10#0 = o;
    synthesized core::int #10#2;
    synthesized core::bool #10#2#isSet = false;
    synthesized core::List<dynamic> #10#12;
    synthesized core::bool #10#12#isSet = false;
    synthesized dynamic #10#16;
    synthesized core::bool #10#16#isSet = false;
    synthesized dynamic #10#20;
    synthesized core::bool #10#20#isSet = false;
    if(#10#0 is core::List<dynamic> && (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t24 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C3 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C4 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t25 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t26 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t27 = (#10#16#isSet ?{dynamic} #10#16{dynamic} : let final dynamic #t28 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t29 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t30 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#10#16#isSet ?{dynamic} #10#16{dynamic} : let final dynamic #t31 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t32 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t33 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t34 = (#10#20#isSet ?{dynamic} #10#20{dynamic} : let final dynamic #t35 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t36 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t37 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#10#20#isSet ?{dynamic} #10#20{dynamic} : let final dynamic #t38 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t39 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t40 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}((#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t41 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
      return 11;
    }
  }
  {
    final synthesized dynamic #11#0 = o;
    if(#11#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} #11#0{self::Class}.{self::Class::field}{core::int}) {
      return 12;
    }
  }
  {
    final synthesized dynamic #12#0 = o;
    if(#12#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #12#0{self::Class}.{self::Class::finalField}{core::int}) {
      return 13;
    }
  }
  {
    final synthesized dynamic #13#0 = o;
    if(#13#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::field}{core::int} && #C8 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::getter}{core::int}) {
      return 14;
    }
  }
  {
    final synthesized dynamic #14#0 = o;
    if(#14#0 is self::Class) {
      return 15;
    }
  }
  {
    final synthesized dynamic #15#0 = o;
    if(#15#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
      return 16;
    }
  }
  {
    final synthesized dynamic #16#0 = o;
    if(#16#0 is ({e: core::Object?}) && !(#16#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
      return 17;
    }
  }
  {
    final synthesized dynamic #17#0 = o;
    synthesized core::int? #17#4;
    synthesized core::bool #17#4#isSet = false;
    if(#17#0 is core::Map<core::int, core::int> && (!((#17#4#isSet ?{core::int?} #17#4{core::int?} : let final dynamic #t42 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #17#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && ((#17#4#isSet ?{core::int?} #17#4{core::int?} : let final dynamic #t43 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) as{Unchecked} core::int).{core::num::>=}(#C11){(core::num) → core::bool}) {
      return 18;
    }
  }
  {
    final synthesized dynamic #18#0 = o;
    if(#18#0 is core::List<dynamic> && #18#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
      return 19;
    }
  }
  {
    final synthesized dynamic #19#0 = o;
    if(#19#0 is core::bool) {
      return 20;
    }
  }
  {
    final synthesized dynamic #20#0 = o;
    if(#20#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
      return 21;
    }
  }
  {
    final synthesized dynamic #21#0 = o;
    synthesized dynamic #21#4;
    synthesized core::bool #21#4#isSet = false;
    if(#21#0 is core::Map<dynamic, dynamic> && (!((#21#4#isSet ?{dynamic} #21#4{dynamic} : let final dynamic #t44 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #21#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#21#4#isSet ?{dynamic} #21#4{dynamic} : let final dynamic #t45 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
      return 22;
    }
  }
  {
    final synthesized dynamic #22#0 = o;
    synthesized dynamic #22#4;
    synthesized core::bool #22#4#isSet = false;
    if(#22#0 is core::Map<dynamic, dynamic> && (!((#22#4#isSet ?{dynamic} #22#4{dynamic} : let final dynamic #t46 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #22#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#22#4#isSet ?{dynamic} #22#4{dynamic} : let final dynamic #t47 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
      return 23;
    }
  }
  {
    final synthesized dynamic #23#0 = o;
    synthesized dynamic #23#4;
    synthesized core::bool #23#4#isSet = false;
    {
      hoisted dynamic a;
      if(#23#0 is core::Map<dynamic, dynamic> && (!((#23#4#isSet ?{dynamic} #23#4{dynamic} : let final dynamic #t48 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #23#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool})) {
        a = #23#4#isSet ?{dynamic} #23#4{dynamic} : let final dynamic #t49 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic};
        {
          return 24;
        }
      }
    }
  }
  {
    final synthesized dynamic #24#0 = o;
    synthesized dynamic #24#4;
    synthesized core::bool #24#4#isSet = false;
    {
      hoisted core::int b;
      if(#24#0 is core::Map<dynamic, dynamic> && (!((#24#4#isSet ?{dynamic} #24#4{dynamic} : let final dynamic #t50 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #24#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && (#24#4#isSet ?{dynamic} #24#4{dynamic} : let final dynamic #t51 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int) {
        b = (#24#4#isSet ?{dynamic} #24#4{dynamic} : let final dynamic #t52 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int;
        {
          return 25;
        }
      }
    }
  }
  {
    final synthesized dynamic #25#0 = o;
    if(#25#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
      return 26;
    }
  }
  {
    final synthesized dynamic #26#0 = o;
    {
      hoisted dynamic c;
      if(#26#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #26#0{({a: core::Object?, b: core::Object?})}.a{core::Object?}) {
        c = #26#0{({a: core::Object?, b: core::Object?})}.b{core::Object?};
        {
          return 27;
        }
      }
    }
  }
  {
    final synthesized dynamic #27#0 = o;
    {
      hoisted dynamic d;
      if(#27#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #27#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t53 = d = #27#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
        return 28;
      }
    }
  }
  return 0;
}
static method ifCaseElse(dynamic o) → core::int {
  core::print("o = ${o}");
  {
    final synthesized dynamic #0#0 = o;
    if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
      return 1;
    }
    else {
      final synthesized dynamic #1#0 = o;
      synthesized core::Object? #1#2;
      synthesized core::bool #1#2#isSet = false;
      if(#1#0 is ({f: core::Object?}) && ((let final dynamic #t54 = (#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t55 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t56 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t57 = (#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t58 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2{core::Object?} : let final dynamic #t59 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
        return 2;
      }
      else {
        final synthesized dynamic #2#0 = o;
        if(#C4 =={core::num::==}{(core::Object) → core::bool} #2#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) {
          return 3;
        }
        else {
          final synthesized dynamic #3#0 = o;
          synthesized core::Object? #3#2;
          synthesized core::bool #3#2#isSet = false;
          if(#3#0 is ({g: core::Object?}) && (let final dynamic #t60 = (#3#2#isSet ?{core::Object?} #3#2{core::Object?} : let final dynamic #t61 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#3#2#isSet ?{core::Object?} #3#2{core::Object?} : let final dynamic #t62 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
            return 4;
          }
          else {
            final synthesized dynamic #4#0 = o;
            if(#4#0 is ({a: core::Object?}) && (let final dynamic #t63 = #4#0{({a: core::Object?})}.a{core::Object?}! in true)) {
              return 5;
            }
            else {
              final synthesized dynamic #5#0 = o;
              if(#5#0 is ({b: core::Object?}) && (!(#5#0{({b: core::Object?})}.b{core::Object?} == null) && true)) {
                return 6;
              }
              else {
                final synthesized dynamic #6#0 = o;
                if(#6#0 is core::List<dynamic> && #6#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C7 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
                  return 7;
                }
                else {
                  final synthesized dynamic #7#0 = o;
                  if(#7#0 is core::List<dynamic> && #7#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C7 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C2 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
                    return 8;
                  }
                  else {
                    final synthesized dynamic #8#0 = o;
                    synthesized core::int #8#2;
                    synthesized core::bool #8#2#isSet = false;
                    if(#8#0 is core::List<dynamic> && (#8#2#isSet ?{core::int} #8#2{core::int} : let final dynamic #t64 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C2 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C8 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}((#8#2#isSet ?{core::int} #8#2{core::int} : let final dynamic #t65 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
                      return 9;
                    }
                    else {
                      final synthesized dynamic #9#0 = o;
                      synthesized core::List<dynamic> #9#12;
                      synthesized core::bool #9#12#isSet = false;
                      synthesized dynamic #9#15;
                      synthesized core::bool #9#15#isSet = false;
                      synthesized dynamic #9#19;
                      synthesized core::bool #9#19#isSet = false;
                      if(#9#0 is core::List<dynamic> && #9#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C8 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t66 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t67 = (#9#15#isSet ?{dynamic} #9#15{dynamic} : let final dynamic #t68 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t69 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#9#15#isSet ?{dynamic} #9#15{dynamic} : let final dynamic #t70 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t71 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t72 = (#9#19#isSet ?{dynamic} #9#19{dynamic} : let final dynamic #t73 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t74 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#9#19#isSet ?{dynamic} #9#19{dynamic} : let final dynamic #t75 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12{core::List<dynamic>} : let final dynamic #t76 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
                        return 10;
                      }
                      else {
                        final synthesized dynamic #10#0 = o;
                        synthesized core::int #10#2;
                        synthesized core::bool #10#2#isSet = false;
                        synthesized core::List<dynamic> #10#12;
                        synthesized core::bool #10#12#isSet = false;
                        synthesized dynamic #10#16;
                        synthesized core::bool #10#16#isSet = false;
                        synthesized dynamic #10#20;
                        synthesized core::bool #10#20#isSet = false;
                        if(#10#0 is core::List<dynamic> && (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t77 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C3 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C4 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t78 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t79 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t80 = (#10#16#isSet ?{dynamic} #10#16{dynamic} : let final dynamic #t81 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t82 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t83 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#10#16#isSet ?{dynamic} #10#16{dynamic} : let final dynamic #t84 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t85 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t86 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t87 = (#10#20#isSet ?{dynamic} #10#20{dynamic} : let final dynamic #t88 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t89 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t90 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#10#20#isSet ?{dynamic} #10#20{dynamic} : let final dynamic #t91 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12{core::List<dynamic>} : let final dynamic #t92 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t93 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}((#10#2#isSet ?{core::int} #10#2{core::int} : let final dynamic #t94 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
                          return 11;
                        }
                        else {
                          final synthesized dynamic #11#0 = o;
                          if(#11#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} #11#0{self::Class}.{self::Class::field}{core::int}) {
                            return 12;
                          }
                          else {
                            final synthesized dynamic #12#0 = o;
                            if(#12#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #12#0{self::Class}.{self::Class::finalField}{core::int}) {
                              return 13;
                            }
                            else {
                              final synthesized dynamic #13#0 = o;
                              if(#13#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::field}{core::int} && #C8 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::getter}{core::int}) {
                                return 14;
                              }
                              else {
                                final synthesized dynamic #14#0 = o;
                                if(#14#0 is self::Class) {
                                  return 15;
                                }
                                else {
                                  final synthesized dynamic #15#0 = o;
                                  if(#15#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
                                    return 16;
                                  }
                                  else {
                                    final synthesized dynamic #16#0 = o;
                                    if(#16#0 is ({e: core::Object?}) && !(#16#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
                                      return 17;
                                    }
                                    else {
                                      final synthesized dynamic #17#0 = o;
                                      synthesized core::int? #17#4;
                                      synthesized core::bool #17#4#isSet = false;
                                      if(#17#0 is core::Map<core::int, core::int> && (!((#17#4#isSet ?{core::int?} #17#4{core::int?} : let final dynamic #t95 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #17#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && ((#17#4#isSet ?{core::int?} #17#4{core::int?} : let final dynamic #t96 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) as{Unchecked} core::int).{core::num::>=}(#C11){(core::num) → core::bool}) {
                                        return 18;
                                      }
                                      else {
                                        final synthesized dynamic #18#0 = o;
                                        if(#18#0 is core::List<dynamic> && #18#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
                                          return 19;
                                        }
                                        else {
                                          final synthesized dynamic #19#0 = o;
                                          if(#19#0 is core::bool) {
                                            return 20;
                                          }
                                          else {
                                            final synthesized dynamic #20#0 = o;
                                            if(#20#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
                                              return 21;
                                            }
                                            else {
                                              final synthesized dynamic #21#0 = o;
                                              synthesized dynamic #21#4;
                                              synthesized core::bool #21#4#isSet = false;
                                              if(#21#0 is core::Map<dynamic, dynamic> && (!((#21#4#isSet ?{dynamic} #21#4{dynamic} : let final dynamic #t97 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #21#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#21#4#isSet ?{dynamic} #21#4{dynamic} : let final dynamic #t98 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
                                                return 22;
                                              }
                                              else {
                                                final synthesized dynamic #22#0 = o;
                                                synthesized dynamic #22#4;
                                                synthesized core::bool #22#4#isSet = false;
                                                if(#22#0 is core::Map<dynamic, dynamic> && (!((#22#4#isSet ?{dynamic} #22#4{dynamic} : let final dynamic #t99 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #22#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#22#4#isSet ?{dynamic} #22#4{dynamic} : let final dynamic #t100 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
                                                  return 23;
                                                }
                                                else {
                                                  final synthesized dynamic #23#0 = o;
                                                  synthesized dynamic #23#4;
                                                  synthesized core::bool #23#4#isSet = false;
                                                  {
                                                    hoisted dynamic a;
                                                    if(#23#0 is core::Map<dynamic, dynamic> && (!((#23#4#isSet ?{dynamic} #23#4{dynamic} : let final dynamic #t101 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #23#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool})) {
                                                      a = #23#4#isSet ?{dynamic} #23#4{dynamic} : let final dynamic #t102 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic};
                                                      {
                                                        return 24;
                                                      }
                                                    }
                                                    else {
                                                      final synthesized dynamic #24#0 = o;
                                                      synthesized dynamic #24#4;
                                                      synthesized core::bool #24#4#isSet = false;
                                                      {
                                                        hoisted core::int b;
                                                        if(#24#0 is core::Map<dynamic, dynamic> && (!((#24#4#isSet ?{dynamic} #24#4{dynamic} : let final dynamic #t103 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #24#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && (#24#4#isSet ?{dynamic} #24#4{dynamic} : let final dynamic #t104 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int) {
                                                          b = (#24#4#isSet ?{dynamic} #24#4{dynamic} : let final dynamic #t105 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int;
                                                          {
                                                            return 25;
                                                          }
                                                        }
                                                        else {
                                                          final synthesized dynamic #25#0 = o;
                                                          if(#25#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
                                                            return 26;
                                                          }
                                                          else {
                                                            final synthesized dynamic #26#0 = o;
                                                            {
                                                              hoisted dynamic c;
                                                              if(#26#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #26#0{({a: core::Object?, b: core::Object?})}.a{core::Object?}) {
                                                                c = #26#0{({a: core::Object?, b: core::Object?})}.b{core::Object?};
                                                                {
                                                                  return 27;
                                                                }
                                                              }
                                                              else {
                                                                final synthesized dynamic #27#0 = o;
                                                                {
                                                                  hoisted dynamic d;
                                                                  if(#27#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #27#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t106 = d = #27#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
                                                                    return 28;
                                                                  }
                                                                  else {
                                                                    return 0;
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
static method switchStatement(dynamic o) → core::int {
  core::print("o = ${o}");
  #L1:
  {
    final synthesized dynamic #0#0 = o;
    synthesized core::Object? #0#4;
    synthesized core::bool #0#4#isSet = false;
    synthesized core::Object? #0#15;
    synthesized core::bool #0#15#isSet = false;
    synthesized core::Object? #0#20;
    synthesized core::bool #0#20#isSet = false;
    synthesized core::Object? #0#23;
    synthesized core::bool #0#23#isSet = false;
    synthesized core::int #0#26;
    synthesized core::bool #0#26#isSet = false;
    synthesized dynamic #0#30;
    synthesized core::bool #0#30#isSet = false;
    synthesized dynamic #0#32;
    synthesized core::bool #0#32#isSet = false;
    synthesized core::bool #0#34;
    synthesized core::bool #0#34#isSet = false;
    synthesized core::bool #0#38;
    synthesized core::bool #0#38#isSet = false;
    synthesized dynamic #0#43;
    synthesized core::bool #0#43#isSet = false;
    synthesized core::List<dynamic> #0#47;
    synthesized core::bool #0#47#isSet = false;
    synthesized dynamic #0#50;
    synthesized core::bool #0#50#isSet = false;
    synthesized dynamic #0#53;
    synthesized core::bool #0#53#isSet = false;
    synthesized core::List<dynamic> #0#58;
    synthesized core::bool #0#58#isSet = false;
    synthesized dynamic #0#61;
    synthesized core::bool #0#61#isSet = false;
    synthesized dynamic #0#64;
    synthesized core::bool #0#64#isSet = false;
    synthesized core::int #0#69;
    synthesized core::bool #0#69#isSet = false;
    synthesized core::int? #0#84;
    synthesized core::bool #0#84#isSet = false;
    synthesized dynamic #0#92;
    synthesized core::bool #0#92#isSet = false;
    synthesized dynamic #0#94;
    synthesized core::bool #0#94#isSet = false;
    synthesized dynamic #0#96;
    synthesized core::bool #0#96#isSet = false;
    synthesized dynamic #0#98;
    synthesized core::bool #0#98#isSet = false;
    {
      if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
        {
          return 1;
        }
      }
    }
    {
      if(#0#0 is ({f: core::Object?}) && ((let final dynamic #t107 = (#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t108 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t109 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t110 = (#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t111 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t112 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
        {
          return 2;
        }
      }
    }
    {
      if(#C4 =={core::num::==}{(core::Object) → core::bool} #0#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #0#0) {
        {
          return 3;
        }
      }
    }
    {
      if(#0#0 is ({g: core::Object?}) && (let final dynamic #t113 = (#0#15#isSet ?{core::Object?} #0#15{core::Object?} : let final dynamic #t114 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#0#15#isSet ?{core::Object?} #0#15{core::Object?} : let final dynamic #t115 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
        {
          return 4;
        }
      }
    }
    {
      if(#0#0 is ({a: core::Object?}) && (let final dynamic #t116 = (#0#20#isSet ?{core::Object?} #0#20{core::Object?} : let final dynamic #t117 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?})}.a{core::Object?})! in true)) {
        {
          return 5;
        }
      }
    }
    {
      if(#0#0 is ({b: core::Object?}) && (!((#0#23#isSet ?{core::Object?} #0#23{core::Object?} : let final dynamic #t118 = #0#23#isSet = true in #0#23 = #0#0{({b: core::Object?})}.b{core::Object?}) == null) && true)) {
        {
          return 6;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t119 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t120 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t121 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
        {
          return 7;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34{core::bool} : let final dynamic #t122 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t123 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t124 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t125 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
        {
          return 8;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38{core::bool} : let final dynamic #t126 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t127 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t128 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t129 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43{dynamic} : let final dynamic #t130 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t131 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
        {
          return 9;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34{core::bool} : let final dynamic #t132 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t133 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t134 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t135 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t136 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t137 = (#0#50#isSet ?{dynamic} #0#50{dynamic} : let final dynamic #t138 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t139 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#50#isSet ?{dynamic} #0#50{dynamic} : let final dynamic #t140 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t141 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t142 = (#0#53#isSet ?{dynamic} #0#53{dynamic} : let final dynamic #t143 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t144 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#53#isSet ?{dynamic} #0#53{dynamic} : let final dynamic #t145 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t146 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
        {
          return 10;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38{core::bool} : let final dynamic #t147 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t148 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t149 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C4 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t150 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t151 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t152 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t153 = (#0#61#isSet ?{dynamic} #0#61{dynamic} : let final dynamic #t154 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t155 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t156 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#61#isSet ?{dynamic} #0#61{dynamic} : let final dynamic #t157 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t158 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t159 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t160 = (#0#64#isSet ?{dynamic} #0#64{dynamic} : let final dynamic #t161 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t162 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t163 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#64#isSet ?{dynamic} #0#64{dynamic} : let final dynamic #t164 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t165 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t166 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43{dynamic} : let final dynamic #t167 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t168 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
        {
          return 11;
        }
      }
    }
    {
      if(#0#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69{core::int} : let final dynamic #t169 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int})) {
        {
          return 12;
        }
      }
    }
    {
      if(#0#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::finalField}{core::int}) {
        {
          return 13;
        }
      }
    }
    {
      if(#0#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69{core::int} : let final dynamic #t170 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int}) && #C8 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::getter}{core::int}) {
        {
          return 14;
        }
      }
    }
    {
      if(#0#0 is self::Class) {
        {
          return 15;
        }
      }
    }
    {
      if(#0#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
        {
          return 16;
        }
      }
    }
    {
      if(#0#0 is ({e: core::Object?}) && !(#0#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
        {
          return 17;
        }
      }
    }
    {
      if(#0#0 is core::Map<core::int, core::int> && (!((#0#84#isSet ?{core::int?} #0#84{core::int?} : let final dynamic #t171 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #0#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && ((#0#84#isSet ?{core::int?} #0#84{core::int?} : let final dynamic #t172 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) as{Unchecked} core::int).{core::num::>=}(#C11){(core::num) → core::bool}) {
        {
          return 18;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t173 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C1) {
        {
          return 19;
        }
      }
    }
    {
      if(#0#0 is core::bool) {
        {
          return 20;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
        {
          return 21;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#92#isSet ?{dynamic} #0#92{dynamic} : let final dynamic #t174 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#0#92#isSet ?{dynamic} #0#92{dynamic} : let final dynamic #t175 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
        {
          return 22;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#94#isSet ?{dynamic} #0#94{dynamic} : let final dynamic #t176 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#0#94#isSet ?{dynamic} #0#94{dynamic} : let final dynamic #t177 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
        {
          return 23;
        }
      }
    }
    {
      hoisted dynamic a;
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#96#isSet ?{dynamic} #0#96{dynamic} : let final dynamic #t178 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool}) && (let final dynamic #t179 = a = #0#96#isSet ?{dynamic} #0#96{dynamic} : let final dynamic #t180 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic} in true)) {
        {
          return 24;
        }
      }
    }
    {
      hoisted core::int b;
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#98#isSet ?{dynamic} #0#98{dynamic} : let final dynamic #t181 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && ((#0#98#isSet ?{dynamic} #0#98{dynamic} : let final dynamic #t182 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int && (let final dynamic #t183 = b = (#0#98#isSet ?{dynamic} #0#98{dynamic} : let final dynamic #t184 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int in true))) {
        {
          return 25;
        }
      }
    }
    {
      if(#0#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
        {
          return 26;
        }
      }
    }
    {
      hoisted dynamic c;
      if(#0#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} (#0#20#isSet ?{core::Object?} #0#20{core::Object?} : let final dynamic #t185 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?, b: core::Object?})}.a{core::Object?}) && (let final dynamic #t186 = c = #0#23#isSet ?{core::Object?} #0#23{core::Object?} : let final dynamic #t187 = #0#23#isSet = true in #0#23 = #0#0{({a: core::Object?, b: core::Object?})}.b{core::Object?} in true)) {
        {
          return 27;
        }
      }
    }
    {
      hoisted dynamic d;
      if(#0#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t188 = d = #0#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
        {
          return 28;
        }
      }
    }
    {
      {
        {
          return 0;
        }
      }
    }
  }
}
static method switchExpression(dynamic o) → core::int {
  core::print("o = ${o}");
  return block {
    core::int #t189;
    final synthesized dynamic #0#0 = o;
    synthesized core::Object? #0#4;
    synthesized core::bool #0#4#isSet = false;
    synthesized core::Object? #0#15;
    synthesized core::bool #0#15#isSet = false;
    synthesized core::Object? #0#20;
    synthesized core::bool #0#20#isSet = false;
    synthesized core::Object? #0#23;
    synthesized core::bool #0#23#isSet = false;
    synthesized core::int #0#26;
    synthesized core::bool #0#26#isSet = false;
    synthesized dynamic #0#30;
    synthesized core::bool #0#30#isSet = false;
    synthesized dynamic #0#32;
    synthesized core::bool #0#32#isSet = false;
    synthesized core::bool #0#34;
    synthesized core::bool #0#34#isSet = false;
    synthesized core::bool #0#38;
    synthesized core::bool #0#38#isSet = false;
    synthesized dynamic #0#43;
    synthesized core::bool #0#43#isSet = false;
    synthesized core::List<dynamic> #0#47;
    synthesized core::bool #0#47#isSet = false;
    synthesized dynamic #0#50;
    synthesized core::bool #0#50#isSet = false;
    synthesized dynamic #0#53;
    synthesized core::bool #0#53#isSet = false;
    synthesized core::List<dynamic> #0#58;
    synthesized core::bool #0#58#isSet = false;
    synthesized dynamic #0#61;
    synthesized core::bool #0#61#isSet = false;
    synthesized dynamic #0#64;
    synthesized core::bool #0#64#isSet = false;
    synthesized core::int #0#69;
    synthesized core::bool #0#69#isSet = false;
    synthesized core::int? #0#84;
    synthesized core::bool #0#84#isSet = false;
    synthesized dynamic #0#92;
    synthesized core::bool #0#92#isSet = false;
    synthesized dynamic #0#94;
    synthesized core::bool #0#94#isSet = false;
    synthesized dynamic #0#96;
    synthesized core::bool #0#96#isSet = false;
    synthesized dynamic #0#98;
    synthesized core::bool #0#98#isSet = false;
    #L2:
    {
      {
        if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
          #t189 = 1;
          break #L2;
        }
      }
      {
        if(#0#0 is ({f: core::Object?}) && ((let final dynamic #t190 = (#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t191 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t192 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t193 = (#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t194 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4{core::Object?} : let final dynamic #t195 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
          #t189 = 2;
          break #L2;
        }
      }
      {
        if(#C4 =={core::num::==}{(core::Object) → core::bool} #0#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #0#0) {
          #t189 = 3;
          break #L2;
        }
      }
      {
        if(#0#0 is ({g: core::Object?}) && (let final dynamic #t196 = (#0#15#isSet ?{core::Object?} #0#15{core::Object?} : let final dynamic #t197 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#0#15#isSet ?{core::Object?} #0#15{core::Object?} : let final dynamic #t198 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
          #t189 = 4;
          break #L2;
        }
      }
      {
        if(#0#0 is ({a: core::Object?}) && (let final dynamic #t199 = (#0#20#isSet ?{core::Object?} #0#20{core::Object?} : let final dynamic #t200 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?})}.a{core::Object?})! in true)) {
          #t189 = 5;
          break #L2;
        }
      }
      {
        if(#0#0 is ({b: core::Object?}) && (!((#0#23#isSet ?{core::Object?} #0#23{core::Object?} : let final dynamic #t201 = #0#23#isSet = true in #0#23 = #0#0{({b: core::Object?})}.b{core::Object?}) == null) && true)) {
          #t189 = 6;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t202 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t203 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t204 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
          #t189 = 7;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34{core::bool} : let final dynamic #t205 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t206 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t207 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t208 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
          #t189 = 8;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38{core::bool} : let final dynamic #t209 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t210 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t211 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t212 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43{dynamic} : let final dynamic #t213 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t214 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
          #t189 = 9;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34{core::bool} : let final dynamic #t215 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t216 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t217 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t218 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t219 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t220 = (#0#50#isSet ?{dynamic} #0#50{dynamic} : let final dynamic #t221 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t222 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#50#isSet ?{dynamic} #0#50{dynamic} : let final dynamic #t223 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t224 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t225 = (#0#53#isSet ?{dynamic} #0#53{dynamic} : let final dynamic #t226 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t227 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#53#isSet ?{dynamic} #0#53{dynamic} : let final dynamic #t228 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47{core::List<dynamic>} : let final dynamic #t229 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
          #t189 = 10;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38{core::bool} : let final dynamic #t230 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t231 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30{dynamic} : let final dynamic #t232 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C4 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32{dynamic} : let final dynamic #t233 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t234 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t235 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t236 = (#0#61#isSet ?{dynamic} #0#61{dynamic} : let final dynamic #t237 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t238 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t239 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#61#isSet ?{dynamic} #0#61{dynamic} : let final dynamic #t240 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t241 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t242 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t243 = (#0#64#isSet ?{dynamic} #0#64{dynamic} : let final dynamic #t244 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t245 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t246 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#64#isSet ?{dynamic} #0#64{dynamic} : let final dynamic #t247 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58{core::List<dynamic>} : let final dynamic #t248 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t249 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43{dynamic} : let final dynamic #t250 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t251 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
          #t189 = 11;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69{core::int} : let final dynamic #t252 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int})) {
          #t189 = 12;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::finalField}{core::int}) {
          #t189 = 13;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69{core::int} : let final dynamic #t253 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int}) && #C8 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::getter}{core::int}) {
          #t189 = 14;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class) {
          #t189 = 15;
          break #L2;
        }
      }
      {
        if(#0#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
          #t189 = 16;
          break #L2;
        }
      }
      {
        if(#0#0 is ({e: core::Object?}) && !(#0#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
          #t189 = 17;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<core::int, core::int> && (!((#0#84#isSet ?{core::int?} #0#84{core::int?} : let final dynamic #t254 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #0#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && ((#0#84#isSet ?{core::int?} #0#84{core::int?} : let final dynamic #t255 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) as{Unchecked} core::int).{core::num::>=}(#C11){(core::num) → core::bool}) {
          #t189 = 18;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26{core::int} : let final dynamic #t256 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C1) {
          #t189 = 19;
          break #L2;
        }
      }
      {
        if(#0#0 is core::bool) {
          #t189 = 20;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
          #t189 = 21;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#92#isSet ?{dynamic} #0#92{dynamic} : let final dynamic #t257 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#0#92#isSet ?{dynamic} #0#92{dynamic} : let final dynamic #t258 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
          #t189 = 22;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#94#isSet ?{dynamic} #0#94{dynamic} : let final dynamic #t259 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#0#94#isSet ?{dynamic} #0#94{dynamic} : let final dynamic #t260 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
          #t189 = 23;
          break #L2;
        }
      }
      {
        hoisted dynamic a;
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#96#isSet ?{dynamic} #0#96{dynamic} : let final dynamic #t261 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool})) {
          a = #0#96#isSet ?{dynamic} #0#96{dynamic} : let final dynamic #t262 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic};
          #t189 = 24;
          break #L2;
        }
      }
      {
        hoisted core::int b;
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#98#isSet ?{dynamic} #0#98{dynamic} : let final dynamic #t263 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && (#0#98#isSet ?{dynamic} #0#98{dynamic} : let final dynamic #t264 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int) {
          b = (#0#98#isSet ?{dynamic} #0#98{dynamic} : let final dynamic #t265 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int;
          #t189 = 25;
          break #L2;
        }
      }
      {
        if(#0#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
          #t189 = 26;
          break #L2;
        }
      }
      {
        hoisted dynamic c;
        if(#0#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} (#0#20#isSet ?{core::Object?} #0#20{core::Object?} : let final dynamic #t266 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?, b: core::Object?})}.a{core::Object?})) {
          c = #0#23#isSet ?{core::Object?} #0#23{core::Object?} : let final dynamic #t267 = #0#23#isSet = true in #0#23 = #0#0{({a: core::Object?, b: core::Object?})}.b{core::Object?};
          #t189 = 27;
          break #L2;
        }
      }
      {
        hoisted dynamic d;
        if(#0#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t268 = d = #0#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
          #t189 = 28;
          break #L2;
        }
      }
      {
        if(true) {
          #t189 = 0;
          break #L2;
        }
      }
    }
  } =>#t189;
}
static method test(dynamic expected, dynamic value) → dynamic {
  self::expect(expected, self::ifCase(value));
  self::expect(expected, self::ifCaseElse(value));
  self::expect(expected, self::switchStatement(value));
  self::expect(expected, self::switchExpression(value));
}
static method main() → dynamic {
  self::test(0, 0);
  self::test(1, 1);
  self::test(2, ({f: 3}));
  self::test(2, ({f: 4}));
  self::test(3, 6);
  self::test(3, 7);
  self::test(4, ({g: 8}));
  self::test(5, ({a: 1}));
  self::test(6, ({b: 2}));
  self::test(0, ({b: null}));
  self::test(0, <core::int>[1, 3]);
  self::test(7, <core::int>[1, 2]);
  self::test(8, <core::int>[2, 3]);
  self::test(8, <core::int>[2, 3, 4]);
  self::test(8, <core::int>[2, 3, 4, 5]);
  self::test(9, <core::int>[3, 4, 5]);
  self::test(9, <core::int>[3, 4, 6, 5]);
  self::test(10, <core::int>[4, 5, 0, 3]);
  self::test(11, <core::int>[5, 6, 0, 3, 7]);
  self::test(12, new self::Class::•(1, 0));
  self::test(12, new self::Class::•(1, 1));
  self::test(12, new self::Class::•(1, 2));
  self::test(13, new self::Class::•(0, 2));
  self::test(13, new self::Class::•(2, 2));
  self::test(14, new self::Class::•(3, 4));
  self::test(15, new self::Class::•(3, 5));
  self::test(15, new self::Class::•(4, 5));
  self::test(16, "foo");
  self::test(17, ({e: "baz"}));
  self::test(0, ({e: "bar"}));
  self::test(18, <core::int, core::int>{5: 16});
  self::test(18, <core::int, core::int>{5: 17});
  self::test(19, <core::bool>[true]);
  self::test(19, <core::String>["foo"]);
  self::test(20, true);
  self::test(20, false);
  self::test(21, <dynamic, dynamic>{});
  self::test(22, <core::int, core::int>{0: 0});
  self::test(22, <core::int, core::int>{0: 1});
  self::test(0, <core::int, core::String>{0: "foo"});
  self::test(23, <core::int, core::String>{1: "foo"});
  self::test(23, <core::int, core::String>{1: "foo", 2: "bar"});
  self::test(0, <core::int, core::int>{1: 0});
  self::test(24, <core::int, core::String>{2: "foo"});
  self::test(24, <core::int, core::int>{2: 0});
  self::test(25, <core::int, core::int>{3: 0});
  self::test(0, <core::int, core::String>{3: "foo"});
  self::test(26, (0, 1));
  self::test(27, ({a: 0, b: 1}));
  self::test(27, ({a: 0, b: "foo"}));
  self::test(28, ({c: 0, d: 1}));
  self::test(28, ({c: 0, d: 2}));
  self::test(0, ({c: 0, d: "foo"}));
  core::print("success");
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  core::print("${expected} = ${actual} ?");
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
    throw "Expected ${expected}, actual ${actual}";
  }
}

constants  {
  #C1 = 1
  #C2 = 3
  #C3 = 5
  #C4 = 6
  #C5 = 7
  #C6 = 8
  #C7 = 2
  #C8 = 4
  #C9 = "foo"
  #C10 = "bar"
  #C11 = 16
  #C12 = 0
}
