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

static method main() → void {
  core::List<core::int> list = <core::int>[1, 2, 3];
  core::print(self::subs<core::int>(list));
}
static method subs<A extends core::Object? = dynamic>(core::List<self::subs::A%> list) → core::List<core::List<self::subs::A%>>
  return block {
    core::List<core::List<self::subs::A%>> #t1;
    final synthesized core::List<self::subs::A%> #0#0 = list;
    synthesized core::int #0#1;
    synthesized core::bool #0#1#isSet = false;
    #L1:
    {
      {
        if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t2 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) {
          #t1 = <core::List<self::subs::A%>>[];
          break #L1;
        }
      }
      {
        hoisted self::subs::A% x;
        hoisted core::List<self::subs::A%> xs;
        if((#0#1#isSet ?{core::int} #0#1{core::int} : let final dynamic #t3 = #0#1#isSet = true in #0#1 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) {
          x = #0#0.{core::List::[]}(0){(core::int) → self::subs::A%};
          xs = #0#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::subs::A%>};
          #t1 = block {
            final core::List<core::List<self::subs::A%>> #t4 = <core::List<self::subs::A%>>[];
            for (core::List<self::subs::A%> ys in self::subs<self::subs::A%>(xs))
              #t4.{core::List::addAll}{Invariant}(<core::List<self::subs::A%>>[<self::subs::A%>[x].{core::List::+}(ys){(core::List<self::subs::A%>) → core::List<self::subs::A%>}, ys]){(core::Iterable<core::List<self::subs::A%>>) → void};
            #t4.{core::List::add}{Invariant}(<self::subs::A%>[x]){(core::List<self::subs::A%>) → void};
          } =>#t4;
          break #L1;
        }
      }
    }
  } =>#t1;

constants  {
  #C1 = 0
  #C2 = 1
}
