library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
// Try providing type arguments for the literal explicitly to disambiguate it.
//   dynamic map21ambiguous = {...(mapSpread as dynamic)};
//                            ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
//   dynamic map24ambiguous = {...spread, ...mapSpread};
//                            ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
//  - 'List' is from 'dart:core'.
//   int lhs30 = /*@typeArgs=int*/ [...spread];
//                                 ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
//  - 'Set' is from 'dart:core'.
//   int set30 = /*@typeArgs=int*/ {...spread, 42};
//                                 ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
//  - 'Set' is from 'dart:core'.
//       {...spread};
//       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
//  - 'Map' is from 'dart:core'.
//       {...mapSpread, "baz": 42};
//       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
//  - 'Map' is from 'dart:core'.
//       {...mapSpread};
//       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
//   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
//                                      ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
//   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
//                                     ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
//   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
//                                                       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
//                                      ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
//                                      ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
//                                     ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
//                                     ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
//   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
//                                                       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
//   List<String> lhs60 = <String>[...spread];
//                                    ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
//   Set<String> set60 = <String>{...spread};
//                                   ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
//   Map<int, int> map60 = <int, int>{...mapSpread};
//                                       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
//   Map<String, String> map61 = <String, String>{...mapSpread};
//                                                   ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:127:30: Error: Can't spread a value with static type 'Null'.
//   List<int> lhs70 = <int>[...null];
//                              ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:129:29: Error: Can't spread a value with static type 'Null'.
//   Set<int> set70 = <int>{...null};
//                             ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:133:8: Error: Can't spread a value with static type 'Null'.
//     ...null,
//        ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:138:45: Error: Can't spread a value with static type 'Null'.
//   Map<String, int> map70 = <String, int>{...null};
//                                             ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
//   List<int> list100 = <int>[...listNum];
//                                ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
//   Map<num, int> map100 = <num, int>{...mapIntNum};
//                                        ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method bar<K extends core::Object? = dynamic, V extends core::Object? = dynamic>() → core::Map<self::bar::K%, self::bar::V%>
  return throw "";
