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

static method main() → dynamic {
  core::List<core::int> list1 = <core::int>[0];
  core::List<core::int?> list2 = <core::int?>[0];
  dynamic list3 = <core::int>[0];
  core::List<core::int?> list = block {
    final core::List<core::int?> #t1 = <core::int?>[0];
    #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int?>) → void};
    #t1.{core::List::addAll}{Invariant}(list2){(core::Iterable<core::int?>) → void};
    for (final has-declared-initializer dynamic #t2 in list3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
      final core::int? #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int?;
      #t1.{core::List::add}{Invariant}(#t3){(core::int?) → void};
    }
    if(true)
      #t1.{core::List::add}{Invariant}(2){(core::int?) → void};
  } =>#t1;
  core::Set<core::int> set1 = block {
    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
    #t4.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
  } =>#t4;
  core::Set<core::int?> set2 = block {
    final core::Set<core::int?> #t5 = col::LinkedHashSet::•<core::int?>();
    #t5.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
  } =>#t5;
  dynamic set3 = block {
    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
    #t6.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
  } =>#t6;
  core::Set<core::int?> set = block {
    final core::Set<core::int?> #t7 = col::LinkedHashSet::•<core::int?>();
    #t7.{core::Set::add}{Invariant}(0){(core::int?) → core::bool};
    #t7.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int?>) → void};
    #t7.{core::Set::addAll}{Invariant}(set2){(core::Iterable<core::int?>) → void};
    for (final has-declared-initializer dynamic #t8 in set3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
      final core::int? #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int?;
      #t7.{core::Set::add}{Invariant}(#t9){(core::int?) → core::bool};
    }
    if(true)
      #t7.{core::Set::add}{Invariant}(2){(core::int?) → core::bool};
  } =>#t7;
  core::Map<core::int, core::String> map1 = <core::int, core::String>{0: "foo"};
  core::Map<core::int?, core::String?> map2 = <core::int?, core::String?>{0: "bar"};
  dynamic map3 = <core::int, core::String>{0: "baz"};
  core::Map<core::int?, core::String?> map = block {
    final core::Map<core::int?, core::String?> #t10 = <core::int?, core::String?>{};
    #t10.{core::Map::[]=}{Invariant}(0, "foo"){(core::int?, core::String?) → void};
    #t10.{core::Map::addAll}{Invariant}(map1){(core::Map<core::int?, core::String?>) → void};
    #t10.{core::Map::addAll}{Invariant}(map2){(core::Map<core::int?, core::String?>) → void};
    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t11 in (map3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::int?, core::String?>>}) {
      final core::int? #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
      final core::String? #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::String?;
      #t10.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int?, core::String?) → void};
    }
    if(true)
      #t10.{core::Map::[]=}{Invariant}(2, "baz"){(core::int?, core::String?) → void};
  } =>#t10;
}
