library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method main() → dynamic {
  core::List<core::int>? list = null;
  core::print( block {
    final core::List<core::int> #t1 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t2 = list;
    if(!(#t2 == null))
      #t1.{core::List::addAll}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t1.{core::List::add}(3){(core::int) → void};
  } =>#t1);
  core::print( block {
    final core::List<core::int> #t3 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t4 = null;
    if(!(#t4 == null))
      #t3.{core::List::addAll}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t3.{core::List::add}(3){(core::int) → void};
  } =>#t3);
  core::List<core::int> list1 = block {
    final core::List<core::int> #t5 = core::_GrowableList::•<core::int>(0);
    final core::Iterable<core::int>? #t6 = list;
    if(!(#t6 == null))
      #t5.{core::List::addAll}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
  } =>#t5;
  core::List<Never> list2 = block {
    final core::List<Never> #t7 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t8 = null;
    if(!(#t8 == null))
      #t7.{core::List::addAll}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#t7;
  core::List<core::int> list3 = block {
    final core::List<core::int> #t9 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t10 = list;
    if(!(#t10 == null))
      #t9.{core::List::addAll}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t9.{core::List::add}(3){(core::int) → void};
  } =>#t9;
  core::List<core::int> list4 = block {
    final core::List<core::int> #t11 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t12 = null;
    if(!(#t12 == null))
      #t11.{core::List::addAll}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t11.{core::List::add}(3){(core::int) → void};
  } =>#t11;
  core::Set<core::int>? set = null;
  core::print( block {
    final core::Set<core::int> #t13 = new col::_CompactLinkedHashSet::•<core::int>();
    #t13.{core::Set::add}(1){(core::int) → core::bool};
    #t13.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t14 = set;
    if(!(#t14 == null))
      #t13.{core::Set::addAll}(#t14{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t13.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t13);
  core::print( block {
    final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
    #t15.{core::Set::add}(1){(core::int) → core::bool};
    #t15.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t16 = null;
    if(!(#t16 == null))
      #t15.{core::Set::addAll}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t15.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t15);
  core::Set<core::int> set1 = block {
    final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t18 = set;
    if(!(#t18 == null)) {
      core::Iterator<dynamic> :sync-for-iterator = #t18{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t19 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
          #t17.{core::Set::add}(#t20){(core::int) → core::bool};
        }
      }
    }
  } =>#t17;
  core::Set<core::int> set3 = block {
    final core::Set<core::int> #t21 = new col::_CompactLinkedHashSet::•<core::int>();
    #t21.{core::Set::add}(1){(core::int) → core::bool};
    #t21.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t22 = set;
    if(!(#t22 == null))
      #t21.{core::Set::addAll}(#t22{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t21.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t21;
  core::Set<core::int> set4 = block {
    final core::Set<core::int> #t23 = new col::_CompactLinkedHashSet::•<core::int>();
    #t23.{core::Set::add}(1){(core::int) → core::bool};
    #t23.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t24 = null;
    if(!(#t24 == null))
      #t23.{core::Set::addAll}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t23.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t23;
  core::Map<core::int, core::int>? map = null;
  core::print( block {
    final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
    #t25.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t25.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t26 = map;
    if(!(#t26 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::int, core::int> #t27 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t25.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t25);
  core::print( block {
    final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
    #t28.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t28.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t29 = null;
    if(!(#t29 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::int, core::int> #t30 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
        #t28.{core::Map::[]=}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t28.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t28);
  core::Map<core::int, core::int> map1 = block {
    final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
    final core::Map<core::int, core::int>? #t32 = map;
    if(!(#t32 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::int, core::int> #t33 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
        #t31.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
  } =>#t31;
  core::Map<core::int, core::int> map3 = block {
    final core::Map<core::int, core::int> #t34 = <core::int, core::int>{};
    #t34.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t34.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t35 = map;
    if(!(#t35 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::int, core::int> #t36 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
        #t34.{core::Map::[]=}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t34.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t34;
  core::Map<core::int, core::int> map4 = block {
    final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
    #t37.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t37.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t38 = null;
    if(!(#t38 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::int, core::int> #t39 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
        #t37.{core::Map::[]=}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t37.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t37;
}