static method foo(dynamic dynVar) → dynamic {
  core::List<core::int> spread = core::_GrowableList::_literal3<core::int>(1, 2, 3);
  core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
  core::int notSpreadInt = 42;
  has-declared-initializer () →? core::int notSpreadFunction = null;
  core::Map<core::int, core::num> mapIntNum = <core::int, core::num>{42: 42};
  core::List<core::num> listNum = core::_GrowableList::_literal1<core::num>(42);
  core::List<dynamic> lhs10 = block {
    final core::List<dynamic> #t1 = core::List::of<dynamic>(core::_GrowableList::•<dynamic>(0));
  } =>#t1;
  core::Set<dynamic> set10 = block {
    final core::Set<dynamic> #t2 = col::LinkedHashSet::of<dynamic>(core::_GrowableList::•<dynamic>(0));
  } =>#t2;
  core::Map<dynamic, dynamic> map10 = block {
    final core::Map<dynamic, dynamic> #t3 = col::LinkedHashMap::of<dynamic, dynamic>(<dynamic, dynamic>{});
  } =>#t3;
  core::Map<dynamic, dynamic> map10ambiguous = block {
    final core::Map<dynamic, dynamic> #t4 = col::LinkedHashMap::of<dynamic, dynamic>(<dynamic, dynamic>{});
  } =>#t4;
  core::List<core::int> lhs20 = block {
    final core::List<core::int> #t5 = core::List::of<core::int>(spread);
  } =>#t5;
  core::Set<core::int> set20 = block {
    final core::Set<core::int> #t6 = col::LinkedHashSet::of<core::int>(spread);
    #t6.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
  } =>#t6;
  core::Set<core::int> set20ambiguous = block {
    final core::Set<core::int> #t7 = col::LinkedHashSet::of<core::int>(spread);
  } =>#t7;
  core::Map<core::String, core::int> map20 = block {
    final core::Map<core::String, core::int> #t8 = col::LinkedHashMap::of<core::String, core::int>(mapSpread);
    #t8.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
  } =>#t8;
  core::Map<core::String, core::int> map20ambiguous = block {
    final core::Map<core::String, core::int> #t9 = col::LinkedHashMap::of<core::String, core::int>(mapSpread);
  } =>#t9;
  core::List<dynamic> lhs21 = block {
    final core::List<dynamic> #t10 = core::List::of<dynamic>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>);
  } =>#t10;
  core::Set<dynamic> set21 = block {
    final core::Set<dynamic> #t11 = col::LinkedHashSet::of<dynamic>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>);
    #t11.{core::Set::add}{Invariant}(42){(dynamic) → core::bool};
  } =>#t11;
  core::Map<dynamic, dynamic> map21 = block {
    final core::Map<dynamic, dynamic> #t12 = col::LinkedHashMap::of<dynamic, dynamic>((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>);
    #t12.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) → void};
  } =>#t12;
  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
Try providing type arguments for the literal explicitly to disambiguate it.
  dynamic map21ambiguous = {...(mapSpread as dynamic)};
                           ^";
  core::List<core::int> lhs22 = block {
    final core::List<core::int> #t13 = core::List::of<core::int>(core::_GrowableList::•<core::int>(0));
  } =>#t13;
  core::Set<core::int> set22 = block {
    final core::Set<core::int> #t14 = col::LinkedHashSet::of<core::int>(core::_GrowableList::•<core::int>(0));
    #t14.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
  } =>#t14;
  core::Set<core::int> set22ambiguous = block {
    final core::Set<core::int> #t15 = col::LinkedHashSet::of<core::int>(core::_GrowableList::•<core::int>(0));
  } =>#t15;
  core::Map<core::String, core::int> map22 = block {
    final core::Map<core::String, core::int> #t16 = col::LinkedHashMap::of<core::String, core::int>(<core::String, core::int>{});
  } =>#t16;
  core::List<core::List<core::int>> lhs23 = block {
    final core::List<core::List<core::int>> #t17 = core::List::of<core::List<core::int>>(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0)));
  } =>#t17;
  core::Set<core::List<core::int>> set23 = block {
    final core::Set<core::List<core::int>> #t18 = col::LinkedHashSet::of<core::List<core::int>>(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0)));
    #t18.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>) → core::bool};
  } =>#t18;
  core::Set<core::List<core::int>> set23ambiguous = block {
    final core::Set<core::List<core::int>> #t19 = col::LinkedHashSet::of<core::List<core::int>>(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0)));
  } =>#t19;
  core::Map<core::String, core::List<core::int>> map23 = block {
    final core::Map<core::String, core::List<core::int>> #t20 = col::LinkedHashMap::of<core::String, core::List<core::int>>(<core::String, core::List<core::int>>{"baz": core::_GrowableList::•<core::int>(0)});
  } =>#t20;
  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
  dynamic map24ambiguous = {...spread, ...mapSpread};
                           ^";
  core::int lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
 - 'List' is from 'dart:core'.
  int lhs30 = /*@typeArgs=int*/ [...spread];
                                ^" in ( block {
    final core::List<core::int> #t21 = core::List::of<core::int>(spread);
  } =>#t21) as{TypeError} core::int;
  core::int set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 - 'Set' is from 'dart:core'.
  int set30 = /*@typeArgs=int*/ {...spread, 42};
                                ^" in ( block {
    final core::Set<core::int> #t22 = col::LinkedHashSet::of<core::int>(spread);
    #t22.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
  } =>#t22) as{TypeError} core::int;
  core::int set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 - 'Set' is from 'dart:core'.
      {...spread};
      ^" in ( block {
    final core::Set<core::int> #t23 = col::LinkedHashSet::of<core::int>(spread);
  } =>#t23) as{TypeError} core::int;
  core::int map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 - 'Map' is from 'dart:core'.
      {...mapSpread, \"baz\": 42};
      ^" in ( block {
    final core::Map<core::String, core::int> #t24 = col::LinkedHashMap::of<core::String, core::int>(mapSpread);
    #t24.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
  } =>#t24) as{TypeError} core::int;
  core::int map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 - 'Map' is from 'dart:core'.
      {...mapSpread};
      ^" in ( block {
    final core::Map<core::String, core::int> #t25 = col::LinkedHashMap::of<core::String, core::int>(mapSpread);
  } =>#t25) as{TypeError} core::int;
  core::List<dynamic> lhs40 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                     ^");
  core::Set<dynamic> set40 = block {
    final core::Set<dynamic> #t26 = new col::_Set::•<dynamic>();
    #t26.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                    ^"){(dynamic) → core::bool};
  } =>#t26;
  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
  Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
                                                      ^": null};
  core::List<dynamic> lhs50 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                     ^");
  core::Set<dynamic> set50 = block {
    final core::Set<dynamic> #t27 = new col::_Set::•<dynamic>();
    #t27.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                    ^"){(dynamic) → core::bool};
  } =>#t27;
  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
  Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
                                                      ^": null};
  core::List<core::String> lhs60 = core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
  List<String> lhs60 = <String>[...spread];
                                   ^");
  core::Set<core::String> set60 = block {
    final core::Set<core::String> #t28 = new col::_Set::•<core::String>();
    #t28.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
  Set<String> set60 = <String>{...spread};
                                  ^"){(core::String) → core::bool};
  } =>#t28;
  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
  Map<int, int> map60 = <int, int>{...mapSpread};
                                      ^": null};
  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
  Map<String, String> map61 = <String, String>{...mapSpread};
                                                  ^"};
  core::List<core::int> lhs70 = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:30: Error: Can't spread a value with static type 'Null'.
  List<int> lhs70 = <int>[...null];
                             ^");
  core::Set<core::int> set70 = block {
    final core::Set<core::int> #t29 = new col::_Set::•<core::int>();
    #t29.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:29: Error: Can't spread a value with static type 'Null'.
  Set<int> set70 = <int>{...null};
                            ^"){(core::int) → core::bool};
  } =>#t29;
  core::Set<dynamic> set71ambiguous = block {
    final core::Set<dynamic> #t30 = new col::_Set::•<dynamic>();
    #t30.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:8: Error: Can't spread a value with static type 'Null'.
    ...null,
       ^"){(dynamic) → core::bool};
    #t30.{core::Set::addAll}{Invariant}(core::_GrowableList::•<dynamic>(0)){(core::Iterable<dynamic>) → void};
  } =>#t30;
  core::Map<core::String, core::int> map70 = <core::String, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:138:45: Error: Can't spread a value with static type 'Null'.
  Map<String, int> map70 = <String, int>{...null};
                                            ^": null};
  core::List<core::int> lhs80 = block {
    final core::List<core::int> #t31 = core::_GrowableList::•<core::int>(0);
    final has-declared-initializer core::Iterable<core::int>? #t32 = null;
    if(!(#t32 == null))
      #t31.{core::List::addAll}{Invariant}(#t32{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
  } =>#t31;
  core::Set<core::int> set80 = block {
    final core::Set<core::int> #t33 = new col::_Set::•<core::int>();
    final has-declared-initializer core::Iterable<core::int>? #t34 = null;
    if(!(#t34 == null))
      #t33.{core::Set::addAll}{Invariant}(#t34{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
  } =>#t33;
  core::Set<dynamic> set81ambiguous = block {
    final core::Set<dynamic> #t35 = new col::_Set::•<dynamic>();
    final has-declared-initializer core::Iterable<dynamic>? #t36 = null;
    if(!(#t36 == null))
      #t35.{core::Set::addAll}{Invariant}(#t36{core::Iterable<dynamic>}){(core::Iterable<dynamic>) → void};
    #t35.{core::Set::addAll}{Invariant}(core::_GrowableList::•<dynamic>(0)){(core::Iterable<dynamic>) → void};
  } =>#t35;
  core::Map<core::String, core::int> map80 = block {
    final core::Map<core::String, core::int> #t37 = <core::String, core::int>{};
    final has-declared-initializer core::Map<core::String, core::int>? #t38 = null;
    if(!(#t38 == null))
      #t37.{core::Map::addAll}{Invariant}(#t38{core::Map<core::String, core::int>}){(core::Map<core::String, core::int>) → void};
  } =>#t37;
  core::Map<core::String, core::int> map90 = block {
    final core::Map<core::String, core::int> #t39 = col::LinkedHashMap::of<core::String, core::int>(self::bar<core::String, core::int>());
  } =>#t39;
  core::List<core::int> list100 = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
  List<int> list100 = <int>[...listNum];
                               ^");
  core::Map<core::num, core::int> map100 = <core::num, core::int>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
  Map<num, int> map100 = <num, int>{...mapIntNum};
                                       ^"};
  core::List<core::int> list110 = block {
    final core::List<core::int> #t40 = core::_GrowableList::•<core::int>(0);
    {
      synthesized core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t41 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int #t42 = #t41 as{TypeError} core::int;
          #t40.{core::List::add}{Invariant}(#t42){(core::int) → void};
        }
      }
    }
  } =>#t40;
  core::Map<core::num, core::int> map110 = block {
    final core::Map<core::num, core::int> #t43 = <core::num, core::int>{};
    {
      synthesized core::Iterator<core::MapEntry<core::num, core::int>> :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::num, core::int>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<dynamic, dynamic> #t44 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::num, core::int>};
        {
          final core::num #t45 = #t44.{core::MapEntry::key}{dynamic} as{TypeError} core::num;
          final core::int #t46 = #t44.{core::MapEntry::value}{dynamic} as{TypeError} core::int;
          #t43.{core::Map::[]=}{Invariant}(#t45, #t46){(core::num, core::int) → void};
        }
      }
    }
  } =>#t43;
}
static method main() → dynamic {}
